2009-10-12 1 views
8

Как удалить сгенерированные артефакты сборки из целевого каталога Maven? Maven генерирует баннер или файл войны в целевой каталог. Я хотел бы удалить этот файл после того, как maven установил файл jar/war в локальный репозиторий (т. Е. После того, как maven выполнил цель 'install'). Удаление может произойти либо при установке цели, либо в отдельной цели, которую я выполняю вручную.Как удалить сгенерированные артефакты сборки из целевого каталога Maven?

Обратите внимание, что я хотел бы оставить неповрежденными другие части целевого каталога, например целевые/сайты и целевые/верные отчеты.

+1

Из любопытства, в чем причина этого? –

+0

Я видел это раньше, когда кто-то хочет создать артефакт, такой как файл exe NSIS, но использует тип артефакта jar, потому что у него есть удобный набор привязок жизненного цикла или если они не заботятся о промежуточном артефакте (например, файл jar, из которого производится exe.) –

+0

В основном я запускаю maven-сборку на сервере непрерывной интеграции, и меня интересуют только отчеты и прочее, которые устанавливаются на локальное репо. Остальные файлы просто теряют пространство, и мои файлы jar оказываются довольно большими. –

ответ

18

Просто используйте чистый плагин и запустить выполнение после установки фазы:

<plugin> 
    <artifactId>maven-clean-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
     <id>auto-clean</id> 
     <phase>install</phase> 
     <goals> 
      <goal>clean</goal> 
     </goals> 
     <configuration> 
      <filesets> 
      <fileset> 
       <directory>${project.build.outputDirectory}</directory> 
       <includes> 
       <include>**/*.jar</include> 
       </includes> 
      </fileset> 
      </filesets> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
+0

+1 для фильтра, но элемент каталога должен быть $ {project.build.outputDirectory}, чтобы разрешить переопределенные значения. –

+5

Мне нужно было удалить только конкретный каталог из результатов. Начиная с версии 2.3 плагин удаляет весь каталог по умолчанию, если вы не укажете свойство excludeDefaultDirectories в теге . – Danny

0

В Maven нет ничего, что могло бы сделать это. Вы можете использовать плагин antrun для выполнения скрипта Ant после установки, который удаляет артефакт, или использовать плагин exec, чтобы использовать командную строку для удаления артефакта или написать собственный плагин.

Я предлагаю, чтобы при выполнении любой из этих вещей не было никакой ценности. Maven предназначен для размещения промежуточных и конечных артефактов в target, чтобы сделать последующие сборки более эффективными. Причина, по которой нет ничего доступного для этого, уже является показателем того, что это мало ценно. Если это имеет значение для вас, у вас есть несколько вариантов.

+1

Ну, это просто неправда. См. Ответ дома. Сказав это, я все еще удивляюсь, зачем это делать. –

0

Я знаю, я немного поздно. Но я думаю, проблема заключалась в том, что проект maven автоматически архивирует артефакты. В моем случае я отключил автоматическое архивирование и просто архивировал артефакты вручную, используя действия post post. Таким образом, архивируются только интересующие меня артефакты. Я готов оставить сгенерированные артефакты на диске до следующей сборки.

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

  • Нет связанных вопросов^_^