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

如何在Shell中向Maven传递变量以运行MariaDB Connector J测试?

解决Shell变量传递给Maven命令的问题

你遇到的问题本质是Shell对特殊字符的解析导致参数被截断——你的dbUrl里包含&、?这类Shell有特殊含义的字符,直接用$myUrl的话,Shell会把&解析成后台运行的符号,导致Maven实际收到的参数不完整,自然无效。下面给你几个可行的解决方案:

方案1:用双引号包裹变量引用

这是最直接的解决方法,双引号会让Shell把变量内容作为一个整体传递,同时保留里面的特殊字符不被解析。步骤如下:

  1. 正确赋值环境变量(注意赋值时也要用双引号包裹内容,避免特殊字符提前被解析):
export myUrl="jdbc:mysql://myhost:3306/testj?user=myuser&password=mypassword"
  1. 运行Maven命令时,用双引号包裹$myUrl:
mvn -DdbUrl="$myUrl" package

这样Maven就能完整收到你定义的dbUrl参数了。

方案2:让Maven直接读取环境变量

如果不想在命令行里显式传递参数,可以在pom.xml中配置Maven直接读取Shell环境变量:

在你的pom.xml里添加属性配置:

<properties>
    <!-- 从环境变量myUrl中读取dbUrl的值 -->
    <dbUrl>${env.myUrl}</dbUrl>
</properties>

然后只需要先导出环境变量,再直接运行Maven命令即可:

export myUrl="jdbc:mysql://myhost:3306/testj?user=myuser&password=mypassword"
mvn package

这种方式还能避免在命令行输出中暴露密码,更安全。

为什么之前的方式无效?

你之前用mvn -DdbUrl=$myUrl package时,Shell会把$myUrl里的&解析成“后台运行”的指令,导致&前面的部分被当作Maven命令的参数,后面的password=mypassword被当成了新的Shell命令,自然Maven无法收到完整的dbUrl。用双引号包裹后,Shell会把整个变量内容当作一个参数传递,不会解析里面的特殊字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:02:20