我有一个场景,其中我的项目需要在不同的JDK中编译,并且根据所使用的JDK,生成的工件名称应该是不同的.例如,如果项目名称是MyProject并且我调用mvn install,那么它需要在JDK 1.4以及JDK 1.5中编译,最后我得到两个相同项目的jar(MyProjectJDK14-1.0和MyProjectJDK15-1.0).有可能实现这个目标吗?
Pas*_*ent 35
Maven的方法不是改变finalName工件,而是使用分类器.例如:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classifier>${envClassifier}</classifier>
</configuration>
</plugin>
</plugins>
</build>
...
<profiles>
<profile>
<id>jdk16</id>
<activation>
<jdk>1.6</jdk>
</activation>
<properties>
<envClassifier>jdk16</envClassifier>
</properties>
</profile>
<profile>
<id>jdk15</id>
<activation>
<jdk>1.5</jdk>
</activation>
<properties>
<envClassifier>jdk15</envClassifier>
</properties>
</profile>
</profiles>
</project>
Run Code Online (Sandbox Code Playgroud)
将${finalName}-${envClassifier}.jar使用以下语法命名JAR工件并将其作为依赖项包含在内:
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
<classifier>jdk16</classifier>
</dependency>
Run Code Online (Sandbox Code Playgroud)
你必须两次调用Maven构建来生成两个罐子(一个体面的CI引擎可以做到这一点).
您可以做的是定义两个配置文件,每个JDK使用一个配置文件.将激活关于使用哪个JDK的每个配置文件:
<profiles>
<profile>
<id>profile-for-jdk1.4</id>
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.4</jdk>
</activation>
<build>
<finalName>myBuild-jdk1.4</finalName>
</build>
</profile>
<profile>
<id>profile-for-jdk1.5</id>
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.5</jdk>
</activation>
<build>
<finalName>myBuild-jdk1.5</finalName>
</build>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
然后,在每个配置文件中,您定义一个特定的<finalName>,用于命名生成的JAR文件.
因此,如果使用JDK 1.4构建应用程序,则会生成生成的JAR myBuild-jdk1.4.jar.
如果您的最终包是使用程序集构建的,则只需更改<build>配置文件内部的块以配置程序集插件(例如<finalName>).
关于你的评论:事实上,这个过程需要在Maven上有两个独立的构建,因为你必须在更改JDK版本时重新编译整个项目.Maven2约定之一是一个项目=一个工件.你想要的是有一个带有两个工件的项目.
最终,一个解决方案是使用Hudson构建您的应用程序,尤其是此工具的矩阵功能,它允许您使用各种参数运行多个构建,在您的情况下是JDK.
| 归档时间: |
|
| 查看次数: |
20005 次 |
| 最近记录: |