Где добавить пользовательские дескрипторы сборки для плагина 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, и он сработал. Вероятно, я мог попробовать это, прежде чем искать в Интернете...