如何在Shell中向Maven传递变量以运行MariaDB Connector J测试?
解决Shell变量传递给Maven命令的问题
你遇到的问题本质是Shell对特殊字符的解析导致参数被截断——你的dbUrl里包含&、?这类Shell有特殊含义的字符,直接用$myUrl的话,Shell会把&解析成后台运行的符号,导致Maven实际收到的参数不完整,自然无效。下面给你几个可行的解决方案:
方案1:用双引号包裹变量引用
这是最直接的解决方法,双引号会让Shell把变量内容作为一个整体传递,同时保留里面的特殊字符不被解析。步骤如下:
- 正确赋值环境变量(注意赋值时也要用双引号包裹内容,避免特殊字符提前被解析):
export myUrl="jdbc:mysql://myhost:3306/testj?user=myuser&password=mypassword"
- 运行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
相关产品推荐
相关产品推荐

