混合JDK 1.7 Server 1.6客户端Maven构建工件

时间:2013-03-16 01:30:17

标签: maven java-7

我有一个包含服务器后端模块和客户端前端模块的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编译第三组工件(两者都使用)都属于同一个项目?是否有必要将模块分成三个独立的项目?

2 个答案:

答案 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