bash - 在 Linux 上使用参数中的特殊符号运行 maven 目标
问题描述
我们有持续集成工具 Bamboo。在那里我可以使用实际命令定义一个 Maven 任务。命令在 Linux 机器上运行。我需要为构建中的某些插件提供密码,但密码包含特殊符号。即 123'123
Maven命令看起来像
mvn clean install -Dsome.property.password=${bamboo.some_psw}
mvn clean install -Dsome.property.password=123'123
这将失败并显示没有为此构建指定目标的消息。好的,我需要转义特殊符号。mvn clean install -Dsome.property.password="123'123"
现在maven可以运行gole了。但是使用 XML 配置构建的自定义插件带有一个占位符,例如
<someTag user="SOME_USER" password="${some.property.password}"/>
并且在 XML 解析中失败,并显示消息“元素类型“someTag”必须后跟属性规范,“>”或“/>”。” 列号从 ${some.property.password} 开始。所以看起来那个报价是用值传递的,并且 XML 无法被解析..
- 尝试使用单引号:
mvn clean install -Dsome.property.password='123'\''123'
同样的错误再次争辩说“没有为此构建指定目标”
相同如果mvn clean install -Dsome.property.password=123\'123
如果密码没有特殊符号,一切正常,即
mvn clean install -Dsome.property.password=somepass
顺便说一句,在本地 Windows 机器上一切正常
mvn clean install -Dsome.property.password="123'123"
知道如何在调用 maven 时在带有特殊符号的参数中传递一个值吗?
解决方案
您在这里有多个层,如果它们可能(或可能需要但不做)一些转义或值解析,则每个层:
- 给定的maven插件
- 行家本身
- 外壳(bash,sh,...)
- 调用 Maven 的竹逻辑
- 竹属性
很可能一层所做的与下一层的期望发生冲突。但是,如果不进行调试,就几乎不可能说出 isuse 到底是什么。肯定这两个:
mvn clean -Dsome.property.password="123'123"
mvn clean -Dsome.property.password=123\'123
直接在 bash 中执行时工作得很好。然而,可能是 Bamboo 使用了不同的 shell,或者它对变量做了一些事情。您可以尝试使用echo-maven-plugin 之类的东西来打印竹子通过的确切内容:
<plugin>
<groupId>com.github.ekryd.echo-maven-plugin</groupId>
<artifactId>echo-maven-plugin</artifactId>
<version>1.2.0</version>
<inherited>false</inherited>
<executions>
<execution>
<id>debug</id>
<goals>
<goal>echo</goal>
</goals>
<phase>clean</phase>
<configuration>
<message>${some.property.password}</message>
</configuration>
</execution>
</executions>
</plugin>
可能会提示您最终值有什么问题(如果有的话)。
还有一个选项(尽管不太可能)您正在配置的插件< someTag ...
无法正确读取/解析配置。
推荐阅读
- python - 预测和拟合之间的keras形状不匹配
- amazon-web-services - 如何使用节点 SDK 选择 aws lambda 函数名称?
- java - 打印字符串中每个字母出现的索引
- kubernetes - 为什么无法从外部访问服务?
- linux - puppet ruby gem nullpo 段错误
- react-native - React Native - 检测物理损坏的屏幕
- amazon-web-services - AWS 中的负载均衡器:添加 SSL 证书后运行状况检查失败 [502]
- swift - 快速从 Firestore 中删除地图
- algorithm - 如何检查图中的所有节点是否可以从所有其他节点访问?
- javascript - Webpack 和 Github 页面的部署问题