使用 maven-assembly-plugin 打包

现在有这样一个需求,在一个 java 项目的源码根目录下增加一个 Dockerfile 文件,先把项目打包成一个完整的压缩包 your-app-bin.zip(包含 bin、config、lib 等目录),再把压缩包 your-app-bin.zip 和 Dockerfile 文件一起打包成另一个压缩包 your-app-docker.zip(your-app-bin.zip 和 Dockerfile 文件平级)。

因项目使用 maven 管理,并使用 maven-assembly-plugin 打包。可以在项目 pom.xml 中 maven-assembly-plugin 的配置下增加第二个打包配置文件。

pom.xml 中 maven-assembly-plugin 插件配置

<!-- The configuration of maven-assembly-plugin -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4.1</version>
    <!-- The configuration of the plugin -->
    <configuration>
        <finalName>your-app</finalName>
        <!-- append assembly id in release file name -->
        <appendAssemblyId>true</appendAssemblyId>
        <!-- Specifies the configuration file of the assembly plugin -->
        <descriptors>
            <descriptor>src/main/assembly/bin.xml</descriptor>
            <descriptor>src/main/assembly/docker.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

bin.xml 内容

常规编写即可,没什么特殊要求。

docker.xml 示例

<assembly>
	<id>docker</id>
	<formats>
		<format>zip</format>
	</formats>
	<dependencySets>
	</dependencySets>
	<fileSets>
		<fileSet>
			<directory>${project.basedir}/target</directory>
			<outputDirectory>.</outputDirectory>
			<includes>
				<include>*.zip</include>
			</includes>
		</fileSet>

		<fileSet>
			<directory>${project.basedir}</directory>
			<outputDirectory>.</outputDirectory>
			<includes>
				<include>Dockerfile</include>
			</includes>
		</fileSet>
	</fileSets>
</assembly>

参考资料