2015-01-07 3 views
1

Кто-нибудь знает какой-либо плагин maven, который может вызывать другие плагины maven в общем виде? То, что я ищу, - это что-то вроде механизма прокси для планирования плагинов в определенном порядке.Плагин Maven для вызова плагинов Maven?

Ключ в том, что мне нужно перенести огромный проект наследия в maven, в котором есть много макросов муравей, которые должны выполняться в определенном порядке, но с maven невозможно вызвать один и тот же плагин дважды в одном и том же фазу с сохранением порядка выполнения, когда мне нужно перехватить два исполнения путем exectuion второго плагина.

Предположим следующее: у меня есть плагин A (native2ascii) и плагин B (заменитель). Теперь мой заказ выполнения должен быть A, B, A всего за одну фазу. Конечно, я могу написать это так, но эффективный pom будет выглядеть как A, A, B.

Так что было бы неплохо иметь «прокси-плагин» (P), который просто вызовет настроенные плагины. Таким образом, вы можете настроить P (A), P (B), P (A) на одной фазе, и эффективная pom сможет сохранить порядок выполнения.

Спасибо!


Я опробовал предложение Вима как в следующем, но оказалось, что выполнение Идентификаторы не оказывают никакого влияния на эффективную ПОМ. Два исполнения плагина-заменителя все еще объединены и выполняются перед плагином native2ascii.

Вот мой П:

<build> 
    <plugins> 
    <plugin> 
     <groupId>com.google.code.maven-replacer-plugin</groupId> 
     <artifactId>replacer</artifactId> 
     <version>1.5.3</version> 
     <executions> 
     <execution> 
      <id>step-1-replacer</id> 
      <phase>generate-sources</phase> 
      <goals> 
      <goal>replace</goal> 
      </goals> 
      <configuration> 
      <file>src/main/order-test/test.txt</file> 
      <outputFile>target/test-replaced-1.txt</outputFile> 
      <replacements> 
       <replacement> 
       <token>t</token> 
       <value>xyz</value> 
       </replacement> 
      </replacements> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>native2ascii-maven-plugin</artifactId> 
     <version>1.0-beta-1</version> 
     <executions> 
     <execution> 
      <id>step-2-native2ascii</id> 
      <phase>generate-sources</phase> 
      <goals> 
      <goal>native2ascii</goal> 
      </goals> 
      <configuration> 
      <workDir>target</workDir> 
      <includes> 
       <include>test-replaced-1.txt</include> 
      </includes> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <groupId>com.google.code.maven-replacer-plugin</groupId> 
     <artifactId>replacer</artifactId> 
     <version>1.5.3</version> 
     <executions> 
     <execution> 
      <id>step-3-replacer</id> 
      <phase>generate-sources</phase> 
      <goals> 
      <goal>replace</goal> 
      </goals> 
      <configuration> 
      <file>target/test-replaced-1.txt</file> 
      <outputFile>target/test-replaced-2.txt</outputFile> 
      <replacements> 
       <replacement> 
       <token>f6</token> 
       <value>-</value> 
       </replacement> 
       <replacement> 
       <token>e4</token> 
       <value>></value> 
       </replacement> 
      </replacements> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 

А вот как это выглядит в эффективном ПОМЕ (оба заменителей казнь выполняется до native2ascii исполнения):

