父POM:在子项目之间共享通用配置文件

时间:2018-09-15 09:27:21

标签: maven pom.xml maven-assembly-plugin parent-pom

我目前正在创建具有所有必要配置的父POM,作为我所有个人项目的基础。最终目标是仅通过继承父POM来拥有小的子项目(=很少配置)并更轻松地引导项目。

但是我遇到了需要外部文件进行配置的插件的问题(例如maven-assembly-plugin,在我的示例中如下所示)。我只想在所有子项目中共享一个外部文件(maven-assembly-plugin的描述符文件),而不要在我的所有子项目中重新定义相同的文件。

这是一个完整的例子。

带有maven-assembly-plugin

的示例

my-group-id:parent:1.0.0:pom定义配置的我的父POM(maven-assembly-plugin)如下:

<project>
  <groupId>my-group-id</groupId>
  <artifactId>parent</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>
  <build>
    <pluginManagement>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <execution>
            <id>create-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <descriptors>
                <descriptor>src/assembly/bin.xml</descriptor>
              </descriptors>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </pluginManagement>
  </build>
</project>

如果我希望所有子项目都具有在父项中定义的maven-assembly-plugin配置,则必须编写以下内容(子项目child1的示例):

<project>
  <parent>
    <groupId>my-group-id</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0</version>
  </parent>
  <artifactId>child1</artifactId>
  <version>0.0.1</version>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

但是,正如我在开始介绍时所说:使用这种配置,我必须为每个孩子在自己的项目中创建一个描述符文件(src/assembly/bin.xml)。

而且,事实证明,我所有的子项目都具有相同的bin.xml文件。我会为您保存内容,但对于信息而言,打包始终是.tar.gz存档,外部库放在lib文件夹中。

我只想继承父POM,而不必担心子项目中组装的方式。共享描述符文件(bin.xml)似乎是解决方案,但是我看不到如何在所有子项目中共享它。无论如何,我不想每个子项目都拥有bin.xml

这个问题可能会扩展,不仅会解决maven-assembly-plugin的配置,因为还有其他可通过外部文件配置的插件(例如,docker-maven-plugin可以在其中提供Dockerfile )。但是至少,找到针对maven-assembly-plugin特定情况的解决方案确实会有所帮助!

0 个答案:

没有答案