我想創建一個多項目maven項目的單個可執行jar。這是我的項目結構,接下來是我試圖用maven assembly插件做的事情。將會很感激任何人都可以暗示我的解決方案(這在我看來最爲普遍,但在其他討論鏈中找不到)。謝謝!多項目maven項目的單個可執行jar
我是(簡體)的結構:
對myApp
…
<groupId>myApp</groupId> <artifactId>myApp</artifactId>
<version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging>
<name>myApp</name> <url>http://maven.apache.org</url>
…
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source> <target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<modules>
<module>../m1</module> <!-- jar-->
<module>../m2</module> <!-- war -->
<module>../subAppPomAggregationProject</module>
</modules>
<dependencies>
…
</dependencies>
</project>
我想下面的插件添加到MyApp POM文件:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.mypath.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>
當然事實並非如此爲MyApp創建一個jar,但它確實在每個模塊(!)中創建了一個似乎是聚集的jar的東西,儘管不是所有的依賴關係都是如此。
我也嘗試創建另一個具有模塊或MyApp依賴項的超級項目(jar) - 也沒有工作。我是否應該在uber-jar中列出導入到MyApp的所有模塊(以及導入到subAppPomAggregationProject中的模塊)?沒有嘗試過,但如果是這樣的話 - pom聚合器的目的是什麼,爲什麼使用兩階段編譯/彙總方法?
我無法嘗試maven-shade-plugin(不知道它是否有幫助),因爲它需要maven 3,我目前正在使用2.2.1(在我的近乎里程碑之前不想升級和晃動東西...)。
添加我這個插件在MyApp的pom.xml文件(POM包裝),或做我創建另一個項目(比如說myappjar),我在其中放置插件?如果是後者,我只需將MyApp的依賴項放入myappjar pom.xml中? – Gera
每個模塊一個工件。所以,不要劫持您的聚合器(也家長必須在孩子面前內置所以不能有這樣即使你想) –
當我加入陰影插件MyApp的pom.xml中,我得到了以下錯誤:[INFO ]用陰影工件替換原始工件。 [INFO]用/home/.../MyApp/target/myapp-0.0.1-SNAPSHOT-shaded.pom取代null [錯誤]構建錯誤 [INFO]創建着色jar時出錯:null。很明顯,解決方案不起作用。將嘗試第二個選項。 – Gera