当前位置: 首页 > 面试题库 >

软件包包含对象和具有相同名称的软件包

金伟
2023-03-14
问题内容

我在用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

在Scala 2.9.0.1(和maven-scala-plugin)中使用Maven 3.0.03 / Eclipse 3.7.1 。

我遇到问题的jar是jenkins-core-1.399.jar-它肯定包含几个实例,其中存在同名的名称空间和对象。
我正在尝试在Scala中编写一个Jenkins插件(我可以在Java中做到这一点,但由于我们所有的库都在scala中,所以我希望使用scala),这取决于使用Maven-
https://wiki.jenkins-ci.org/ display / JENKINS / Plugin +
tutorial。


问题答案:

SI-4695中概述了这种限制:在类文件存在的情况下,包对象行为不当。

如SI-2089中所建议的(命名限制使某些jar无法使用),您可以尝试使用“ resolve-term- conflict”,如变更集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或Eclipse编译一些Scala时遇到问题,我尝试从Java jar导入一个包含名称空间和同名类的类。 我可以用编译。 例如,Java项目(jar)包含: 编译器抱怨: 在Scala 2.9.0.1(和)中使用Maven 3.0.03 / Eclipse 3.7.1 。 我遇到问题的jar是-它肯定包含几个实例,其中存在同名的名称空间和对象。 我正在尝试在Scala中

  • 问题内容: 我正在做一个大项目,该项目很可能最终包含成千上万行代码,对于当前结构,我喜欢这样: 这样做的问题是controllers和models目录包含很多文件,全部使用和。因此,我正在考虑将其拆分为: 凡在控制器包的用户文件中可能包含的文件,等等。 现在,我读到像或那样的软件包是不好的做法,但是我担心对这两个软件包进行命名可能不是一个好主意,因为它们是同一项目的一部分(即使它们位于不同的目录中

  • 问题内容: 假设我有一个包含模块的软件包: 并且这些模块需要引用彼此包含的功能。似乎我的模块遇到了问题,因为有一个同名的标准模块。 例如,在我的模块同时需要我和标准python 模块的情况下,我会遇到麻烦,因为解释器会在程序包内部查找并找到我的模块,然后再遇到标准模块。 有没有办法解决?这是不可以的情况,并且模块名称不能重复使用吗? 有关封装哲学的任何解决方案和意见在这里都将很有用。 问题答案:

  • 问题内容: 我知道如何使用Anaconda安装软件包,以及如何安装PyPi上的软件包,如手册中所述。 但是,如何才能将软件包/文件夹永久包含在Anaconda环境中,以便可以导入当前正在使用的代码,并且在重新启动后仍然可用? 我当前的方法是使用: 这不是很方便。 有什么提示吗? 提前致谢! 问题答案: 我在Anaconda论坛中找到了两个问题的答案: 1.)将模块放入站点包中,即始终位于的目录中。

  • Tazpkg - 软件包管理器 Slitaz提供一个小型软件包管理器,它能轻易在系统里安装许多软件。Tazpkg是一个由SHell脚本写的轻量级的软件包管理器,能安 装.tazpkg文件。它能在Busybox、ash shell和bash中正常运行。Tazpkg可以让你列出软件包列表、安装软件包、删除软件包、下载软件包、解压软件包、打包软件包、查找软件包或者取 得有关可用软件包或所有已安装软件包的

  • 问题内容: 我的$ GOPATH是 我当前的golang版本: 我在这个工作区下有多个golang项目,所以这是目录的结构 在proj1的main.go中,我将使用该项目下其他软件包的导入,如下所示: 但是,当我运行“ go build”时,我一直在收到错误消息: “ 无法加载包:非本地包中的本地导入“ ../package” 如果我不想使用相对的包路径,例如使用它: 然后一切都会正常。 如果使用