configurationMaven为不同的J2SE版本使用不同的JDK?
我想configurationMaven2使用sun-java6-jdk构buildJava SE 1.6模块,并使用openjdk-7构buildJava SE 1.7模块。 可能吗?
然后,Maven2应该自动select正确的JDK,以一个命令构build不同的模块。
例如,它应该是
$ mvn package
代替
$ cd module1 $ update-alternatives ... jdk6 ... $ mvn package ... $ cd module2 $ update-alternatives ... jdk7 ... $ mvn package
PS没有关于pom.xml文件,它已经为不同的模块设置了不同的<source>
, <target>
值的maven-compiler-plugin
。 如果我select使用openjdk-7,Maven2将生成1.6版本的类文件,但使用openjdk-7而不是sun-java6-jdk。 问题是关于如何configurationJava SEconfiguration文件。
我们通过在编译插件的configuration中明确指定javac来解决这个问题(将JAVA_HOME_6和JAVA_HOME_7定义为环境variables):
和Java 6模块
<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>
和Java 7模块
<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>
您可以告诉maven-compiler-plugin 使用不同的JDK编译源文件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <executable><!-- path-to-javac --></executable> </configuration> </plugin>
从@ lweller的答案的无数upvotes我猜它是奇怪的,但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>
maven-compiler-plugin 2.5.1版本。