繁体   English   中英

在不同阶段运行 maven-shade 和 dockerfile-maven

[英]Running maven-shade and dockerfile-maven in different phases

我的应用程序使用maven-shade-plugin将东西打包到单个fatjar ,然后我想使用dockerfile-maven-plugin构建一个docker映像,我的问题是我可以正确设置 pom 文件以便它可以工作。 会发生什么是docker插件在创建jar文件之前运行...

我试图强制在prepare-package上创建jar并在package上构建docker映像,但它没有按预期工作......有什么想法吗?

编辑:添加了 pom 片段

<build>
    <plugins>
      <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <version>${dockerfile-maven.version}</version>
        <configuration>
          <repository>test-docker-image</repository>
          <tag>${docker.tag}</tag>
          <buildArgs>
            <JAR_FILE>${project.artifactId}-${project.version}-fat.jar</JAR_FILE>
            <CONFIGURATION_FILE>configuration.json</CONFIGURATION_FILE>
          </buildArgs>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>build</goal>
              <!-- <goal>push</goal> -->
            </goals>
            <phase>install</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>${maven.shade.plugin.version}</version>
        <executions>
          <execution>
            <goals>
              <goal>shade</goal>
            </goals>
            <phase>package</phase>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <manifestEntries>
                    <Main-Class>io.vertx.core.Launcher</Main-Class>
                    <Main-Verticle>MyVerticle</Main-Verticle>
                  </manifestEntries>
                </transformer>
              </transformers>
              <minimizeJar>false</minimizeJar>
              <outputFile>${project.build.directory}/deploy/${project.artifactId}-${project.version}-fat.jar</outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

我以与您相同的顺序列出了这两个相同的插件( docker-maven-pluginmaven-shade-plugin之前)并且看到了同样的问题。 我发现 Maven 按照它们列出的顺序在同一阶段执行插件,因此移动maven-shade-plugin以首先在本地为我解决问题。 (旧版本的 Maven 不会以这种方式订购插件,因此请尽可能使用最新版本。)

这并不能解释为什么当您将它们更改为使用不同的阶段时它对您不起作用,但我建议至少尝试重新排序。 还要确保您使用的是相关插件的最新版本,例如maven-release-plugin

由于我的项目的父项目包含docker-maven-plugin的执行,在完成上述所有操作后,我仍然在我的构建环境中看到了不良行为; 我在自己的项目中对其进行自定义和重新排序这一事实并没有帮助,尽管尚不清楚它为什么在本地工作。 Maven 构建配置文件也可以对排序产生类似的影响。 我的解决方案是将docker-maven-plugin:build执行绑定到install阶段。

mvn help:effective-pom的输出应该让您看到插件、执行和配置文件的确切列表,以便您可以准确地看到您的项目的排序。 请注意,配置文件是自下而上执行的,这与插件相反!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM