【问题标题】:Pass JVM args to maven surefire, conditional on build Java version?将 JVM 参数传递给 maven surefire,以构建 Java 版本为条件?
【发布时间】:2016-07-02 19:13:13
【问题描述】:

只有当 <jdk.version>1.7</jdk.version> 配置为 Java 1.7 时,我才能将此 argLine 配置传递给 maven-surefire 插件,但当用户将 pom.xml 更改为是否为 java 1.8 配置?

原因是Java 1.8没有permgen空间。

<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>

【问题讨论】:

    标签: maven maven-surefire-plugin


    【解决方案1】:

    您可以根据属性值使用Maven profile activation,在这种情况下,属性将为jdk.version,其值取决于JDK的不同配置。然后配置文件将相应地更改 Maven Surefire 插件配置。

    因此,您的 pom 可能如下所示:

    <project>
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.sample</groupId>
        <artifactId>sample-project</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <jdk.version>1.7</jdk.version>
        </properties>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                    <configuration>
                        <source>${jdk.version}</source>
                        <target>${jdk.version}</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <profiles>
            <profile>
                <id>surefire-java7</id>
                <activation>
                    <property>
                        <name>jdk.version</name>
                        <value>1.7</value>
                    </property>
                </activation>
                <build>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <version>2.19.1</version>
                            <configuration>
                                <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
            </profile>
            <profile>
                <id>surefire-java8</id>
                <activation>
                    <property>
                        <name>jdk.version</name>
                        <value>1.8</value>
                    </property>
                </activation>
                <build>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <version>2.19.1</version>
                            <configuration>
                                <argLine>-Xmx1024m</argLine>
                            </configuration>
                        </plugin>
                    </plugins>
                </build>
            </profile>
        </profiles>
    </project>
    

    请注意末尾的profiles 部分。定义了两个配置文件:

    • surefire-java7:它将被1.7 变量的jdk.version 值激活,并为Maven Surefire 插件设置argLine 所需的值
    • surefire-java8:它将由jdk.version 变量的值1.8 激活,并为Maven Surefire 插件设置不同的argLine

    另请注意,使用此配置,您甚至可以根据需要从命令行切换 JDK 版本(以及 Surefire 配置),如下所示:

    mvn clean test -Djdk.version=1.8
    

    关联的配置文件将作为构建的一部分自动激活。


    关于交叉编译的重要说明(您可能已经知道,但以防万一)我建议仔细阅读this question/answer

    【讨论】:

      【解决方案2】:

      您应该使用基于 JDK 的激活,而不是属性。

      <project>
          <modelVersion>4.0.0</modelVersion>
          <groupId>com.sample</groupId>
          <artifactId>sample-project</artifactId>
          <version>1.0-SNAPSHOT</version>
      
          <properties>
              <jdk.version>1.7</jdk.version>
          </properties>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-compiler-plugin</artifactId>
                      <version>3.5.1</version>
                      <configuration>
                          <source>${jdk.version}</source>
                          <target>${jdk.version}</target>
                      </configuration>
                  </plugin>
              </plugins>
          </build>
      
          <dependencies>
              <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>4.11</version>
                  <scope>test</scope>
              </dependency>
          </dependencies>
      
          <profiles>
              <profile>
                  <id>surefire-java7</id>
                  <activation>
                      <jdk>(,1.8)</jdk>
                  </activation>
                  <build>
                      <plugins>
                          <plugin>
                              <groupId>org.apache.maven.plugins</groupId>
                              <artifactId>maven-surefire-plugin</artifactId>
                              <version>2.19.1</version>
                              <configuration>
                                  <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
                              </configuration>
                          </plugin>
                      </plugins>
                  </build>
              </profile>
              <profile>
                  <id>surefire-java8</id>
                  <activation>
                      <jdk>1.8</jdk>
                  </activation>
                  <build>
                      <plugins>
                          <plugin>
                              <groupId>org.apache.maven.plugins</groupId>
                              <artifactId>maven-surefire-plugin</artifactId>
                              <version>2.19.1</version>
                              <configuration>
                                  <argLine>-Xmx1024m</argLine>
                              </configuration>
                          </plugin>
                      </plugins>
                  </build>
              </profile>
          </profiles>
      </project>
      

      参见 Maven 文档。 http://maven.apache.org/guides/introduction/introduction-to-profiles.html http://maven.apache.org/enforcer/enforcer-rules/versionRanges.html

      【讨论】:

        猜你喜欢
        • 2013-04-06
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 2012-05-11
        • 2021-10-03
        • 1970-01-01
        • 2019-10-03
        • 1970-01-01
        相关资源
        最近更新 更多