Пакет содержит объект и пакет с тем же именем - PullRequest
8 голосов
/ 24 января 2012

У меня проблемы с компиляцией Scala с Maven или Eclipse, где я пытаюсь импортировать класс из jar-файла Java, который содержит пространство имен и класс с одинаковым именем.
Я могу скомпилировать с scalac, однако.

например. Java-проект (jar) содержит:

src/foo/bar.java

src/foo/bar/some_resource.txt

-> foobar.jar

Scala project references foobar.jar

Foobartest.scala:

import foo.bar

class foobartest {

}

Компилятор жалуется:

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

Использование Maven 3.0.03 / Eclipse 3.7.1 с Scala 2.9.0.1 (и maven-scala-plugin).

Jar, с которым у меня проблемы, это jenkins-core-1.399.jar - он определенно содержит несколько случаев, когда есть пространство имен и объект с тем же именем.
Я пытаюсь написать плагин Jenkins в Scala (я мог бы сделать это на Java, но предпочел бы scala, поскольку все наши библиотеки находятся в scala), который зависит от использования Maven -
https://wiki.jenkins -ci.org / дисплей / Дженкинс / Plugin + учебник .

Ответы [ 2 ]

5 голосов
/ 25 января 2012

Такое ограничение было указано в SI-4695: объект пакета плохо себя ведет при наличии файлов классов .

Как предложено в SI-2089 (ограничение имен делает некоторые банки непригодными для использования) , вы можете попробовать использовать "resolve-term-conflict", как реализовано в changeset 25145 :

Добавлена ​​опция -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 голосов
/ 08 января 2014

Фактическая опция компилятора - "-Yresolve-term-конфликт: стратегия ", где стратегия - либо пакет, объект, ошибка.

...