2013-06-03 3 views
0

Я создал плагин Maven (называемый unpackTemplates), который распаковывает файл jar зависимости и копирует с него файлы ресурсов (в данном случае, шаблоны) в определенное место в проекте.Могу ли я использовать maven-артефакт для запуска плагина maven при его установке?

В настоящее время я помещаю следующее в файл pom каждого проекта, который имеет зависимость от шаблонов. Он выглядит так:

<project> 
    <groupId>DuriansAreDope</groupId> 
    <artifactId>DuriansAreDope</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <build> 
     <plugin> 
     <groupId>mycorp</groupId> 
     <artifactId>unpackTemplates</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
       <configuration> 
        <groupId>com.mycorp.lib</groupId> 
        <version>1.0</version> 
        <artifactId>Lib-With-Templates</artifactId> 
       </configuration> 
       <goals> 
        <goal>unpackTemplates</goal> 
       </goals> 
       <phase>generate-sources</phase> 
      </execution> 
     </executions> 
     </plugin> 
     <pluginManagement>....</pluginManagement> 
    </build> 
    <dependencies> 
     <dependency> 
     <groupId>com.mycorp.lib</groupId> 
     <artifactId>Lib-With-Templates</artifactId> 
     <version>1.0</version> 
     </dependency> 
    </dependencies> 
</project> 

Вышеупомянутый проект pom работает для нас. Он вызывает плагин, а плагин - это работа. Тем не менее, мы хотели бы избежать добавления раздела плагина к pom каждого проекта.

Было бы разумнее разместить этот раздел плагина в зависимостях pom. Таким образом, проект pom не нуждается в модификации, за исключением добавления тегов <dependency>, как обычно. И у зависимостей есть плагин, где он установлен.

Я видел, что файл pom для Gson содержит раздел <build><plugins>...</plugins></build>. Однако, когда я предоставляю свои зависимости следующие файлы pom, плагин не запускается (хотя зависимость найдена, загружена, установлена ​​и т. Д.).

<project> 
    <groupId>com.mycorp.lib</groupId> 
    <artifactId>Lib-With-Templates</artifactId> 
    <version>1.0</version> 
    <build> 
     <plugin> 
     <groupId>mycorp</groupId> 
     <artifactId>unpackTemplates</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
       <configuration> 
        <groupId>com.mycorp.lib</groupId> 
        <version>1.0</version> 
        <artifactId>Lib-With-Templates</artifactId> 
       </configuration> 
       <goals> 
        <goal>unpackTemplates</goal> 
       </goals> 
       <phase>generate-sources</phase> 
      </execution> 
     </executions> 
     </plugin> 
     <pluginManagement>....</pluginManagement> 
    </build> 
</project> 

Любые идеи о том, что я делаю неправильно, или если поместье Gson просто делает что-то еще совсем?

(NB: Идентификаторы groupId/version/artifactIds в <configuration> необходимы, потому что они являются (строковыми) параметрами для плагина, предположительно, если бы я работал под управлением прямой зависимости от работы, я мог бы реорганизовать их, но снова , это даже не запущена запутано версии с параметрами)

+0

Помимо вашего плагина, вы знаете, что этот [плагин уже существует?] (Http://maven.apache.org/plugins/maven-remote-resources-plugin/examples/sharing-resources.html). Может быть, я что-то недооцениваю, но я не уверен, что именно ваша проблема? Потому что вы написали «Было бы разумнее, если бы библиотека узнала, что последний шаг ее установки - запустить плагин», но о какой библиотеке вы говорите. Может быть, вы можете уточнить это немного больше. – khmarbaise

+0

Спасибо @khmarbaise. Мы нашли плагин maven «unpack», но не «удаленные ресурсы», с которыми вы связались. Судя по структуре параметров, я бы сказал, что они оба делают схожие вещи: копировать файлы из зависимости в ваш проект. Однако нам нужно больше контролировать файлы: нам нужно переименовать их и удалить их в определенных местах. – aarondev

+0

@khmarbaise: Чтобы рассказать об этом последнем бите: вместо добавления в проект плагина к плагину мы хотели бы добавить его к самой зависимости. Мы надеемся, что это означает, что плагин запускается везде, где установлена ​​зависимость, без проекта, который должен знать о плагине или как его вызвать. – aarondev

ответ

0

две точки:.

Сначала я согласен с khmarbaise в том, что вам не нужен плагин свой собственный для этих задач. Для распаковки в определенном месте вы можете использовать dependency:unpack-dependencies и параметр outputDirectory. Если вам нужна дополнительная настройка, вы можете использовать плагин сборки для структурирования вашего артефакта (который вы хотите распаковать).

Для второго пункта мне кажется, что вы хотите использовать содержимое своих шаблонов lib-with-templates во многих проектах. Почему бы вам не добавить плагин и зависимость к родительскому pom, который вы включили в каждую помесь, где вам это нужно? Тогда вам не нужно объявлять его в «каждой помпе». Если вам это действительно не нужно в каждом помпе, вы можете поместить его в профиль и выбрать правильную активацию для него.

HTH!