我正在使用 IntelliJ IDEA 创建一个 JAR。我为库 JAR 选择了“来自具有依赖项的模块的 JAR”和“提取到目标 JAR” - 生成的 JAR 看起来很好:
myJar.jar
|
+- META-INF
| +- MANIFEST.MF
+- com
| +- my
| +- package
| +- Main.class
+- some dependencies...
我检查了两次:所有需要的依赖项都存在。这Main-Class
领域在MANIFEST.MF
指向正确的主类(com.my.package.Main
在此示例中)。我已在存档工具中打开该文件并使用检查它
jar tf myJar.jar
两者都表明所需的课程是可用的(也Main.class
)。我已经离开了Classpath
IntelliJ 向导中的字段为空,因为我不需要任何外部库。但是,当我发出
java -jar myJar.jar
它抛出以下异常:
Error: could not find or load main class com.my.package.Main
Caused by: java.lang.ClassNotFoundException: com.my.package.Main
我已经关注了本指南由 JetBrains 提供 https://blog.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/,并且 IntelliJ 自动添加来自 Maven 的所有依赖项pom.xml
解压到 JAR 中,这是正确的。
我是否缺少一些我应该在这里配置的东西,为什么这不起作用?
(注意:当我为库 JAR 选择“复制到输出文件夹并通过清单链接”时,从该项目生成 JAR 也不起作用。)
(注2:使用maven-assembly-plugin
遗憾的是,这不是一个选项,因为我引用了其他 IntelliJ 工作区模块,但这些模块不会被包含在内。)
Update:它应该按原样工作还显示了以下现象:当我解压缩我的 JAR 并执行
java -cp . com.my.package.Main
在创建的目录中,它工作没有任何问题,考虑到Java拒绝加载它,这很奇怪......