我正在尝试使用OptaPlanner 6.0.1库通过IntelliJ IDEA的jar工件将项目打包到.jar中,而不是我的manifest.mf包含标准
Manifest-Version: 1.0
Main-Class: a.b.c.app
jar使用的是ecta-3.7.2.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目录中,并将它们作为Extracted Directory添加到jar工件的根目录中,IntelliJ IDEA是v13.0.1。
答案 0 :(得分:237)
我遇到了同样的问题。
确保您的MANIFEST.MF位于:
src/main/resources/META_INF/
不是
src/main/java/META_INF/
答案 1 :(得分:10)
修复:
答案 2 :(得分:10)
正如@ grudolf在其他一个答案中的评论所述,一种方法(在导入的Gradle项目中唯一一个对我有用的方法)是创建一个空jar,如下所示:
这绝对是Idea中的一个错误。当提取目录时,This linked answer可靠地工作。实质上,您找到了.idea / JARNAME.xml,添加以下元素添加到jar的<root>
元素的 very top 。新文件副本上方包含清单的任何提取元素都会破坏您的新清单。
<element id="directory" name="/META-INF">
<element id="file-copy" path="$PROJECT_DIR$/modulename/src/META-INF/MANIFEST.MF" />
</element>
答案 3 :(得分:6)
如果要指定Main Class,则必须将此插件添加到pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<mainClass>Form</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
答案 4 :(得分:1)
我有类似的问题。
问题出在文件pom.xml中。
<archive>
<manifestEntries>
<Dependencies>one.jar,
two.rar,
other.jar
</Dependencies>
</manifestEntries>
</archive>
我不知道这个代码在eclipse中用于什么原因,但在IntelliJ
中没有这是正确的。
<archive>
<manifestEntries>
<Dependencies>one.jar, two.rar, other.jar</Dependencies>
</manifestEntries>
</archive>
Manifest.mf工作!!!
我希望这会有所帮助。
答案 5 :(得分:0)
有几种方法可以生成可执行jar。使用IntelliJ的GUI功能是一种好方法。另一种方法是使用 Maven (或者类似于gradle,buildr等),它是构建服务器友好的:
或多或少可以从optaplanner示例maven build中复制粘贴:
答案 6 :(得分:0)
要像Manifest一样没有问题,你应该在“src”目录中有一个名为“META-INF”的目录。因此,创建它并在其中放入一个名为“MANIFEST.MF”的文件,其中包含以下内容:
Manifest-Version: 1.0
Main-Class: <packageName>.Main
不要忘记更换上面包含Main类的包名!