首页 > 解决方案 > Parent POM:跨子项目共享通用配置文件

问题描述

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

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

这是一个完整的例子。

示例maven-assembly-plugin

我的父 POM ( my-group-id:parent:1.0.0: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可以提供 a 的地方)。但至少,为maven-assembly-plugin特定案例找到解决方案会非常有帮助!

标签: mavenpom.xmlmaven-assembly-pluginparent-pom

解决方案


推荐阅读