簡體   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