假设我们的项目中有以下包
org.xxx.dao,org.xxx.service,org.xxx.service.impl
所有包都在源文件夹src / main / java
中我可以将软件包汇编到分离的jar中,(xxx-dao.jar,xxx-service.jar,xxx-service-impl.jar)?
答案 0 :(得分:5)
您可以使用标准maven-jar-plugin
:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>dao</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<archive>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
<classifier>dao</classifier>
<includes>
<include>org/xxx/dao/**/*</include>
</includes>
</configuration>
</execution>
<execution>
<id>service</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<archive>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
<classifier>service</classifier>
<includes>
<include>org/xxx/service/**/*</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
这为您提供了一个包含所有内容的JAR,然后是几个只包含您可以在Maven POM中使用分类器选择的内容的JAR。
如果要省略默认JAR(包含所有内容),则将<id>
替换为<id>default-jar</id>
并添加<excludes>
元素,因为默认JAR包含所有内容,因此您必须摆脱任何你不想要的东西。
答案 1 :(得分:1)
maven-assembly插件不适用于此类任务,请参阅its features。如果您有源代码,那么我建议将它们复制到项目的模块中。
但是如果你想用maven-assembly插件做,那么我认为你可以通过创建单独的descriptor components并定义要包含在哪个程序集中的文件来实现。您可以定义要包含在sources定义下的includes
标记中的源文件。