繁体   English   中英

安装了Maven构件后可以运行Maven插件吗?

[英]Can I have maven artifact run maven plugin when it is installed?

我创建了一个Maven插件(称为unpackTemplates),该插件将依赖项jar文件解压缩,并将资源文件(在本例中为模板)从中复制到项目中的特定位置。

现在,我将以下内容放到每个具有模板依赖项的项目的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中会更有意义。 这样,除了像往常一样添加<dependency>标记外,无需修改项目pom。 依赖关系使其插件可以在任何安装位置运行。

我已经看到Gson的pom文件中包含一个<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 pom只是在完全做其他事情?

(注意: <configuration>中的groupId / version / artifactIds是必需的,因为它们是插件的(字符串)参数;想必如果我能运行从依赖直接运行的方法,我可以将其重构掉,但是再次)甚至没有运行带有参数的kludgy版本。)

两点:

首先,我同意khmarbaise,因为您不需要自己的插件即可执行这些任务。 要解压到特定位置,可以使用dependency:unpack-dependencies和outputDirectory参数。 如果需要更多配置,则可以使用Assembly插件来构造您的工件(要解压缩)。

对于第二点,在我看来,您想在许多项目中使用lib-with-templates的内容。 为什么不将插件和依赖项添加到您需要的每个pom中包含的父pom中呢? 然后,您无需在“每个pom”中声明它。 如果您并不是真的需要每个pom,都可以将其放在配置文件中并为其选择适当的激活方式。

HTH!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM