Я пытаюсь автоматизировать добавление новых подузлов в nexus-core-feature-3.16.1-02.xml, потому что мы используем некоторые плагины для работы, которые не поставляются с «коробочным» решением.
Суть в том, что когда выходит новая версия nexus-container, у меня есть bash-скрипт, который запускает новую версию test-container и копирует новый файл default-xml в соответствующую папку.
Следующим шагом является редактирование этого файла и добавление некоторых новых функций для работы плагина. Когда это сделано, старый контейнер останавливается, новый xml-заменяет старый, и я запускаю docker-контейнер с сопоставленными nexus-data и default-xml.
Для правильной работы этого плагина мне нужно добавить некоторые изменения в файл default-xml. И я хочу использовать xmlstarlet для этого.
Добавьте это в раздел «nexus-core-feature»:
<feature version="1.0.9" prerequisite="false" dependency="false">nexus-repository-apt</feature>
</feature>
И это до конца файла xml-файла
<feature name="nexus-repository-apt" description="net.staticsnow:nexus-repository-apt" version="1.0.10">
<details>net.staticsnow:nexus-repository-apt</details>
<bundle>mvn:net.staticsnow/nexus-repository-apt/1.0.10</bundle>
<bundle>mvn:org.apache.commons/commons-compress/1.18</bundle>
<bundle>mvn:org.tukaani/xz/1.8</bundle>
</feature>
</features>
Так что я был Google и ТАК некоторое время, но я все еще застрял.
Например, этот случай: Как вставить новый элемент под другим с помощью xmlstarlet?
Кажется довольно простым сделать что-то подобное, и я попробовал это:
xmlstarlet ed -s /features/feature/feature -t elem -n featureTMP -v "nexus-apt-repositroy" \
-i //featureTMP -t attr -n "version" -v "1.0.9" \
-i //featureTMP P -t attr -n "prerequisite" -v "false" \
-i //featureTMP -t attr -n "dependency" -v "false" \
-r //featureTMP -v feature nexus-core-feature-3.16.1-02-features.xml
Я подозреваю, что моя ошибка была (и есть) в пути узлов.
Следующим шагом было изучение узлов
xmlstarlet sel -t -c "/" nexus-core-feature-3.16.1-02-features.xml
Вывод был весь xml-файл, и, кажется, все в порядке
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="nexus-core-feature">
<feature name="nexus-core-feature" description="org.sonatype.nexus.assemblies:nexus-core-feature" version="3.16.1.02">
<details>org.sonatype.nexus.assemblies:nexus-core-feature</details>
<feature version="3.16.1.02" prerequisite="false" dependency="false">nexus-audit-plugin</feature>
<feature version="3.16.1.02" prerequisite="false" dependency="false">nexus-blobstore-tasks</feature>
<feature version="3.16.1.02" prerequisite="false" dependency="false">nexus-ssl-plugin</feature>
<feature version="3.16.1.02" prerequisite="false" dependency="false">nexus-coreui-plugin</feature>
<feature version="3.16.1.02" prerequisite="false" dependency="false">nexus-repository-httpbridge</feature>
...
Но когда я пытаюсь попасть в узел, результат всегда пуст:
xmlstarlet sel -t -c "/features" nexus-core-feature-3.16.1-02-features.xml
С селектором атрибута он все еще пуст:
xmlstarlet sel -t -c "/features/feature[@name="nexus-core-feature"]" nexus-core-feature-3.16.1-02-features.xml
Пытался проверить это в XPath-онлайн-тестере и внутри тестера все в порядке.
Далее я использую более простой пример из этой статьи: https://unix.stackexchange.com/questions/386965/insert-custom-xml-tag-into-a-xml-file-in-a-bash-script
и попытался просмотреть файл примера, который был в arctilce, и, похоже, все в порядке.
xmlstarlet sel -t -c "/server-groups" file.xml
выход:
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="somevalue"/>
</jvm-options>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
</server-groups>
Следующий шаг
xmlstarlet sel -t -c "/server-groups/server-group/jvm" file.xml
выход:
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="somevalue"/>
</jvm-options>
</jvm>
И это меня очень смущает ... Почему такой же подход не работает с файлом nexus-xml? Более сложная \ странная структура? Буду рад любым советам