很长一段时间以来,我一直使用以下命令从Maven项目中以编程方式获取工件版本(例如:用于CI/CD目的):
mvn help:evaluate -Dexpression=project.version -q -DforceStdout
最近,这个命令被打破了。
不管出于什么原因,输出中现在包含了一些看起来像shell转义序列(的片段)的东西,而不是由shell呈现,但是当然会使用输出中断任何命令。
为了说明我的意思:
# What I expect (Ubuntu 22.04, Maven 3.6.3, maven-help-plugin 3.4.0, Bash 5.1.16)
$ mvn help:evaluate -Dexpression=project.version -q -DforceStdout | hexdump -C
00000000 31 2e 30 2e 30 |1.0.0|
00000005
# What happens now (Ubuntu 23.04, Maven 3.8.7, maven-help-plugin 3.4.0, Bash 5.2.15)
$ mvn help:evaluate -Dexpression=project.version -q -DforceStdout | hexdump -C
00000000 31 2e 30 2e 30 1b 5b 30 6d |1.0.0.[0m|
00000009
$ mvn help:evaluate -Dexpression=project.version --batch-mode -q -DforceStdout | hexdump -C
00000000 1b 5b 30 6d 31 2e 30 2e 30 1b 5b 30 6d |.[0m1.0.0.[0m|
0000000d
当然,我首先假设的是我的shell /环境被搞砸了,所以我在Docker中重新创建了这个问题。您可以尝试自己生成上面的输出。
FROM ubuntu:22.04
RUN apt update && apt install -y maven bsdmainutils
WORKDIR /code
RUN cat <<EOF > /code/test.sh
mvn help:evaluate -Dexpression=project.version -q -DforceStdout | hexdump -C
EOF
RUN cat <<EOF > /code/pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
</project>
EOF
CMD ["sh", "test.sh"]
FROM ubuntu:23.04
RUN apt update && apt install -y maven bsdmainutils
WORKDIR /code
RUN cat <<EOF > /code/test.sh
mvn help:evaluate -Dexpression=project.version -q -DforceStdout | hexdump -C
EOF
RUN cat <<EOF > /code/pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
</project>
EOF
CMD ["sh", "test.sh"]
我是不是漏了什么?我需要升级我的Google-Fu吗?
如果这确实是一个错误,对报告有什么帮助吗(甚至是向哪个项目报告?))也会非常感激:)
1条答案
按热度按时间cngwdvgl1#
这看起来非常像彩色控制台输出。
为了避免这种情况,我在脚本中添加了
--batch-mode
标志。