如果其中一个子模块有分类器,你如何发布maven多模块项目?
鉴于此用例:
所以我们的目标是在最后的存储库中有以下内容(在两次发布之后:prepare,release:perform):
- EAR -1- AA.ear
- EAR -1- BB.ear
- WAR -1- AA.war
- WAR -1- BB.war
- 接口-1.jar
- 延伸-1- AA.jar
- 延伸-1- BB.jar
- 效用1.jar
关于如何进行发布构建有很多解释,并且还有如何使用分类器的示例 - 但分类器似乎永远不会在多模块设置中使用。
注意:第一个版本通常不会成为问题,因为尚未部署新版本的工件。但是为第二个分类器做一个释放将会制造整个事情,因为maven将尝试使用相同的版本再次构建和部署jar,并且存储库将(希望)不允许它。这不是WAR和EAR的问题,因为考虑分类器来唯一地标识工件
或者分类器真的只适用于单个模块项目吗?
答案 0 :(得分:2)
这对Maven来说非常棘手。 你可以尝试在maven生命周期的包阶段中多次执行maven- [jar / war / ear] -plugins。在每次执行中,您都可以设置不同的分类器。
此外,在执行maven-war-plugin时,您可以使用<overlay>
将具有正确分类器的扩展名放入WAR文件中。在执行maven-ear-plugin时,您可以使用正确的分类器将WAR文件指定为<webModule>
。
示例强>
在扩展模块中,您可以像这样配置maven-jar-plugin:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>extension-AA</id>
<phase>package</phase>
<goals>jar</goals>
<configuration>
<classifier>AA</classifier>
</configuration>
</execution>
<execution>
<id>extension-BB</id>
<phase>package</phase>
<goals>jar</goals>
<configuration>
<classifier>BB</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
...
</build>
WAR模块的配置非常相似:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<id>extension-AA</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
<configuration>
<overlays>
<overlay>
<groupId>com.example</groupId>
<artifactId>extension-1</artifactId>
<classifier>AA</classifier>
</overlay>
</overlays>
</configuration>
</execution>
<execution>
<id>extension-BB</id>
<phase>package</phase>
<goals>
<goal>war</goal>
</goals>
<configuration>
<overlays>
<overlay>
<groupId>com.example</groupId>
<artifactId>extension-1</artifactId>
<classifier>BB</classifier>
</overlay>
</overlays>
</configuration>
</execution>
</executions>
</plugin>
最后,EAR模块的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<executions>
<execution>
<id>extension-AA</id>
<phase>package</phase>
<goals>
<goal>ear</goal>
</goals>
<configuration>
<classifier>AA</classifier>
<modules>
<webModule>
<groupId>com.example</groupId>
<artifactId>war-1</artifactId>
<classifier>AA</classifier>
</webModule>
</modules>
</configuration>
</execution>
<execution>
<id>extension-BB</id>
<phase>package</phase>
<goals>
<goal>ear</goal>
</goals>
<configuration>
<classifier>BB</classifier>
<modules>
<webModule>
<groupId>com.example</groupId>
<artifactId>war-1</artifactId>
<classifier>BB</classifier>
</webModule>
</modules>
</configuration>
</execution>
</executions>
</plugin>