<plugin> 
    <groupId>com.google.code.maven-replacer-plugin</groupId> 
    <artifactId>replacer</artifactId> 
    <version>1.5.3</version> 
    <executions> 
    <execution> 
     <id>step-1-replacer</id> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>replace</goal> 
     </goals> 
     <configuration> 
     <file>src/main/order-test/test.txt</file> 
     <outputFile>target/test-replaced-1.txt</outputFile> 
     <replacements> 
      <replacement> 
      <token>t</token> 
      <value>xyz</value> 
      </replacement> 
     </replacements> 
     </configuration> 
    </execution> 
    <execution> 
     <id>step-3-replacer</id> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>replace</goal> 
     </goals> 
     <configuration> 
     <file>target/test-replaced-1.txt</file> 
     <outputFile>target/test-replaced-2.txt</outputFile> 
     <replacements> 
      <replacement> 
      <token>f6</token> 
      <value>-</value> 
      </replacement> 
      <replacement> 
      <token>e4</token> 
      <value>></value> 
      </replacement> 
     </replacements> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>native2ascii-maven-plugin</artifactId> 
    <version>1.0-beta-1</version> 
    <executions> 
    <execution> 
     <id>step-2-native2ascii</id> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>native2ascii</goal> 
     </goals> 
     <configuration> 
     <workDir>target</workDir> 
     <includes> 
      <include>test-replaced-1.txt</include> 
     </includes> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

И вот выход здания:

... 
[INFO] --- replacer:1.5.3:replace (step-1-replacer) @ build-order-test --- 
[INFO] Replacement run on 1 file. 
[INFO] 
[INFO] --- replacer:1.5.3:replace (step-3-replacer) @ build-order-test --- 
[INFO] Replacement run on 1 file. 
[INFO] 
[INFO] --- native2ascii-maven-plugin:1.0-beta-1:native2ascii (step-2-native2ascii) @ build-order-test --- 
[INFO] Includes: [test-replaced-1.txt] 
[INFO] Excludes: [] 
[INFO] Processing /home/shillner/work/workspaces/dev/build-order-test/target/test-replaced-1.txt 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 

ответ

1

Взгляните на плагин mojo-executor, его можно использовать для вызова других плагинов - от pom.xml, а также программно.

Example:

 <plugin> 
      <groupId>org.twdata.maven</groupId> 
      <artifactId>mojo-executor-maven-plugin</artifactId> 
      <version>@[email protected]</version> 
      <executions> 
       <execution> 
        <phase>test</phase> 
        <goals> 
         <goal>execute-mojo</goal> 
        </goals> 
        <configuration> 
         <plugin> 
          <groupId>org.apache.maven.plugins</groupId> 
          <artifactId>maven-dependency-plugin</artifactId> 
          <version>2.0</version> 
         </plugin> 
         <goal>list</goal> 
         <configuration> 
         </configuration> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
+1

Именно то, что я искал! Большое спасибо! – shillner

-1

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

Пример:

<plugin> 
       <artifactId>maven-resources-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>step-0-copy-resources</id> 
         <goals> 
          <goal>resources</goal> 
         </goals> 
         <phase>package</phase> 
         <configuration> 
          <outputDirectory>${basedir}/target</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>step-1-build-assembly</id> 
         <goals> 
          <goal>single</goal> 
         </goals> 
         <phase>package</phase> 
         <configuration> 
          <descriptors> 
           <descriptor>${basedir}/src/main/assembly/descriptor.xml</descriptor> 
          </descriptors> 
          <!-- don't attach assembly to be installed --> 
          <attach>false</attach> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>groovy-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>step-2-build-installer</id> 
         <phase>package</phase> 
         <goals> 
          <goal>execute</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <source>${basedir}/BuildInstaller.groovy</source> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>build-helper-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>step-3-attach-artifacts</id> 
         <phase>package</phase> 
         <goals> 
          <goal>attach-artifact</goal> 
         </goals> 
         <configuration> 
          <artifacts> 
           <artifact> 
            <file>${basedir}/target/project-${project.version}.tar.gz</file> 
            <type>tar.gz</type> 
           </artifact> 
          </artifacts> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

Обратите внимание, как каждый начинается с "шаг-х" с й числом.

+0

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

+0

Это также будет работать. Просто определите 2 '' блоков, каждый с другим номером шага (например, шаг 1 и шаг 3), и используйте второй плагин. Шаг 2: –

+0

Хорошо, я дам ему попробовать завтра. – shillner

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