我正在尝试从多项目maven项目中创建一个可执行jar。这是我的项目结构,后面是我尝试使用maven程序集插件。非常感谢很多人可以向我暗示解决方案(这在我看来是最常见的,但我在其他讨论链中找不到)。谢谢!
我所拥有的结构(简化):
对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(不想在我的近里程碑之前升级和摇动事物...... )。
答案 0 :(得分:0)
如果使用阴影插件,您可以使用旧版本。 版本1.7.1是适用于Maven 2.x的最后一个版本的阴影,它将用于创建可执行jar文件...语法应该几乎相同,主版本号的切换是为了指示切换以Maven 3为要求。
答案 1 :(得分:0)
在此类环境中有效的解决方案方法是分层聚合。因此,首先为subAppPomAggregationProject创建一个jar 创建说subAppPomAggregationProject.aggregate maven项目,并在其pom中指定所有subAppPomAggregationProject模块作为依赖项, 并添加maven-assembly插件:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/assembly/bin.xml</descriptor>
</descriptors>
<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>]
然后在应用程序级别执行相同操作 - 创建的subAppPomAggregationProject聚合jar是其中一个模块!
因为在每个级别上解析了依赖关系之间的冲突,所以在下一级向上聚合中没有任何依赖关系会产生冲突 (因为他们已经在他们的单个罐子中看起来相对......或者沿着这些线条出现的东西: - ))。