【问题标题】:Package contains object and package with same name包包含同名的对象和包
【发布时间】:2012-02-17 13:48:51
【问题描述】:

我在使用 Maven 或 Eclipse 编译一些 Scala 时遇到问题,我尝试从包含名称空间和同名类的 Java jar 导入一个类。
不过,我可以使用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 - 它肯定包含多个实例,其中存在同名的命名空间和对象。
我正在尝试在 Scala 中编写一个 Jenkins 插件(我可以在 Java 中执行此操作,但更喜欢 scala,因为我们所有的库都在 scala 中),这取决于使用 Maven -
https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial

【问题讨论】:

标签: java eclipse scala jenkins maven-3


【解决方案1】:

SI-4695: package object misbehaves in the presence of classfiles 中概述了这种限制。

按照SI-2089 (naming restriction makes some jars unusable) 中的建议,您可以尝试使用“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.

【讨论】:

  • maven 中的等效选项是什么?
  • @Saurabh 我还没有找到任何直接明显的 maven 等效选项。
  • 我知道了,在这里添加:stackoverflow.com/a/51495053/1610034.
【解决方案2】:

实际的编译器选项是“-Yresolve-term-conflict:strategy”,其中 strategy 是包、对象、错误。

【讨论】:

  • maven 中的等效选项是什么?
猜你喜欢
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
相关资源
最近更新 更多