首先,如果不使用 Artifacts,我无法使用 IntelliJ 生成 .jar,我不明白为什么。我制作我的项目,构建它,运行它,制作模块,但没有一个在 out 目录中生成 de .jar ...也许原因是我从不等到运行结束并且总是用 alt+F2 中断,因为程序完全运行起来很长,它是一个机器人。
然后我尝试使用 IntelliJ 中的 Artifact 函数生成 .jar,但它生成了一个我无法运行的 .jar:
-java prgr.jar
返回错误:无法找到或加载主类 prgr.jar
并且-java -jar prgr.jar
返回prgr.jar中没有主要 list 属性
因此,鉴于当我从 IntelliJ 运行主类时,我的程序运行完美,我遇到了几个问题:
命令之间有什么区别:
-java prgr.jar
和-java -jar prgr.jar
什么是 MANIFEST.MF 以及如何使用它?
如何生成可以从 shell 运行的 .jar?如何正确使用 Artifact 功能,我必须放置哪些文件以及在哪里才能使其工作?
编辑:我刚刚看到我需要 MANIFEST.MF,但是如何告诉 .jar 在哪里可以找到 MANIFEST?
最佳答案
如果您在应用程序中包含任何签名的 JAR,然后使用 IntelliJ 构建 Artifact ,它将提取 JARS 并将它们与您编译的输出捆绑在一起。
这会导致 JAVA 安全异常。我在已签名的 Eclipse Paho 和 Bouncy CaSTLe 上看到了这一点。
您可以检查您正在使用的任何库 JAR 是否已使用 jarsigner 工具进行签名。
jarsigner -verify -verbose <path to library JAR>
更改您的 IntelliJ Artifact 设置,以便将它们捆绑为库而不是提取。如您所料,提取会使证书失效。
尝试仅使用 Main 创建一个虚拟项目。一次添加 1 个库 JAR(您尝试使用其构建)。每次构建一个输出 JAR,直到 Main 中断。我就是这样发现的。
IntelliJ 应该警告你......
关于java - 无法使用 IntelliJ 生成可行的 .jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25623605/