如何在maven构建期间创建包含所有模块内容的其他jar文件?

时间:2015-12-30 17:22:17

标签: maven jar maven-3

我有一个多模块maven项目(比如project-xxx)。可以说它由5个模块组成:

project-xxx (war)
--> module-1 (jar)
--> module-2 (jar)
--> module-3 (jar)
--> module-4 (jar)
--> module-5 (jar)

构建maven项目时,会生成war文件,并且它还包含5个模块的jar文件。

现在,出于不同的目的(即部署到分布式缓存,所以我们可以从命令行运行查询),我想生成一个单独的“jar”文件,其中包含来自所有模块的java类。我知道生成多个工件是违反maven的理念而我在SO上读到这个blog postfew other questions

但是创建这个单个jar文件会大大简化我项目中的其他一些事情。生成这个jar文件的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

我认为您应该考虑引入第一个单独的配置文件,以便profile1包含配置以产生适当的war包装。 Profile2可以包含使用maven-shade-plugin的配置,以便从现有模块中创建UBER jar。剖析是一种非常干净且专注于分解不同问题的方法。

对于maven个人资料,请参阅here。对于maven-shade-plugin,请参阅here

希望有所帮助。

答案 1 :(得分:1)

非常非常支持每个Maven项目约定的一个工件。话虽如此,如果您需要包含所有模块的所有类的单个工件,那么请创建一个专用的单个项目来执行此操作:

$res.='<tr><td>'.$string.'</td><td><input  type="checkbox" id="'.$id.'" onchange="addClasse(\''.$id.'\')"></td></tr>';

此示例项目依赖于每个模块,然后使用<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>your-group-id</groupId> <artifactId>one-jar-to-rule-them-all</artifactId> <version>your-version</version> <dependencies> <dependency> <groupId>your-group-id</groupId> <artifactId>module-1</artifactId> <version>your-version</version> </dependency> . . . <dependency> <groupId>your-group-id</groupId> <artifactId>module-5</artifactId> <version>your-version</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.2</version> <configuration> <!-- This restricts the jar to classes from your group; you may or may not want to do this. --> <artifactSet> <includes> <include>your-group-id</include> </includes> </artifactSet> <createDependencyReducedPom>true</createDependencyReducedPom> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project> 将所有这些模块组合到一个jar工件中。您还可以将其设为父maven-shade-plugin的子模块,以便它由反应堆构建。这样,你可以同时拥有war和uber jar,但仍然保持标准Maven构建的模块性。