Сборка всегда выполняет jar с зависимостями - PullRequest
2 голосов
/ 01 ноября 2010

Привет, я создал сборку для архивирования изображений проекта и подключил ее к фазе пакета в моем файле pom, проблема здесь в том, что когда я выполняю «чистый пакет компиляции», он создает требуемый файл zip вместе с файлом -jar-with-dependencies.jar, который я не хочу создавать. Как я могу подавить создание этого файла JAR

вот мой помп

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <inherited>false</inherited>
    <configuration>
        <descriptors>
            <descriptor>
                src/main/assembly/cat_image_resources_assembly.xml
            </descriptor>
        </descriptors>
    </configuration>
    <executions>
      <execution>
        <id>cat_image_resources</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
            <!-- appendAssemblyId>false</appendAssemblyId>
            <Change the name to standard name >
            <finalName>renameImages</finalName-->
        </configuration>
      </execution>
    </executions>
</plugin>

сборочный файл cat_image_resources_assembly.xml

<assembly>
<id>cat_image_resources</id>
<formats>
    <format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<baseDirectory>${artifactId}</baseDirectory>
<fileSets>
    <fileSet>
        <directory>exportedImages</directory>
        <outputDirectory/>
        <fileMode>644</fileMode>
    </fileSet>
</fileSets>
</assembly>

генерирует следующие файлы

CATImageExport2-1.0-SNAPSHOT-cat_image_resources.zip (требуется 5 МБ), CATImageExport2-1.0-SNAPSHOT-jar-with-dependencies.jar (58 МБ это с зависимостями, которые я хочу исключить при генерации)

Ответы [ 4 ]

1 голос
/ 02 ноября 2010

проблема здесь в том, что когда я выполняю «чистый пакет компиляции», он создает требуемый zip-файл вместе с файлом -jar-with-dependencies.jar, который я не хочу создавать.

Файл -jar-with-dependencies.jar обычно создается, если вы используете предопределенный дескриптор jar-with-dependencies. Предоставленный вами фрагмент не показывает ничего подобного и работает должным образом (после вставки его в тестовое POM):

$ ls target
archive-tmp     Q4068706-1.0-SNAPSHOT-cat_image_resources.zip  test-classes
classes         Q4068706-1.0-SNAPSHOT.jar
maven-archiver  surefire-reports

Дважды проверьте, что вы не наследуете конфигурацию плагина от родительского POM (например, с mvn help:effective-pom), потому что предоставленный вами фрагмент XML работает должным образом.

0 голосов
/ 25 июля 2011

Не так много, чтобы добавить к ответу Кевина все наследование конфигурации, которое делает Maven. Однако, если вы можете изменить родительский POM (не влияя на его поведение), один из вариантов будет следующим:

  1. В родительском элементе определите элемент , который ссылается на jar-with-dependencies в элементе для значения по умолчанию . То есть не как часть плагина.
  2. В дочернем элементе пропустите '1014 * по умолчанию (который, таким образом, отключит jar-with-dependencies) и добавьте свой собственный с его .

Пример этого можно найти здесь:

https://github.com/demobox/jar-with-deps-vs-spi/blob/master/pom.xml

Там значение по умолчанию переопределяется в профиле 'with-services-handler', а не в дочернем POM, но механизм должен быть таким же.

0 голосов
/ 05 ноября 2010

re: «Есть ли способ, которым я могу переопределить определение родительского pom? Я имею в виду, можно ли игнорировать определение родительского pom и иметь свой собственный дескриптор, чтобы jar-with-dependencies не мешал моему pom.»

В прошлом я немного возился с этим и никогда не мог заставить себя делать то, что хотел.Я почти уверен, что короткий ответ - «нет», но я подробно остановлюсь на том, что я пробовал.

  1. Я создал запись pluginManagement для плагина сборки с двумя исполнениями, каждоес уникальным идентификатором и конфигурацией.Затем в плагин сборки в разделе плагинов я добавил раздел «Выполнения» ТОЛЬКО с одним выполнением с идентификатором, совпадающим с идентификатором выполнения, которое я действительно хотел запустить.Он по-прежнему выполнял оба.

  2. Я создал запись pluginManagement для плагина сборки с одним выполнением с уникальным идентификатором и конфигурацией.Затем в разделе плагинов я создал запись для плагина сборки с одним исполнением и другим идентификатором и конфигурацией.Он по-прежнему выполнял оба.

  3. Я создал запись pluginManagement для плагина сборки с одним выполнением с уникальным идентификатором и конфигурацией.Затем в разделе плагинов я создал запись для плагина сборки с одним исполнением и тем же идентификатором, на этот раз указав совершенно другую конфигурацию.По-видимому, он объединил две конфигурации вместе и дал результат обеих конфигураций.Примечание: в конфигурации в разделе pluginManagement использовалась запись дескриптора, а в разделе плагинов - запись descriptorRef.Я попытался добавить пустую запись дескрипторов в конфигурацию в разделе плагинов, надеясь, что она переопределит (и по сути уничтожит) использование дескриптора, указанного в разделе pluginManagement, но не повезло.

Я полагаю, что maven всегда объединяет родительские плагины с дочерними плагинами и по существу ничего не перезаписывает, жадно объединяя совпадающие теги (философия больше - лучше, поэтому он не выбирает подэлементы одного тега над подэлементами другого).

Что касается философии, то здесь есть плагин сборки, который поможет вам создавать собственные артефакты (и в maven каждый проект должен создавать один основной артефакт, не считая классификаторы источников и т. Д.), Поэтому, если нескольким детям нужно использоватьплагин сборки вы бы поместили только то, что является общим для всех из них в родительский пом.Если у вас нет ничего общего со всеми конфигурациями / выполнениями плагина maven-assembly-plug, я думаю, что вам нужно перенести конфигурацию плагина сборки в каждый из дочерних проектов.

0 голосов
/ 01 ноября 2010

Вы уверены, что это плагин сборки, создающий файл jar зависимостей?

Я говорю это, потому что похоже, что плагин сборки работает точно так, как вы указали. Однако, не видя больше файла pom.xml проекта, я не могу исключить, что в файле pom.xml для проекта нет другого подключаемого модуля или даже родительского файла pom.xml, который может создавать для вас файл jar зависимостей.

...