[英]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.