簡體   English   中英

如何從 IntelliJ 正確構建 jars?

[英]How to build jars from IntelliJ properly?

我有一個包含單個模塊和一些依賴項的項目。 我想在包含已編譯模塊的單獨目錄中創建一個 jar。 此外,我希望在我的模塊旁邊顯示依賴項。

無論我如何扭曲 IntelliJ 的“構建 jar”過程,我的模塊的 output 都顯示為空(除了 META-INF 文件)。

這是使用 IntelliJ 10 構建 jar 的方法http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

文件->項目結構->項目設置->工件-> 單擊綠色加號-> Jar ->從具有依賴項的模塊...

以上將“骨架”設置為 jar 將保存到的位置。 要實際構建和保存它,請執行以下操作:

提取到目標 Jar

好的

構建 | 構建工件 | 建造

嘗試從中提取 .jar 文件

項目名稱 | 出| 文物| 項目名稱_jar | 項目名稱.jar

這在 2017 年仍然是一個問題,我希望它會幫助那里的人! 我發現了兩種在 IntelliJ 2017.2 下創建工作 jar-s 的可能性

1. 從 IntelliJ 創建工件:

  • 轉到項目結構:

文件菜單

  • 創建一個新工件:

創建一個新工件

  • 選擇主類,並確保更改清單文件夾:

在此處輸入圖片說明

您必須更改清單目錄:

<project folder>\src\main\java 

用“資源”替換“java”

<project folder>\src\main\resources

它應該是這樣的:

新清單的正確方法

  • 然后你選擇你想要打包在你的 jar 中的依賴項,或者 NEAR 你的 jar 文件

  • 要構建您的工件,請轉到構建工件並選擇“重建”。 它將使用您的 jar 文件及其依賴項創建一個“out”文件夾。

在此處輸入圖片說明

2. 使用 maven-assembly-plugin

將構建部分添加到 pom 文件

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <finalName>ServiceCreate</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <archive>
                        <manifest>
                            <mainClass>com.svt.optimoo.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • 創建一個新的運行/調試配置:

創建一個新的運行/調試配置:

  • 選擇應用:

選擇應用

  • 填寫表格
  • 在構建后添加“assembly:single”maven 目標最后執行

在此處輸入圖片說明

最終設置

  • 保存,然后運行

在此處輸入圖片說明

此過程將在“目標”文件夾下創建 jar 文件

JAR 文件位置

我最近遇到了這個問題,我認為如果任何先前的解決方案或鏈接缺少細節,這些步驟很容易遵循。

如何使用 IntelliJ IDEA 14.1.5 創建.jar

  1. 文件 > 全部保存。
  2. 使用 main 方法運行驅動程序或類。
  3. 文件 > 項目結構。
  4. 選擇選項卡“工件”。
  5. 單擊窗口頂部附近的綠色加號按鈕。
  6. 從添加下拉菜單中選擇 JAR。 選擇“來自具有依賴項的模塊”
  7. 選擇主類。
  8. 單選按鈕應選擇“提取到目標 JAR”。 按確定。
  9. 選中“在制造上構建”框
  10. 按應用和確定。
  11. 從主菜單中,選擇構建下拉列表。
  12. 選擇選項構建工件。

對於那些像我一樣從圖像中受益的人:

文件->項目結構

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

以下是 Maven 項目的 2 個示例,一步一步:

方法一:用maven和pom.xml構建jar

  1. 文件、新建、項目、Maven
  2. 創建一個包,在該包內創建一個java程序在此處輸入圖片說明
  3. 在 pom.xml 中,添加 maven-jar-plugin。

     <plugin> <!-- Build an executable JAR --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>somePackage.sample</mainClass> </manifest> </archive> </configuration> </plugin>

