2012-01-24 41 views
8

Tôi đang gặp sự cố khi biên soạn một số Scala với Maven hoặc Eclipse nơi tôi cố gắng nhập một lớp từ một jar Java chứa cả vùng tên và lớp có cùng tên.
Tôi có thể biên dịch với scalac, tuy nhiên.Gói chứa đối tượng và gói có cùng tên

Ví dụ: các dự án Java (jar) chứa:

src/foo/bar.java 

src/foo/bar/some_resource.txt 

-> foobar.jar 

Scala project references foobar.jar 

Foobartest.scala: 

import foo.bar 

class foobartest { 

} 

Trình biên dịch phàn nàn với:

package foo contains object and package with same name: bar 
one of them needs to be removed from classpath 

Sử dụng Maven 3.0.03/Eclipse 3.7.1 với Scala 2.9.0.1 (và maven-scala-plugin).

Bình mà tôi đang gặp phải sự cố là jenkins-core-1.399.jar - chắc chắn có một số trường hợp có không gian tên và đối tượng có cùng tên.
Tôi đang cố gắng viết một plugin Jenkins trong Scala (tôi có thể thực hiện điều này bằng Java nhưng sẽ thích scala vì tất cả các thư viện của chúng tôi đang ở scala), phụ thuộc vào việc sử dụng Maven -
https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial.

+0

Bạn đã bao giờ nhận được một plugin Jenkins được viết bằng Scala chưa? Tôi đang cố gắng cùng một – KeepCalmAndCarryOn

+0

Có, nó trên github của tôi. Tôi đã cố gắng để xuất bản nó nhưng tôi đã không nhận được sự hỗ trợ tuyệt vời từ những người jenkins phải trung thực. https://github.com/Chemmo/scala_plugin – David

+0

Tôi cũng đã viết một và đã làm cho nó được xuất bản, nhưng không thể tải xuống từ trình quản lý plugin https://github.com/jenkinsci/hello-world-scala-plugin – KeepCalmAndCarryOn

Trả lời

5

Loại giới hạn được nêu trong SI-4695: package object misbehaves in the presence of classfiles.

Như đã đề cập trong SI-2089 (naming restriction makes some jars unusable), bạn có thể thử và sử dụng "resolve-term-conflict", như thực hiện trong changeset 25145:

Added một lựa chọn -Y để giải quyết va chạm namespace giữa gói và đối tượng.
Đó là một công cụ cùn: nếu mọi người có nhiều xung đột mà họ cần phải giải quyết theo phong cách riêng lẻ, họ có thể sẽ không may mắn.

val termConflict = ChoiceSetting  ("-Yresolve-term-conflict", "strategy", "Resolve term conflicts", 113 List("package", "object", "error"), "error") 

// Some jars (often, obfuscated ones) include a package and 
// object with the same name. Rather than render them unusable, 
// offer a setting to resolve the conflict one way or the other. 
// This was motivated by the desire to use YourKit probes, which 
// require `yjp.jar` at runtime. See SI-2089. 
4

Các tùy chọn biên dịch thực tế là "-Yresolve hạn xung đột: chiến lược", nơi chiến lược là một trong hai gói, đối tượng, sai sót.

Các vấn đề liên quan