2016-09-01 48 views
5

我使用Intellij Java 2016.2.2和Maven來創建一個非常簡單的Java控制檯應用程序。Intellij Java 2016&Maven:如何在JAR中嵌入依賴關係?

我想添加一個外部庫,所以我加我依賴於Maven的是這樣的:

<dependency> 
    <groupId>jline</groupId> 
    <artifactId>jline</artifactId> 
    <version>2.12</version> 
</dependency> 

,當我在IDE中運行它,它工作正常,但不是在外部控制檯(我有以下錯誤:java.lang.NoClassDefFoundError)。

我檢查了一下,出於某種原因,外部JAR沒有添加到我剛剛生成的JAR中。我也在「文件 - >項目結構」中嘗試過很多東西,但仍然無法正常工作...

我只是想用我的依賴關係構建我的JAR,因此我可以簡單地在控制檯中使用以下命令運行我的應用程序:

java -jar myproject.jar 

我該怎麼做?謝謝你的幫助!

+2

使用maven-assembly-plugin使用jar -with-dependencies描述符.... – khmarbaise

+0

感謝您的幫助,但仍然無法正常工作。所以我想知道:我使用「Build - > Build artifacts ...」構建我的JAR。這是正確的做法嗎? – thenaoh

回答

12

我終於設法生成這個JAR用的IntelliJ Java的,這裏是我該怎麼辦:

  • 在pom.xml文件中添加依賴關係
  • 轉到文件 - >項目結構 - >工件 - >新建 - > JAR - >從模塊與依賴關係資本投資者入境計劃
  • 選擇主類,然後單擊OK
  • 在你的項目中的src /主,創造了「資源」文件夾
  • 招「META-INF」(與MANIFEST.MF它)文件夾中的這個「資源」 文件夾
  • 選擇Build - >打造神器打造JAR

編輯

一個更好的(和更簡單的方法)來做到這一點是增加在POM以下行。 xml文件:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>your.MainClass</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> 

然後使用「clean」和「package」maven命令。

上面的最後3步(關於MANIFEST.MF)似乎仍然是強制性的。

4

好的,所以你基本上想創建一個包含所有依賴關係(通常是依賴關係都是外部的)的「fat jar」(有時稱爲assembly)。

您需要爲此使用Maven插件。下面是一個示例組件插件配置jar-with-dependencies

<project> 
    ... 
    <build> 
    ... 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
     </configuration> 
     ... 
</project> 

然後,只需運行

mvn package 
+0

謝謝,這似乎很有趣!但是現在,另一個簡單的問題是:「沒有主清單屬性」。它似乎無法找到我的MANIFEST.MF文件...任何想法? – thenaoh

+1

http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven – YMomb

+0

謝謝!我會看看那個! – thenaoh