如何在多模块项目中使用所有pom.xml文件提取artifactId(使用shell脚本)?

时间:2017-09-29 09:54:54

标签: shell maven bamboo

我需要从multimodule项目中的所有poms中提取artifactId。

项目结构与此类似,但结构可能不同(它取决于项目):

project
|------->pom.xml
|------->subproject1
            |------->pom.xml
            |------->folder1
                        |------->pom.xml                
|------->subproject2
            |------->pom.xml
            |------->folder2
                        |------->pom.xml                        
|------->subproject3
            |------->pom.xml
            |------->folder3
                        |------->pom.xml                        
|------->subproject4
            |------->pom.xml
            |------->folder4
                        |------->pom.xml
|------->subproject5
            |------->pom.xml
            |------->folder5
                        |------->pom.xml

我使用此命令提取单个模块项目中的信息:

MVN_ARTIFACTID=$(mvn -q \
-Dexec.executable="echo" \
-Dexec.args='${project.artifactId}' \
--non-recursive \
org.codehaus.mojo:exec-maven-plugin:1.3.1:exec)

然后我将此变量用于Bamboo计划中的其他操作。

如何使用多模块项目执行类似的任务?我需要在变量中提取所有poms的artifactId。

我知道这篇文章,但不是同一个问题: How to extract the GAV from a pom.xml file in a shell script

感谢。

2 个答案:

答案 0 :(得分:1)

只需删除非递归选项:

MVN_ARTIFACTID=$(mvn -q -Dexec.executable="echo" -Dexec.args='${project.artifactId} ##' org.codehaus.mojo:exec-maven-plugin:1.3.1:exec)
echo $MVN_ARTIFACTID| sed 's/##/\n/g'

添加##作为小型黑客,以便第二行可以更可读的格式提供artifactId名称。否则所有模块都将在同一行中回显。

Module-1
Module-2
Module-3

答案 1 :(得分:1)

应该这样做(根据问题中引用的答案改编):

 grep -v '\[' <( find . -type f -name 'pom.xml' -exec mvn -f{} help:evaluate -Dexpression="project.artifactId" \; ) 

请注意,其他答案在Maven 3.5.4中对我不起作用。