使用 Maven 插件自动将打好的包复制到指定目录

需求

Maven 默认打好的 Jar 或 War 包放在项目的 target 目录下。现需要在 Maven 的 dockerfile-maven-plugin 插件的上下文目录 docker-context 下使用这个包,即配置 Maven 插件,让 Maven 在 package 阶段完成时,自动将包文件复制到 docker-context 目录下。

实现

借助 maven-antrun-plugin 插件实现 clean 阶段自动删除,package 阶段自动复制的功能:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <!-- version 从父 POM 继承 -->
    <!-- <version>1.8</version> -->
    <executions>
        <execution>
            <!-- 保证 id 唯一即可 -->
            <id>delete</id>
            <!-- 指定在 Maven 的 clean 阶段执行 -->
            <phase>clean</phase>
            <configuration>
                <target>
                    <!-- 删除复制的包 http://ant.apache.org/manual-1.9.x/Tasks/delete.html -->
                    <delete file="docker-context/app.${project.packaging}"/>
                </target>
            </configuration>
            <goals>
                <!-- 执行上述 target 标签配置的命令 -->
                <goal>run</goal>
            </goals>
        </execution>
        <execution>
            <id>copy</id>
            <!-- 指定在 Maven 的 package 阶段执行 -->
            <phase>package</phase>
            <configuration>
                <target>
                    <!-- 复制生成的包到指定目录 http://ant.apache.org/manual-1.9.x/Tasks/copy.html -->
                    <copy file="target/${project.build.finalName}.${project.packaging}" tofile="docker-context/app.${project.packaging}"/>
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

推荐阅读更多精彩内容