我正在尝试从多项目 Maven 项目中创建一个可执行的 jar。这是我的项目结构,然后是我尝试使用 maven 程序集插件进行的操作。会感谢很多人可以向我暗示解决方案(在我看来,这似乎是最常见的基础,但我在其他讨论链中找不到)。谢谢!
我的结构是(简化的):
我的应用程序
…
<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(不想在我接近里程碑之前升级和动摇……)。