Maven 2 配置Maven为不同的J2SE版本使用不同的JDK?

Maven 2 配置Maven为不同的J2SE版本使用不同的JDK?,maven-2,Maven 2,我想将Maven2配置为使用sun-java6-jdk构建JavaSE1.6模块,并使用openjdk-7构建JavaSE1.7模块。可能吗 Maven2应该自动选择正确的JDK,在一个命令中构建不同的模块 例如,它应该是 $ mvn package 而不是 $ cd module1 $ update-alternatives ... jdk6 ... $ mvn package ... $ cd module2 $ update-alternatives ... jdk7 ... $ mvn

我想将Maven2配置为使用sun-java6-jdk构建JavaSE1.6模块,并使用openjdk-7构建JavaSE1.7模块。可能吗

Maven2应该自动选择正确的JDK,在一个命令中构建不同的模块

例如,它应该是

$ mvn package
而不是

$ cd module1
$ update-alternatives ... jdk6 ...
$ mvn package
...
$ cd module2
$ update-alternatives ... jdk7 ...
$ mvn package

另外,这与pom.xml文件无关,这些文件已经用不同的
值为不同的模块设置了
maven编译器插件。如果我选择使用openjdk-7,Maven2将生成1.6版的类文件,但使用openjdk-7而不是sun-java6-jdk。问题是如何配置Java SE配置文件。

我们通过明确地分别指定编译插件的配置中的Java C(将Java_HOME_6和Java_HOME_7定义为环境变量)来解决这个问题:

对于Java6模块

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <showDeprecation>true</showDeprecation>
        <showWarnings>true</showWarnings>
        <executable>${env.JAVA_HOME_6}/bin/javac</executable>
        <fork>true</fork>
    </configuration>
</plugin>

org.apache.maven.plugins
maven编译器插件
1.6
1.6
真的
真的
${env.JAVA\u HOME\u 6}/bin/javac
真的
对于Java7模块

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <showDeprecation>true</showDeprecation>
        <showWarnings>true</showWarnings>
        <executable>${env.JAVA_HOME_7}/bin/javac</executable>
        <fork>true</fork>
    </configuration>
</plugin>

org.apache.maven.plugins
maven编译器插件
1.7
1.7
真的
真的
${env.JAVA\u HOME\u 7}/bin/javac
真的

您可以告诉maven编译器插件


org.apache.maven.plugins
maven编译器插件
2.3.2

从@lweller的答案的众多投票结果来看,我想这是很奇怪的,但是对于
1.7
作为
source
target
的maven仍然试图使用java
1.5
进行编译。而仅使用
7
。。。像这样:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>7</source> <!-- see here, says only 7, not 1.7 -->
        <target>7</target> <!-- here as well -->
        <showDeprecation>true</showDeprecation>
        <showWarnings>true</showWarnings>
        <executable>${env.JAVA_HOME_7}/bin/javac</executable>
        <fork>true</fork>
    </configuration>
</plugin>

org.apache.maven.plugins
maven编译器插件
7.
7.
真的
真的
${env.JAVA\u HOME\u 7}/bin/javac
真的

maven编译器插件版本2.5.1。

FYI:没有像J2SE 1.6这样的东西。从1.6开始,它被称为JavaSE(就像J2EE现在是JavaEE一样)。谢谢,你回答得太快了,我只想进一步澄清我的问题,但你已经给出了答案。:)注意:对我来说,如果设置了JAVA_HOME,那么不管发生什么,它都会使用它,并且该部分不适用。我不得不删除它,并实际使用JAVA_HOME_6和JAVA_HOME_7来工作如果我的源代码和目标代码为1.6,而我的JAVA_HOME指向1.7会发生什么?Colin,我想你的问题是你会漏掉一行true,原因是maven正在使用你的JAVA_HOME env变量运行&如果没有这个变量,编译器将继续使用JAVA_HOME版本,显然忽略了你的覆盖选项。我在两年前回答了这个问题,因为我的答案今天仍然是上乘的,现在,它对一些人仍然有用。谢谢。但老实说,我们现在使用maven更强大的特性来解决这个问题:maven工具链。这个答案很好地解释了这一点:7是1.7的同义词。查看
-source
-target
参数
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>7</source> <!-- see here, says only 7, not 1.7 -->
        <target>7</target> <!-- here as well -->
        <showDeprecation>true</showDeprecation>
        <showWarnings>true</showWarnings>
        <executable>${env.JAVA_HOME_7}/bin/javac</executable>
        <fork>true</fork>
    </configuration>
</plugin>