屏幕截圖: 在此處輸入圖片說明 4.點擊搜索圖標打開maven項目框並輸入maven, 在此處輸入圖片說明

  1. 點擊清理,然后點擊安裝在此處輸入圖片說明

  2. 您的 jar 文件將顯示在目標文件夾中在此處輸入圖片說明

  3. 使用 java -jar 測試您的 jar

在此處輸入圖片說明

方法二:不用修改 pom.xml 用 maven 構建 jar

  1. 文件、新建、項目、Maven
  2. 創建一個包,在該包內創建一個java程序(同上)
  3. File -> Project Structure -> Project Settings -> Artifacts -> 點擊綠色加號-> Jar -> From modules with dependencies

很重要!

MANIFEST.MF 需要在您的資源文件夾中,Main.Class 需要引用 {package}-{class-name-that-c​​ontains-main-class}

在此處輸入圖片說明 在此處輸入圖片說明

  1. 然后單擊菜單上的構建,構建工件,構建

在此處輸入圖片說明

  1. 在out文件夾中找到jar

在此處輸入圖片說明

  1. 運行 :)

在此處輸入圖片說明

當我使用這些解決方案時,會出現此錯誤:

java -jar xxxxx.jar

沒有主要清單屬性,在 xxxxx.jar 中

解決方案是

您必須更改清單目錄:

<project folder>\src\main\java 

將 java 更改為資源

<project folder>\src\main\resources

可能有點晚了,但我設法通過這種方式解決了它-> 用 winrar 打開並刪除 META-INF 文件夾中的 ECLIPSEF.RSA 和 ECLIPSEF.SF,此外,放置“Main-class: main_class_name”(不帶“.class”) ) 在 MANIFEST.MF 中。 確保在最后一行之后按了兩次“Enter”,否則將不起作用。

我試圖從一個多模塊 Kotlin應用程序構建一個 jar 並且得到了臭名昭著的“無主清單屬性”錯誤。 src/main/resources創建清單目錄也不起作用。

相反,它在src直接創建時起作用: src/META-INF/MANIFEST.MF

在此處輸入圖片說明

在此處輸入圖片說明

正如上面的人所說,但我必須注意一點。 您必須選中復選框:

包含在項目構建中

使用 Maven,您可以使用此插件:

 <build>
    <plugins>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>[path you class main]</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase> 
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

想法 8.1.3

