1

I have a Maven project with both server back-end modules and client front-end modules. The goal is to take advantage of performance improvements in JDK 7 for the server back-end modules but build the client modules in JDK 6 only. The client modules run in Tomcat while the server modules are separate Java applications.

I am aware of the Maven configuration to target specific JDK:

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

One caveat to this approach is that there are common modules that are used by both the server modules and client modules necessitating two different binaries (JDK 6 and 7) for each module.

How can one compile one set of artifacts for a JDK 6, and another set of artifacts for JDK 7, and a third set of artifacts (used by both) for both JDK 6 and 7 all belonging to the same project? Would it be necessary to divide the modules up into three separate projects?

4

2 回答 2

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 profile

于 2013-03-16T07:27:37.047 回答
0

如果您 <target> 1.6,生成的 Jar 将在 1.6 和 1.7 中完美运行。无需编译两次。

使用 1.7 编译器或针对 1.7 字节代码没有性能优势(可能在一些非常模糊的情况下除外)。所有的性能都存在于 JVM 中。只需将您的通用代码设为目标 1.6。除非您自己可以衡量编译 1.7 的速度优势,否则不要打扰。

于 2013-03-16T01:32:34.423 回答