【发布时间】:2012-03-23 10:45:19
【问题描述】:
所以我用 main 方法编写了一个类,该类依赖于另一个依赖于许多 jar 文件的 jar 文件。为了让事情更简单,我使用了 One-JAR 并创建了一个可执行的 jar。 我创建的 jar 很好,我可以运行它:
java -jar foo.jar
这成功执行了我的主应用程序。
接下来,我在 Eclipse 中创建了一个新项目,并通过“添加外部 jars”将 foo.jar 添加到构建路径(我一直这样做,它总是有效)。出于某种原因,在我的 Eclipse 项目中,它抱怨它无法识别从 foo.jar 导入的包。
我查看了以前关于 Eclipse 的 jar 问题的问题,但没有任何帮助。我怀疑这与 One-Jar 创建的树有关,但由于命令行中的“java -jar foo.jar”工作正常,我不明白为什么 Eclipse 看不到类文件。
谢谢!
更新: 下面是 One-Jar 创建的 foo.jar 的样子:
META-INF OneJar.class com doc lib main
内部主要:
main main.jar
在这个主目录中,我的应用程序的包树带有 .class 文件。现在,如果我在 Eclipse 中包含“main.jar”,它会识别我的应用程序。但是它无法识别 lib/ 下的其他依赖项,因此它会引发运行时异常。
更新 2: 所以 One-jar 和 Eclipse 的问题并没有解决,但是有人提到了 fat jar Eclipse 插件,所以我尝试了一下,它完美地完成了工作。它生成的 jar 同时适用于 Eclipse 和 Maven。它们实际上也支持 One-Jar,您可以在创建 jar 时检查 One-Jar 选项。我没有使用它,但它就在那里(如果它有效,它实际上值得使用,因为它应该处理库冲突)。 谢谢您的帮助。
【问题讨论】:
-
one-jar 创建的 jar 只是一个包含类的 jar。
-
对。但是假设我的包是 com.example.main 然后它将 .class 文件放在: main/main/com/example/main/
-
哦,我明白你在说什么。我认为这样做是为了避免冲突,类似于着色的工作原理——不确定 one-jar 是否有非修饰选项。