我目前正在创建具有所有必要配置的父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
特定情况的解决方案确实会有所帮助!