Bash сценарий для получения значения тега outputDirectory набора файлов из сборки Maven. xml - PullRequest
1 голос
/ 26 мая 2020

Мне нужен сценарий Bash, чтобы получить значение тега outputDirectory в наборе файлов из сборки Maven. xml, чтобы я мог обрабатывать созданные файлы.

Я не имею в виду фактический набор символов между открывающий и закрывающий теги, но значение по умолчанию, если тег пуст, или значение переменной, если оно есть в этом теге.

Я создал сборку xml с разными тегами fileSet, просто чтобы показать различные случаи, которые мне нужно обработать. Мне нужен сценарий, который предоставит мне пути к выходному каталогу, как их видит 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: укажите outputDirectory только для упаковка банки?

У меня есть переменная в скрипте, в которой я хочу указать путь к папке, в которой Maven сохранит выходной файл. После каждого из приведенных ниже примеров тегов outputDirectory есть строка, которая, по моему мнению, должна быть значением нужной мне переменной.

значение $ {project.build.directory}

/ I Не уверен

/ examples значение $ {project.build.directory} / examples

$ {Common.shared.location} зависит от значения $ {Common.shared. location} переменная

Спасибо

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете использовать sed с регулярным выражением:

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

Объяснение:

sed 's|...|...|p' печатает совпадения для регулярного выражения <outputDirectory>\(.*\)</outputDirectory>, которое соответствует любой текст между двумя тегами <outputDirectory>. for match in ... перебирает совпадения и выводит их на стандартный вывод.

...