Maven exec插件%modulepath无效及动态传参问题求助
方案一:POM固定配置基础上追加自定义参数(满足需求a)
这是兼容性最好、改造成本最低的方案,仅需调整原有POM配置,新增可动态传递的参数占位符即可:
- 首先在POM的properties节点新增默认空值属性,避免未传参数时插件报错:
<properties> <!-- 自定义执行参数,默认空 --> <exec.extraArgs></exec.extraArgs> </properties>
- 修改exec插件的arguments配置,在末尾追加占位符:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <executions> <execution> <id>cli</id> <configuration> <executable>java</executable> <arguments> <argument>-p</argument> <modulepath/> <argument>-m</argument> <argument>dev.liambloom.checker.ui/dev.liambloom.checker.ui.cli.Main</argument> <!-- 追加自定义参数占位符 --> <argument>${exec.extraArgs}</argument> </arguments> </configuration> </execution> </executions> </plugin>
后续需要传递自定义参数时,直接通过命令行赋值即可,原有固定配置完全不需要修改:
mvn exec:exec@cli -pl ui -Dexec.extraArgs="--arg1 val1 --arg2 val2"
方案二:解决命令行%modulepath不生效问题(满足需求b)
你遇到的占位符不生效有两个原因:
%modulepath是exec-maven-plugin仅在POM的<arguments>标签内才会解析的内置变量,直接写在命令行-Dexec.args中不会被插件识别替换- Windows批处理会优先将
%modulepath识别为批处理自身的环境变量,直接替换为空值
如果需要完全通过命令行/批处理实现,不需要修改POM,可以先通过dependency:build-classpath命令提前导出模块路径,再传递给exec插件,批处理写法如下:
@echo off :: 导出模块路径到临时变量 for /f "delims=" %%i in ('mvn dependency:build-classpath -Dmdep.outputFile=con -pl ui -q') do set MODULE_PATH=%%i :: 执行命令传入实际模块路径和自定义参数 mvn exec:exec -pl ui -Dexec.executable=java -Dexec.args="-p %MODULE_PATH% -m dev.liambloom.checker.ui/dev.liambloom.checker.ui.cli.Main %*"
内容的提问来源于stack exchange,提问作者Liam Bloom
相关产品推荐
相关产品推荐

