簡體   English   中英

IntelliJ IDEA中錯誤的Manifest.mf創建了.jar

[英]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/

修理:

  1. 文件>項目結構
  2. 在左側的項目設置下,選擇“工件”
  3. 在中間窗格中找到JAR定義並選擇它
  4. 在“輸出布局”選項卡的左窗格中,在列表中找到jar文件並選擇它
  5. 在底部,單擊“使用現有清單”按鈕,然后選擇項目源中的清單文件。
  6. 單擊確定並運行構建

正如@grudolf在其他答案之一中的評論中所指出的那樣,一種方法(也是在導入的Gradle項目中對我有用的唯一方法)是創建一個空jar,如下所示:

  • 項目結構->工件-> + 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構建中粘貼或多或少地復制:

  1. 最終用戶jar(optaplanner-examples-*。jar)必須在其manifest中包括其依賴項的類路徑
  2. 然后,sh和bat腳本必須相應地運行該jar。

為了像清單一樣沒有問題,您應該在“ src”目錄中有一個名為“ META-INF”的目錄。 因此,創建它並在其中放入一個名為“ MANIFEST.MF”的文件,其中包含以下內容:

Manifest-Version: 1.0
Main-Class: <packageName>.Main

不要忘記替換上面包含Main類的包名稱!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM