我创建了一个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版本。)
答案 0 :(得分:0)
两点:
首先,我同意khmarbaise,因为你不需要自己的插件来执行这些任务。要解压缩到特定位置,您可以使用dependency:unpack-dependencies和outputDirectory参数。 如果您需要更多配置,可以使用程序集插件来构建工件(要解压缩)。
对于第二点,在我看来,您希望在许多项目中使用lib-with-templates的内容。为什么不将插件和依赖项添加到您需要的每个pom中包含的父pom?然后你不需要在“每个pom”中声明它。如果你不是真的需要它在每个pom中你可以把它放在一个配置文件中并为它选择一个适当的激活。
HTH!