Jar 沒問題,因為在 'output' 目錄(project/out/production//)中有編譯輸出

我想,你必須在構建 jar 之前運行“make”

對於依賴項,只需檢查“顯示庫”並選擇您想要的。

這是IntelliJ IDEA 2018.3 Help的官方回答。 我試過了,它奏效了。

從模塊構建 JAR 文件;

  1. 在主菜單上,選擇構建 | 構建工件。

  2. 從下拉列表中,選擇所需的 JAR 類型的工件。 該列表顯示了為當前項目配置的所有工件。 要構建所有已配置的工件,請選擇 Build all artifacts 選項。

我的問題是:我使用了 Intellij IDEA(嘗試了不同版本)+ Gradle。 當我編譯項目並構建 artifacf jar 時,如上述回復所示,我收到一個錯誤 - “沒有主清單屬性......”

這個解決方案對我有用(特別感謝 Thilina Ashen Gamage(見上文)的提示):

摘錄 - 如果您使用外部庫並通過Project Settings - Artifacts - Add (+) - Jar - From modules with dependencies構建項目,那么可能是因為程序錯誤,帶有 MANIFEST_MF 文件的 META-INF 文件夾不包含到 jar 中。 為避免它創建EMPTY jar 文件。

項目設置 - 工件 - 添加 (+) - Jar - EMPTY JAR META-INF 文件夾將添加到資源文件夾中。 然后選擇您的主要課程。 您將看到以下 jar 結構: 注意文件夾 META-INF 的存在 請注意文件夾 META-INF 的存在,然后您可以構建您的項目並構建工件。 此解決方案也適用於 javaFX 應用程序。

使用

mvn clean package spring-boot:repackage

在 IntelliJ 終端中輸入上述命令。 它生成一個帶有 Executable Jar 的 Target 文件。

您可能想看看 Maven ( http://maven.apache.org )。 您可以將其用作應用程序的主要構建過程,也可以僅用於通過“編輯配置”對話框執行某些任務。 在 Maven 中創建一個模塊的 JAR 的過程是相當簡單的,如果您希望它在一個自執行 JAR 中包含所有依賴項,這也是微不足道的。

如果您以前從未使用過 Maven,那么您想閱讀Better Builds With Maven

如果您在項目中使用第三方庫,或者在正確創建 MANIFEST.MF 文件時遇到問題,則在運行使用生成的 JAR 文件時可能會發生沖突

File > Project Structure > Artifacts > '+' > JAR > From modules with dependencies > .....

上面提到的方法。

相反,我建議您創建一個空的 JAR 並手動將所有其他元素添加到輸出根目錄。 可以在此處找到有關此方法的精彩博客文章: http : //karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/我嘗試了那里提到的步驟,一切正常為了我!

其他一些答案是無用的,因為一旦您從 Maven 項目重新導入 IntelliJ IDEA 項目,所有更改都將丟失。

jar 的構建需要由運行/調試配置觸發,而不是由項目設置觸發。

Jetbrains 對如何在此處完成此操作進行了很好的描述:

https://www.jetbrains.com/help/idea/maven.html

向下滾動到名為“為 Maven 目標配置觸發器”的部分。

(他們描述的唯一缺點是他們的屏幕截圖采用默認的黑白配色方案,而不是超級棒的 darcula 主題。呃!)

所以,基本上,你要做的是打開“Maven Projects”面板,找到感興趣的項目(在你的例子中,是構建你的jar的項目),在它下面找到你想要執行的maven目標,(通常“包”目標會創建 jars,)你打開它的上下文菜單,(右鍵單擊 Windows 機器,)然后會有一個“在運行/調試之前執行...”選項,你可以選擇它會帶你從那里開始。 真的很容易。

如果您嘗試使用 kotlin 構建 jar,您需要創建一個src/main/java文件夾並將此文件夾用作 META-INF 文件夾的位置。

如果您正在閱讀此答案是因為您面臨“找不到資源文件”錯誤,請嘗試以下操作:

  1. File -> Project Structure -> Artiface -> New,類型為Other
  2. 給它取一個好聽的名字,然后在Output Layout ,按Create Archive創建一個新的 jar,然后再給它取一個好聽的名字 ;)
  3. 單擊剛剛添加的 jar,在 jar 中添加您編譯的模塊輸出
  4. 再次單擊 jar,在下方窗格中,選擇您的項目路徑並添加Manifest File然后設置正確的Main ClassClass Path
  5. 單擊Add Library Files ,然后選擇您需要的庫(您可以使用Ctrl + A全選)。
  6. Build -> Build Artifact -> Clean & Build 看看錯誤是否消失了。

使用 Gradle 構建您的項目,然后 jar 位於構建文件中。 這是關於如何使用 Gradle 構建 .jar 文件的 Stack Overflow 鏈接。

使用 Gradle 的 Java 項目並在 Intellij IDEA 中構建 jar 文件 - 如何?

我嘗試了大多數給定的答案,但在我的情況下,“out”文件夾(包含 jar 文件)沒有被創建。 所以這完成了工作:

構建 -> 構建工件 -> (您將看到 class 名稱)-> 構建

現在,“out”文件夾已創建,jar 文件在其中。

如果您正在處理 spring/mvn 項目,則可以使用以下命令:

mvn package -DskipTests

jar 文件將保存在目標目錄中。

Ant和Maven被廣泛使用。 我更喜歡 Ant,我覺得它更輕量級,而且你的開發人員更有控制權。 有人會認為這是它的缺點:-)

暫無
暫無

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

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