You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为exec-maven-plugin传递Java 17所需VM参数?

解决Java 17下exec-maven-plugin传递--add-opens VM参数的问题

你的配置存在两处核心错误,导致JVM无法正确识别--add-opens参数:

  • <commandlineArgs>被错误嵌套在<arguments>内部,两者属于互斥的参数配置方式
  • --add-opens作为JVM参数,未按正确格式拆分为独立参数项传递

修正后的完整配置

删除原配置中的<commandlineArgs>标签,在<mainClass>之前添加独立的<argument>项传递JVM参数,修改后的配置如下:

<profile>
    <id>smoke</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy jars for tests</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <includeProjectDependencies>false</includeProjectDependencies>
                            <includePluginDependencies>false</includePluginDependencies>
                            <stripVersion>true</stripVersion>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <classpathScope>test</classpathScope>
                    <includeProjectDependencies>false</includeProjectDependencies>
                    <includePluginDependencies>false</includePluginDependencies>
                    <executable>${env.HOME}/java/bin/java.exe</executable>
                    <workingDirectory>${project.build.directory}</workingDirectory>

                    <arguments>
                        <argument>-javaagent:${env.HOME}/wildfly/standalone/lib/ext/agent.jar</argument>
                        <argument>-classpath</argument>
                        <argument>lib/*;classes</argument>
                        <argument>-DJBOSS_HOME=${JBOSS_HOME}</argument>
                        <argument>-DJAVA_HOME=${env.HOME}/java</argument>
                        <argument>-Duser.home=${env.USERPROFILE}</argument>
                        <argument>-Djava.library.path=${JBOSS_HOME}/bin</argument>

                        <argument>-DTESTING_FROM_COMMANDLINE=true</argument>
                        <!-- 拆分JVM参数为独立项 -->
                        <argument>--add-opens</argument>
                        <argument>java.base/java.lang=ALL-UNNAMED</argument>
                        <argument>--add-opens</argument>
                        <argument>java.base/java.util=ALL-UNNAMED</argument>
                        <mainClass>com.test.GenerateSmoke</mainClass>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</profile>

关键注意事项

  • JVM参数位置:所有JVM参数必须放在<mainClass>标签之前,否则会被当作程序运行参数而非JVM参数处理
  • 参数拆分规则:包含空格的参数(如--add-opens java.base/java.lang=ALL-UNNAMED)必须拆分为两个独立的<argument>标签,否则JVM无法正确解析
  • 配置方式互斥:<commandlineArgs>和<arguments>不能混用,前者适合直接编写完整命令行字符串,后者适合结构化拆分参数

内容的提问来源于stack exchange,提问作者emresahin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:45:36