JAVA项目使用maven插件和docker实现自动打包部署运行

此文章使用maven的打包插件maven-assembly-plugin以及docker的打包功能,实现自动打包部署并运行的功能。

其中使用到的工具如下:

  • maven 系统安装并配置完成maven
  • intellij idea 确认安装docker插件并配置好docker连接,确认安装maven插件,并配置好相关配置
  • docker 使用服务器安装docker服务,非windows

工程搭建

创建工程如下图所示:

java 程序自动打包 java自动打包部署_docker

创建工程为maven工程,工程主结构包括:

  • assembly文件夹: 包含assembly.xml配置文件,其中包含打包的配置文件
  • bin文件夹:包含启动运行脚本,start.sh脚本请自行搜索
  • java目录:包含java代码

pom文件配置

<dependencies>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-client</artifactId>
            <version>4.0.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution><!-- 配置执行器 -->
                        <id>make-assembly</id>
                        <phase>package</phase><!-- 绑定到package生命周期阶段上 -->
                        <goals>
                            <goal>single</goal><!-- 只运行一次 -->
                        </goals>
                        <configuration>
                            <finalName>${project.name}</finalName>
                            <descriptor>src/main/assembly/assembly.xml</descriptor><!--配置描述文件路径-->
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

添加了一个curator的包用做测试,主要打包配置在中,打包后的文件名为**${project.name},配置文件路径为src/main/assembly/assembly.xml**。

打包配置文件

<assembly>
    <id></id>
    <formats>
        <format>tar.gz</format><!--打包的文件格式,也可以有:war zip-->
    </formats>
    <!--tar.gz压缩包下是否生成和项目名相同的根目录-->
    <includeBaseDirectory>true</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <!--是否把本项目添加到依赖文件夹下-->
            <useProjectArtifact>false</useProjectArtifact>
            <outputDirectory>lib</outputDirectory>
            <!--将scope为runtime的依赖包打包-->
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>src/main/bin</directory>
            <outputDirectory>/</outputDirectory>
            <!-- 将start.sh脚本放在打包后的根目录下-->
        </fileSet>
        <fileSet>
            <directory>target/classes</directory>
            <outputDirectory>classes</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

配置文件如上图所示,注意将start.sh脚本放在打包后的根目录下。

打包结果展示

运行mvn clean package查看打包结果

java 程序自动打包 java自动打包部署_maven_02


如上图所示,在target文件夹中打包出.tar.gz包,打开压缩包结构:

java 程序自动打包 java自动打包部署_maven插件_03

通过docker远程部署

如何在intellij idea中配置docker并使用tls连接的方法,将在另外的文章中详述,这里假设docker相关配置都已配置完成并测试连接正常。

编写docker文件如下:

FROM ***

MAINTAINER dreamxiaohai dreamxiaohai@gmail.com

RUN apt-get update && apt-get install openjdk-8-jre -y

ADD target/testPackageAndDocker.tar.gz /usr/local/

RUN chmod +x /usr/local/testPackageAndDocker/start.sh

WORKDIR /usr/local/testPackageAndDocker/

CMD ./start.sh start && tail -f /tmp/result.log

配置intellij idea运行命令

java 程序自动打包 java自动打包部署_maven插件_04


配置完成后,点击运行,可看到以下结果,证明远程运行无误

java 程序自动打包 java自动打包部署_intellij idea_05