我试图通过IntelliJIDEA的jar工件将一个使用OptaPlanner6.0.1库的项目打包到一个.jar文件中,但不是我的包含标准
Manifest-Version: 1.0
Main-Class: a.b.c.app
jar使用ecj-3.7.2.jar中提供的jar,它是OptaPlanner的支持库之一:
Manifest-Version: 1.0
Build-Jdk: 1.6.0_26
Built-By: ibrandt
Created-By: Apache Maven
Archiver-Version: Plexus Archiver
正因为如此,在尝试运行应用程序时发生"no main manifest attribute, in appname.jar"
错误。如果我手动将.jar文件中的清单替换为我的清单,则一切正常。我可以做些什么来修复这个问题吗?
我将库保存在一个单独的/lib目录中,并将它们添加到jar工件的根目录中作为提取目录,IntelliJ IDEA是v13.0.1。
8条答案
按热度按时间snvhrwxg1#
我也有同样的问题。
确保您的MANIFEST.MF在:
非
qlvxas9a2#
要修复:
1.* 文件〉项目结构 *
1.在左侧的 * 项目设置 * 下,选择“Artifacts”
1.在中间窗格中找到JAR定义并选择它
1.在“OutputLayout”选项卡的左窗格中,在列表中找到jar文件并选择它
1.在底部,单击“Use Existing Manifest”按钮并选择项目源中的清单文件。
1.单击OK并运行构建
d5vmydt93#
正如@grudolf在其他答案中的评论所指出的,一种方法(也是唯一一种在导入的Gradle项目中对我有效的方法)是创建一个空jar,如下所示:
更新:
这绝对是Idea中的一个bug。当有提取目录时,这个链接的答案可靠地工作。本质上,你找到你的.idea/JARNAME.xml,添加添加以下元素到你的jar的
<root>
元素的 very top。任何包含清单的新文件副本上方的提取元素都会破坏你的新清单。xienkqul4#
如果你想指定主类,你必须将这个插件添加到pom.xml中:
r3i60tvu5#
我也有类似的问题。
问题出在文件pom.xml中。
我不知道为什么这段代码在eclipse中可以工作,但在IntelliJ中却不行
这是正确的。
清单。MF工作!!!
希望这能帮上忙。
cgyqldqp6#
有几种方法可以生成可执行的jar文件。使用IntelliJ的GUI功能是一种很好的方法。另一种方法是使用Maven(或类似的gradle,buildr等),这是构建服务器友好的:
它或多或少可以从optaplanner示例maven build中复制粘贴:
1.最终用户jar(optaplanner-examples-*.jar)必须在其清单中包含其依赖项的类路径。
7d7tgy0s7#
为了避免Manifest这样的问题,你应该在“src”目录中有一个名为“META-INF”的目录。因此,创建它并将一个名为“MANIFEST.MF”的文件放入其中,其中包含以下内容:
别忘了替换上面包含Main类的包的名称!
i7uaboj48#
请按照此处详细说明的步骤操作
https://www.jetbrains.com/help/idea/2022.2/convert-a-regular-project-into-a-maven-project.html#develop_with_maven
单击Build Project图标构建项目。IntelliJ IDEA会生成目标文件夹。请注意,IntelliJ IDEA只编译源文件,不会创建JAR文件或Manifest文件。
在resources目录中创建一个Manifest文件。
右键单击目录,选择“新建|目录创建META-INF子目录|文件来创建MANIFEST.MF文件。
清单文件在编辑器中打开MANIFEST.MF文件并添加有关主类的信息。
检查以下代码:
或者,我们可以要求Maven将这行代码添加到MANIFEST.MF文件中,并在pom.xml中包含以下代码:
maven-jar-plugin com.company.MyApp在您的POM中指定Manifest文件信息,以便您可以使用Maven生成可执行的jar文件。
或者,您可以执行package而不是install命令来实现相同的结果。