0

我创建了一个 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.xml 中会更有意义。<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 只是完全在做其他事情?

(注意:groupId/version/artifactIds<configuration>是必需的,因为它们是插件的(字符串)参数;大概如果我让 run-straight-from-dependency 方法工作,我可以将它们重构掉,但同样,它甚至没有运行带有参数的笨拙版本。)

4

1 回答 1

0

两点:

首先,我同意 khmarbaise 的观点,因为您不需要自己的插件来完成这些任务。要解压到特定位置,您可以使用dependency:unpack-dependencies和 outputDirectory 参数。如果您需要更多配置,您可以使用程序集插件来构建您的工件(您想要解包)。

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

于 2013-06-05T08:57:07.837 回答