我的maven项目有几个模块:服务器,网络等.
我想在Java 6上构建除了我的服务器模块之外的所有模块.对于服务器模块,我想用Java 7编译它.
这是我下面的pom.xml,但我想如果我将它修改为1.7,那么我的所有模块都将用Java 7编译.另外,maven是否使用JAVA_HOME环境变量来确定要使用哪个Java版本?
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
                        <version>2.3.2</version>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <memmax>2048m</memmax>
        </configuration>
    </plugin>
编辑另外,下面的输出是
maven --version
表明maven正在用1.7编译我的java代码?
vagrant@dev:~/bin/apache-tomcat-7.0.29/bin$ mvn --version
Apache Maven 3.0.4 (r1232337; 2012-01-17 08:44:56+0000)
Maven home: /home/vagrant/bin/apache-maven-3.0.4
Java version: 1.7.0_07, vendor: Oracle Corporation
Java home: /home/vagrant/bin/jdk1.7.0_07/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.2.0-23-generic", arch: "amd64", family: "unix"
谢谢,凯文
Ste*_*lly 34
有许多黑客可以使用不同版本的JDK编译源代码,而不是运行Maven,例如你可以使用类似的东西
<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
          <executable><!-- path-to-javac --></executable>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...] 
</project>
这种方法的问题是你现在已经将JDK的路径硬编码到你的POM中.一切都可以在您的机器上正常工作,但是当您因为硬盘故障而无法重建机器时,或者当您想要在不同的机器上构建时,您将被卡住,因为路径很可能无法匹配.
处理此问题的正确最佳实践方法是通过工具链.这将看到您创建一个~/.m2/toolchains.xml文件,该文件描述了系统中每个不同工具链的位置.然后,Maven Toolchains插件可以应用JDK的版本,例如
<plugins>
 ...
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-toolchains-plugin</artifactId>
    <version>1.0</version>
    <executions> 
      <execution>
        <phase>validate</phase>
        <goals>
          <goal>toolchain</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <toolchains>
        <jdk>
          <version>1.6</version>
        </jdk>
      </toolchains>
    </configuration>
  </plugin>
  ...
</plugins>
接下来就是你不需要像你想象的那样频繁.例如,通过使用source和target值,您可以为您要定位的JRE生成正确的字节码...您将遇到的唯一问题是使用JRE 1.7中的新方法...这就是Mojo的动物Sniffer Plugin自带.动物嗅探器可用于确保您只使用您所针对的JRE方法.一般社区的共识是,Maven编译器插件配置中的使用source和target配置选项以及Mojo动物嗅探器的使用几乎消除了对编译器端事物的工具链的需求....在Surefire结束时仍然需要工具链......我有一些边缘情况需要更新编译器插件和工具链插件来处理,但实际上你不会遇到那些边缘情况;-)
只是为了确保您的原始问题得到完全回答(因为上面的答案是您想要提出的问题 - 而不是您提出的问题)
目前您正在使用JDK 1.7进行编译,但是根据您使用的Maven编译器插件的版本,您可能正在编译,<source>1.4</source><target>1.4</target>或者<source>1.5</source><target>1.5</target>除非您更改了Maven编译器插件的配置pom.xml.这将决定哪些语言功能可供您使用,而不是哪些类...因此您将生成可用于JRE 1.7的代码,并且如果您没有使用自1.4/1.5以来引入的任何新类/方法(例如String.isEmpty())也应该在JRE 1.4/1.5上运行...确定它是否适用于这样一个旧JVM的唯一方法是:在旧JVM上运行它或使用Animal Sniffer.
FlexyPool使用JDK 1.6构建,而一个模块必须针对1.7进行编译(由于DBCP2依赖性).
我写了一篇关于这个主题的文章,所以基本上我是这样写的:
您开始定义JDK env变量:
JAVA_HOME_6     C:\Program Files\Java\jdk1.6.0_38
JAVA_HOME_7     C:\Program Files\Java\jdk1.7.0_25
JAVA_HOME       %JAVA_HOME_6%
父pom.xml定义:
<properties>
   <jdk.version>6</jdk.version>
   <jdk>${env.JAVA_HOME_6}</jdk>
</properties>
主pom.xml定义了以下构建插件:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>${jdk.version}</source>
                <target>${jdk.version}</target>
                <showDeprecation>true</showDeprecation>
                <showWarnings>true</showWarnings>
                <executable>${jdk}/bin/javac</executable>
                <fork>true</fork>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <jvm>${jdk}/bin/java</jvm>
                <forkMode>once</forkMode>
            </configuration>
        </plugin>
    </plugins>
</build>
需要JDK 1.7的模块必须覆盖以下属性:
<properties>
    <jdk.version>7</jdk.version>
    <jdk>${env.JAVA_HOME_7}</jdk>
</properties>
就是这样,我们现在可以使用自己特定的最低java版本要求构建每个模块.
| 归档时间: | 
 | 
| 查看次数: | 20796 次 | 
| 最近记录: |