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

Maven exec插件%modulepath无效及动态传参问题求助

方案一:POM固定配置基础上追加自定义参数(满足需求a)

这是兼容性最好、改造成本最低的方案,仅需调整原有POM配置,新增可动态传递的参数占位符即可:

  1. 首先在POM的properties节点新增默认空值属性,避免未传参数时插件报错:
<properties>
  <!-- 自定义执行参数,默认空 -->
  <exec.extraArgs></exec.extraArgs>
</properties>
  1. 修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:06:04