2010-11-01 4 views
2

Привет, я создал сборку для zip-изображений проекта, и я подключил его к фазе упаковки в моем файле 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 (требуется 5mb), CATImageExport2-1.0-SNAPSHOT-jar-with-dependencies.jar (58mb это с отпечатком которые я хочу исключить генерацию)

ответ

0

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

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

+0

если я прокомментирую сборку плагина maven-assembly-plugin, то он не генерирует ни один из этих двух артефактов. – sanat

+0

У Паскаля есть правильный шаг, чтобы попробовать следующее. Взгляните на эффективного пом. Вы можете наследовать то, чего не хотите. – jgifford25

1

Проблема здесь, когда я выполняю «чистый пакет компиляции», он создает мой требуемый 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

Привет Спасибо за ответ я сделал помощь: effictive-POM и нашел банку-с-зависимостей имеет предопределенный дескриптор, – sanat

+0

Maven сборки-плагин 2.2-бета-3 <Конфигурация> банку-с-зависимостей $ {Основной класс} sanat

+0

@sanat: Тогда у вас есть ответ :) –

0

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

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

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

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

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

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

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

0

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

  1. В родительском определяют <descriptorRefs> элемент, который соединяет в банку-с-зависимостей в < конфигурация > элемент для «по умолчанию» < исполнение >. То есть не как часть конфигурации < > плагина.
  2. В детстве, пропустите «по умолчанию» < выполнения > (который, таким образом, disble банка-с-зависимостей) и добавить свое собственное < исполнение > с его конфигурацией > <.

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

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

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

Смежные вопросы