[英]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>
此過程將在“目標”文件夾下創建 jar 文件
我最近遇到了這個問題,我認為如果任何先前的解決方案或鏈接缺少細節,這些步驟很容易遵循。
如何使用 IntelliJ IDEA 14.1.5 創建.jar
:
以下是 Maven 項目的 2 個示例,一步一步:
在 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,
MANIFEST.MF 需要在您的資源文件夾中,Main.Class 需要引用 {package}-{class-name-that-contains-main-class}
當我使用這些解決方案時,會出現此錯誤:
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”,否則將不起作用。
使用 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 文件;
在主菜單上,選擇構建 | 構建工件。
從下拉列表中,選擇所需的 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 的存在,然后您可以構建您的項目並構建工件。 此解決方案也適用於 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 文件夾的位置。
如果您正在閱讀此答案是因為您面臨“找不到資源文件”錯誤,請嘗試以下操作:
Output Layout
,按Create Archive
創建一個新的 jar,然后再給它取一個好聽的名字 ;)Manifest File
然后設置正確的Main Class
和Class Path
。Add Library Files
,然后選擇您需要的庫(您可以使用Ctrl + A全選)。使用 Gradle 構建您的項目,然后 jar 位於構建文件中。 這是關於如何使用 Gradle 構建 .jar 文件的 Stack Overflow 鏈接。
我嘗試了大多數給定的答案,但在我的情況下,“out”文件夾(包含 jar 文件)沒有被創建。 所以這完成了工作:
構建 -> 構建工件 -> (您將看到 class 名稱)-> 構建
現在,“out”文件夾已創建,jar 文件在其中。
如果您正在處理 spring/mvn 項目,則可以使用以下命令:
mvn package -DskipTests
jar 文件將保存在目標目錄中。
Ant和Maven被廣泛使用。 我更喜歡 Ant,我覺得它更輕量級,而且你的開發人員更有控制權。 有人會認為這是它的缺點:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.