Bash 从 Maven 获取文件集的 outputDirectory 标签值的脚本 assembly.xml

Bash script to get the outputDirectory tag value of a fileset from Maven assembly.xml

我需要一个 Bash 脚本来从 Maven assembly.xml 的文件集下获取 outputDirectory 标签的值,这样我就可以处理创建的文件。

我指的不是开始标签和结束标签之间的实际字符集,而是标签为空时的默认值或变量的值(如果该标签中有的话)。

我用不同的 fileSet 标签创建了一个程序集 xml,只是为了显示我需要处理的各种情况。我想要一个脚本,它将给我 Maven 看到的输出目录的路径

<assembly>
    <id>${deploy.name}</id>
    <formats>
        <format>zip</format>
    </formats>
    <fileSets>
        <fileSet>
            <outputDirectory></outputDirectory>
        </fileSet>    
        <fileSet>
            <outputDirectory>/</outputDirectory>
        </fileSet>
        <fileSet>
            <outputDirectory>/examples</outputDirectory>
        </fileSet>
        <fileSet>
            <outputDirectory>${Common.shared.location}</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

更新: Maven 将创建的文件保存在输出目录中。 outputDirectory 的基本目录默认值为 ${project.build.directory} 并且这里有很好的解释 Maven: specify the outputDirectory only for packaging a jar?

我在脚本中有一个变量,我希望它具有 Maven 保存输出文件的文件夹的路径。在下面的每个示例 outputDirectory 标记之后,有一行我认为应该是我想要的变量的值。

${project.build.directory}

的价值

/ 我不确定

/例子 ${project.build.directory}/示例的值

${Common.shared.location} 取决于 ${Common.shared.location} 变量的值

谢谢

您可以将 sed 与正则表达式一起使用:

for match in $(sed -n 's|<outputDirectory>\(.*\)</outputDirectory>||p' assembly.xml) ; do
  echo "$match"
done

解释:

sed 's|...|...|p' 打印正则表达式 <outputDirectory>\(.*\)</outputDirectory> 的匹配项,匹配两个 <outputDirectory> 标签之间的任何文本。 for match in ... 迭代匹配并将它们打印到标准输出。