Где добавить пользовательские дескрипторы сборки для плагина Maven Assembly?
Либо я пропущу что-то очевидное, либо обе книга Maven и Домашняя страница плагинов Maven, описывая, как писать пользовательские дескрипторы сборки, не говорите ничего о том, куда должен идти этот файл. Это часть моего проекта? Он входит в какой-то центральный конфигурационный каталог Maven? Должен ли я указать его местоположение где-нибудь?
Ответы
Ответ 1
Да, вы должны указать местоположение. На странице Конфигурация и использование это делается следующим образом:
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/src.xml</descriptor>
</descriptors>
</configuration>
[...]
</project>
На самом деле, я рекомендую использовать src/main/assembly
как местоположение.
Ответ 2
В несколько обходной способ, я был в конечном счете в состоянии узнать. Во-первых, эта страница о совместном использовании дескрипторов сборок косвенно дает вам несколько советов.
Моя первая ошибка заключалась в использовании descriptorRef
вместо descriptor
в моей конфигурации плагина. Когда я исправил это и создал структуру каталогов, указанную на странице, приведенной выше, я получил серию сообщений об ошибках, которые показали, как плагин пытается разрешить имя дескриптора, которое вы ему дали:
[INFO] Поиск местоположения файла:/path/to/project/dependency-collection.xml
[INFO] Файл:/path/to/project/dependency-collection.xml не существует.
Итак, поместите его в корень проекта...
[INFO] Недопустимая спецификация артефакта: 'dependency-collection.xml'. Должен содержать не менее трех полей, разделенных символом ":".
... или загрузить его из артефакта Maven...
[INFO] Не удалось разрешить ресурс classpath:/assemblies/dependency-collection.xml от classloader: ClassRealm [/plugins/org.apache.maven.plugins:maven-assembly-plugin:[email protected]/thread: main, parent: ClassRealm [plexus.core, parent: null]]
[INFO] Не удалось разрешить ресурс classpath: dependency-collection.xml от classloader: ClassRealm [/plugins/org.apache.maven.plugins:maven-assembly-plugin:[email protected]/thread:main, parent: ClassRealm [plexus.core, parent: null]]
... или помещая его в путь класса плагина (я предполагаю, что там, где имеются предопределенные дескрипторы)...
[INFO] Создание URL-адреса из местоположения: dependency-collection.xml
Ошибка: java.net.MalformedURLException: нет протокола: dependency-collection.xml
... или загрузить его из URL-адреса.
Приятно, но это действительно нужно документировать где-то, я думаю. Я просто поместил файл дескриптора рядом с epom.xml, и он сработал. Вероятно, я мог попробовать это, прежде чем искать в Интернете...