如何根据 $JAVA_HOME 环境变量自动设置 Maven 编译器插件?

How to automatically set Maven compiler plugin based on $JAVA_HOME env variable?

我正在使用 Maven 3.2.3。我有一个多模块项目,目前我的 Maven 编译器插件设置如此

                    <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <version>3.1</version>
                            <configuration>
                                    <source>1.6</source>
                                    <target>1.6</target>
                                    <compilerArgument>-proc:none</compilerArgument>
                                    <fork>true</fork>
                                    <!-- <debug>true</debug> <debuglevel>none</debuglevel> -->
                            </configuration>
                            <executions>
                                    <execution>
                                            <id>default-testCompile</id>
                                            <phase>test-compile</phase>
                                            <goals>
                                                    <goal>testCompile</goal>
                                            </goals>
                                    </execution>
                            </executions>
                    </plugin>

我想知道的是如何根据系统中的 $JAVA_HOME 变量设置编译器版本,也就是说,如果 $JAVA_HOME 指向 Java 6 安装,我的 Maven 编译器将使用“1.6”作为其源和目标。同样,如果我的 $JAVA_HOME 指向 Java 7 安装,源和目标将是“1.7”等等。如果环境中没有设置$JAVA_HOME,我希望编译器默认为1.6.

感谢您提供有关如何设置的建议和示例。

Guide to building for different environments using Profiles

为不同的环境构建相同的工件一直是一件令人烦恼的事情。您有多个环境,例如测试和生产服务器,或者可能是 运行 具有不同配置的相同应用程序的一组服务器。在本指南中,我将解释如何使用配置文件来构建和打包为特定环境配置的工件。有关配置文件概念的更深入解释,请参阅 Introduction to Build Profiles

正如 Jarrod 指出的那样,解决方案是使用 profiles。使用 Maven 文档提供的示例。

Profiles can be automatically triggered based on the detected state of the build environment. These triggers are specified via an section in the profile itself. Currently, this detection is limited to prefix-matching of the JDK version, the presence of a system property or the value of a system property. Here are some examples.

The following configuration will trigger the profile when the JDK's version starts with "1.4" (eg. "1.4.0_08", "1.4.2_07", "1.4"):

请参阅下面与您的示例和 Maven 文档示例合并的示例。

<profiles>
    <profile>
    <activation>
      <jdk>1.6</jdk>
    </activation>
    <build>
        <plugins>
            <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                            <source>1.6</source>
                            <target>1.6</target>
                            <compilerArgument>-proc:none</compilerArgument>
                            <fork>true</fork>
                            <!-- <debug>true</debug> <debuglevel>none</debuglevel> -->
                    </configuration>
                    <executions>
                            <execution>
                                    <id>default-testCompile</id>
                                    <phase>test-compile</phase>
                                    <goals>
                                            <goal>testCompile</goal>
                                    </goals>
                            </execution>
                    </executions>
            </plugin>
        </plugins>
    </build>
    </profile>
</profiles>