2012-01-24 5 views
8

名前空間と同じ名前のクラスの両方を含むJava jarからクラスをインポートしようとするMavenまたはEclipseでScalaをコンパイルするときに問題が発生します。
ただし、私はscalacでコンパイルできます。パッケージに同じ名前のオブジェクトとパッケージが含まれています

など。 Javaプロジェクト(JAR)が含まれています:Scalaの2.9.0.1(およびmaven-scala-plugin)でのMaven 3.0.03/3.7.1のEclipseを使用して

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

src/foo/bar.java 

src/foo/bar/some_resource.txt 

-> foobar.jar 

Scala project references foobar.jar 

Foobartest.scala: 

import foo.bar 

class foobartest { 

} 

コンパイラはと文句を言います。

私が問題を抱えているjarはjenkins-core-1.399.jarです - 名前空間と同じ名前のオブジェクトが存在するいくつかのインスタンスが含まれています。
私はJavaでJenkinsプラグインを作成しようとしています(これはJavaでは可能ですが、すべてのライブラリがscalaになっているのでscalaを好むでしょう)、Mavenを使用することに依存しています -
https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial

+0

あなたはScalaで書かれたJenkinsプラグインを手に入れましたか?私は同じことをやっている – KeepCalmAndCarryOn

+0

はい、それは私のgithubで。私はそれを公表しようとしましたが、私はジェンキンの人々から正直言って大きな支持を得ていませんでした。 https://github.com/Chemmo/scala_plugin – David

+0

私は1つも書きましたが、プラグインマネージャからダウンロードできませんでした。https://github.com/jenkinsci/hello-world-scala-plugin – KeepCalmAndCarryOn

答えて

5

このような制限は、SI-4695: package object misbehaves in the presence of classfilesで概説されています。

SI-2089 (naming restriction makes some jars unusable)で示唆したようにchangeset 25145に実装され、あなたは、「resolve-term-conflict」を試してみて、使用することができますが:

は、パッケージと対象物との間に名前空間の衝突を解決するための-Yオプションを追加しました。
これは鈍い道具です。人々がこれらの紛争をたくさんしている場合、個々に微妙に解決する必要がある場合、おそらく運が尽きるでしょう。

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

実際のコンパイラオプションは、「-Yresolve期紛争:戦略」での戦略は、パッケージ、オブジェクト、エラーのいずれかです。

関連する問題