![](/img/trans.png)
[英]Make jar with intellij idea in a maven project with wrong MANIFEST.MF
[英]Wrong Manifest.mf in IntelliJ IDEA created .jar
我正在嘗試通過IntelliJ IDEA的jar工件將使用OptaPlanner 6.0.1庫的項目打包到.jar中,而不是將我的manifest.mf包含標准
Manifest-Version: 1.0
Main-Class: a.b.c.app
該jar使用OptaPlanner的支持庫之一ecj-3.7.2.jar中提供的jar:
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。
我有同樣的問題。
確保您的MANIFEST.MF位於:
src/main/resources/META_INF/
不
src/main/java/META_INF/
修理:
正如@grudolf在其他答案之一中的評論中所指出的那樣,一種方法(也是在導入的Gradle項目中對我有用的唯一方法)是創建一個空jar,如下所示:
這絕對是Idea中的錯誤。 當提取目錄時, 此鏈接的答案可以可靠地工作。 從本質上講,您找到了.idea / JARNAME.xml,將以下元素添加到jar的<root>
元素的最頂部 。 新文件副本上方包含清單的所有提取元素都會破壞您的新清單。
<element id="directory" name="/META-INF">
<element id="file-copy" path="$PROJECT_DIR$/modulename/src/META-INF/MANIFEST.MF" />
</element>
如果要指定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>
我有一個類似的問題。
問題出在文件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工作了!!!
我希望這有幫助。
有幾種生成可執行jar的方法。 使用IntelliJ的GUI功能是一種好方法。 另一種方法是使用對構建服務器友好的Maven (或類似的在gradle,buildr等中):
它可以從optaplanner示例maven構建中粘貼或多或少地復制:
為了像清單一樣沒有問題,您應該在“ src”目錄中有一個名為“ META-INF”的目錄。 因此,創建它並在其中放入一個名為“ MANIFEST.MF”的文件,其中包含以下內容:
Manifest-Version: 1.0
Main-Class: <packageName>.Main
不要忘記替換上面包含Main類的包名稱!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.