如何在执行mvn unleash:perform时指定构建发布的Java虚拟机?
解决maven-unleash-plugin执行时JVM版本不匹配及NPE问题
问题根源
你遇到的问题是maven-unleash-plugin内部构建时默认调用系统JVM,和启动插件的JVM版本不一致;而之前尝试的环境变量传递语法在Windows下无效,导致插件获取到空值触发NPE。
可行解决方法
修正环境变量传递语法(Windows专属)
Windows下环境变量用%变量名%而非$变量名,把命令改成:mvn unleash:perform -Dunleash.releaseEnvironment="JAVA_HOME=%JAVA_HOME%" -X | tee mvn.log如果命令行解析有问题,直接写JDK绝对路径更稳妥:
mvn unleash:perform -Dunleash.releaseEnvironment="JAVA_HOME=C:\Program Files\Java\jdk-11.x.x" -X | tee mvn.log在pom.xml中配置插件指定JVM
直接在插件配置里指定内部构建用的Java路径,避免依赖系统环境:<plugin> <groupId>com.itemis.maven.plugins</groupId> <artifactId>maven-unleash-plugin</artifactId> <version>你的插件版本号</version> <configuration> <mavenExecutor> <type>forked-path</type> <path>${JAVA_HOME}/bin/java</path> </mavenExecutor> <!-- 其他插件配置项 --> </configuration> </plugin>这样插件内部构建时会直接使用你指定的JVM,彻底避免版本不匹配。
临时切换命令行窗口的JVM环境
如果上面的方法都不生效,可以临时在当前命令行窗口覆盖JVM环境变量,再执行发布命令:set JAVA_HOME=C:\Program Files\Java\jdk-11.x.x set PATH=%JAVA_HOME%\bin;%PATH% mvn unleash:perform -X | tee mvn.log
NPE原因说明
之前的命令触发空指针,是因为Windows下$JAVA_HOME是无效的变量引用,插件拿到空的JAVA_HOME值后,在BuildProject.java的123行处理时无法正确解析,从而抛出NPE。只要传递有效的环境变量值就能避免这个问题,不用必须修改系统默认JVM。
内容的提问来源于stack exchange,提问作者Aaron Digulla
相关产品推荐
相关产品推荐

