Java 在pom.xml中切换元素的最佳方法

Java 在pom.xml中切换元素的最佳方法,java,maven,Java,Maven,我想按JRE版本切换pom.xml中的元素。现在,如果我使用JRE 7构建,我总是按如下方式切换注释: <dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <!-- If using JRE 7 --> <!--<version>10.12.1.1</versio

我想按JRE版本切换
pom.xml
中的元素。现在,如果我使用JRE 7构建,我总是按如下方式切换注释:

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <!-- If using JRE 7 -->
    <!--<version>10.12.1.1</version>-->
    <!-- If using JRE 8, no need to set version -->
</dependency>

...

<jvmArguments>
    <!-- If using JRE 7 -->
    <!-- -XX:MaxPermSize=64m -Xloggc:logs/gc.log -->
    <!-- If using JRE 8 -->
    -XX:MaxMetaspaceSize=64m -Xloggc:logs/gc_%p_%t.log
</jvmArguments>

org.apache.derby
德比
...
-XX:MaxMetaspaceSize=64m-Xloggc:logs/gc_%p_%t.log

通过JRE版本切换元素的最佳方法是什么?

一种方法是使用Maven概要文件(有关详细信息,请参阅)。这背后的想法是使用属性而不是具体的值,并在特定的JRE概要文件中使用不同的值初始化它们

要激活一个特定的概要文件,您需要在maven命令中附加-p(例如mvn-Pjre7包)

下面,您可以找到两个配置文件的可能示例定义

<project>

    ...

    <profiles>
        <!-- JRE 7 specific config elements -->
        <profile>
            <id>jre7</id>
            <properties>
                <jvm.args>-XX:MaxPermSize=64m -Xloggc:logs/gc.log</jvm.args>
                <derby.version>10.12.1.1</derby.version>
            </properties>
        </profile>
        <!-- JRE 8 specific config elements -->
        <profile>
            <id>jre8</id>
            <!-- activates jre8 by default -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <jvm.args>-XX:MaxMetaspaceSize=64m -Xloggc:logs/gc_%p_%t.log</jvm.args>
                <derby.version>USE_REQUIRED_JRE8_DERBY_VERSION</derby.version>
            </properties>
        </profile>
    </profiles>

    <dependencies>
        ...
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>${derby.version}</version>
        </dependency>
        ...
    </dependencies>

    ...

    <jvmArguments>
        ${jvm.args}
    </jvmArguments>
<project>

...
jre7
-XX:MaxPermSize=64m-Xloggc:logs/gc.log
10.12.1.1
jre8
真的
-XX:MaxMetaspaceSize=64m-Xloggc:logs/gc_%p_%t.log
使用所需的JRE8版本
...
org.apache.derby
德比
${derby.version}
...
...
${jvm.args}

一种方法是使用Maven配置文件(有关详细信息,请参阅)。这背后的想法是使用属性而不是具体的值,并在特定的JRE概要文件中使用不同的值初始化它们

要激活一个特定的概要文件,您需要在maven命令中附加-p(例如mvn-Pjre7包)

下面,您可以找到两个配置文件的可能示例定义

<project>

    ...

    <profiles>
        <!-- JRE 7 specific config elements -->
        <profile>
            <id>jre7</id>
            <properties>
                <jvm.args>-XX:MaxPermSize=64m -Xloggc:logs/gc.log</jvm.args>
                <derby.version>10.12.1.1</derby.version>
            </properties>
        </profile>
        <!-- JRE 8 specific config elements -->
        <profile>
            <id>jre8</id>
            <!-- activates jre8 by default -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <jvm.args>-XX:MaxMetaspaceSize=64m -Xloggc:logs/gc_%p_%t.log</jvm.args>
                <derby.version>USE_REQUIRED_JRE8_DERBY_VERSION</derby.version>
            </properties>
        </profile>
    </profiles>

    <dependencies>
        ...
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <version>${derby.version}</version>
        </dependency>
        ...
    </dependencies>

    ...

    <jvmArguments>
        ${jvm.args}
    </jvmArguments>
<project>

...
jre7
-XX:MaxPermSize=64m-Xloggc:logs/gc.log
10.12.1.1
jre8
真的
-XX:MaxMetaspaceSize=64m-Xloggc:logs/gc_%p_%t.log
使用所需的JRE8版本
...
org.apache.derby
德比
${derby.version}
...
...
${jvm.args}
我建议让这意味着定义如下配置文件:


-XX:MaxMetaspaceSize=64m-Xloggc:logs/gc_%p_%t.log
使用所需的JRE8版本
...
1.7
-XX:MaxPermSize=64m-Xloggc:logs/gc.log
10.12.1.1
我建议让这意味着定义如下配置文件:


-XX:MaxMetaspaceSize=64m-Xloggc:logs/gc_%p_%t.log
使用所需的JRE8版本
...
1.7
-XX:MaxPermSize=64m-Xloggc:logs/gc.log
10.12.1.1

谢谢。我会试试的。我认为这是最好的办法!非常感谢。我会试试的。我认为这是最好的办法!