在父pom构build的最后端运行docker-maven-plugin

我正在尝试构build包含构build父POM文件期间构build的一组.jar文件的docker映像。 直到现在我发现的情况是,特定模块的单个构build创build单独的泊坞窗图像。

我的docker形象包含卡拉夫部署捆绑。 在某个时候,我实现了创builddocker工人,但是当一切都build立起来的时候。 恐怕docker-maven-plugin可能不支持我想从bundle的特定文件夹(每个子项目正在将其捆绑包部署到特定文件夹)创builddocker镜像的情况。

现在我发现,父POM包types只支持三个阶段,但无论如何 – 所有这些都是在构build期间作为第一个项目运行。 所以问题是:

是否有可能创builddocker图像

  • 包含在构build父POM项目期间构build的部署到一个文件夹的所有包
  • 运行一些家长POM目标后自动运行

母体POM的某些部分最终可能与我的需求无关

<build> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <inherited>false</inherited> <version>0.4.10</version> <configuration> <imageName>test1</imageName> <dockerDirectory>../karaf-deploy</dockerDirectory> <resources> <resource> <targetPath>../karaf-deploy/</targetPath> <directory>../karaf-deploy/</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build> 

孩子 – 父母关系只是一种特殊的依赖forms,孩子依赖父母。 因此,父母总是先在任何孩子之前build立。 这也意味着你不能在依赖于孩子的父母身上build立任何东西,因为取决于孩子的父母基本上是循环依赖。

所以如果你只想捆绑一个工件,你可以在这个工程的生命周期中添加docker插件。 但是如果你想捆绑多个工件,你应该遵循@khmarbaise的build议:

  1. 定义一个新的独立分销项目(甚至可以是pom包装或使用特殊扩展)
  2. 将分发项目添加为现有父级的子模块
  3. 在您要捆绑/包装/包含的任何工件上添加普通的Maven依赖关系
  4. 定义prepare-package阶段的复制依赖性步骤以复制依赖项以构build目录
  5. 定义package阶段的docker-maven-plugin设置以捆绑复制的依赖项

如果您的分发插件可以直接从Maven中select依赖关系,请跳过步骤4。 我们使用的是io.fabric8 docker-maven-plugin ,您可以在其中定义汇编式描述符,例如:

 <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> <id>all-artifacts</id> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <useProjectArtifact>true</useProjectArtifact> </dependencySet> </dependencySets> </assembly>