Eclipse无法识别我使用One-JAR创建的jar

问题描述:

所以我编写了一个主类方法,它依赖于另一个依赖于许多jar文件的jar文件。为了简单起见,我使用了One-JAR并创建了一个可执行的jar。 我创建的JAR是好的,我可以运行它:Eclipse无法识别我使用One-JAR创建的jar

java -jar foo.jar 

这成功地执行我的主要应用。

接下来,我在Eclipse中创建了一个新项目,并通过“添加外部罐子”(我一直这样做,它始终工作)将foo.jar添加到构建路径。出于某种原因,在我的Eclipse项目中,它抱怨说它无法识别foo.jar的软件包导入。

我查看了以前关于Eclipse上jar问题的问题,但没有任何帮助。我怀疑这与One-Jar创建的树有关,但由于命令行中的“java -jar foo.jar”工作正常,我不明白为什么Eclipse没有看到类文件。

谢谢!

更新: 这里有一个-JAR创建了foo.jar中看起来像:

META-INF  OneJar.class com   doc   lib   main 

内主:

main  main.jar 

内部这个主要我与应用程序的包树。类文件。现在,如果我在Eclipse中包含“main.jar”,它确实可以识别我的应用程序。但后来它不能识别lib /下的其他依赖项,因此它会引发运行时异常。

更新2: 所以One-jar和Eclipse的问题没有解决,但有人提到了这个fat jar Eclipse插件,所以我尝试了它,它完成了这项工作。它生成的jar与Eclipse和Maven一起工作。他们实际上也支持One-Jar,你可以在创建jar时检查One-Jar选项。我没有使用它,但它在那里(如果它工作,它实际上值得使用,因为它应该照顾图书馆冲突)。 感谢您的帮助。

+0

one-jar创建的jar只是一个包含类的jar。 – 2012-03-22 16:53:21

+0

对。但是让我们说我的包是com.example.main,然后它将.class文件放在:main/main/com/example/main/ – user247866 2012-03-22 16:57:11

+1

哦,我明白你在说什么。我认为这样做是为了避免冲突,类似于阴影的工作方式 - 不确定单个罐子是否具有非束缚选项。 – 2012-03-22 17:27:28

Eclipse不会理解罐子里面的罐子。包括其他罐子分开建立路径会更好。

+0

试图包含foo.jar和main.jar,它们编译但由于其他jar依赖项而在运行时无法工作。我可以单独添加所有其他的罐子,这将工作,但我试图避免它。这就是为什么我使用One-Jar,它可以通过命令工作,而不是通过Eclipse。 – user247866 2012-03-22 17:20:03

+0

好的,有什么具体的原因,你想避免它。因为这是向构建路径添加依赖jar的常用方法。如果你想把所有的东西都捆绑成一个jar文件,那么你可以解压所有的类文件并将它们捆绑到一个jar文件中。它可能听起来很愚蠢:)。但我想不出其他方式...... – tsatiz 2012-03-22 17:37:28

+1

使用单个罐子更方便,而且更容易将其运送给其他人。而且,One-Jar应该解决依赖冲突(例如,我的应用程序使用公共库3.4,而我依赖的其中一个库使用commons 2.4)。一罐应该能够遮蔽这一点。 – user247866 2012-03-22 17:44:20