我有一个包含服务器后端模块和客户端前端模块的Maven项目。目标是利用JDK 7中的服务器后端模块的性能改进,但仅在JDK 6中构建客户端模块。客户端模块在Tomcat中运行,而服务器模块是单独的Java应用程序。
我知道针对特定JDK的Maven配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerVersion>1.6</compilerVersion>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
这种方法的一个警告是,服务器模块和客户端模块都使用通用模块,每个模块需要两个不同的二进制文件(JDK 6和7)。
如何为JDK 6编译一组工件,为JDK 7编译另一组工件,为JDK 6和7编译第三组工件(两者都使用)都属于同一个项目?是否有必要将模块分成三个独立的项目?
答案 0 :(得分:0)
如果您&lt; target&gt; 1.6,生成的Jar将在1.6和1.7中完美地工作。无需编译两次。
使用1.7编译器或目标1.7字节代码没有任何好处(除非在一些非常模糊的情况下)。所有的perfo都存在于JVM中。只需使您的公共代码成为目标1.6。除非你自己能够测量1.7的编译速度优势,否则不要打扰。
答案 1 :(得分:0)
bmargulies的答案是非常恰当的。
无论如何,如果你真的想构建一些模块的不同版本(1.6和1.7),我建议你使用2个配置文件,profile1定位jdk6,profile2定位jdk7。因此,两个配置文件都将重新定义maven-compiler-plugin。
两个配置文件还可以使用不同的分类器重新定义maven-jar-plugin,以便每个模块可以使用2个版本(并在依赖项中使用分类器,以便客户端使用jdk6和服务器使用jdk7)。
以下是另一个问题,详细说明了如何执行此操作:How to manage artifactory / maven artifact using different profiles