maven插件配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xhs</groupId>
<artifactId>iot</artifactId>
<version>1.0.0.Standard.RELEASE</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<env>dev</env>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<iot.version>1.0.0.Standard.RELEASE</iot.version>
<spring-boot.version>1.5.9.RELEASE</spring-boot.version>
<spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
<!--Lombok-->
<lombok.version>1.16.20</lombok.version>
<jjwt.version>0.9.0</jjwt.version>
<fastjson.version>1.2.46</fastjson.version>
<hutool.version>3.3.2</hutool.version>
<commons-io.version>2.6</commons-io.version>
<jasypt.version>1.18</jasypt.version>
<mybatis-plus.version>2.1.9</mybatis-plus.version>
<mybatisplus-spring-boot-starter.version>1.0.5</mybatisplus-spring-boot-starter.version>
<hibernate-validator.version>5.4.1.Final</hibernate-validator.version>
<swagger2.version>2.8.0</swagger2.version>
<fastdfs.version>0.2.0</fastdfs.version>
<ttl.version>2.2.0</ttl.version>
<sharding-jdbc-core-spring-boot-starter.version>2.0.1</sharding-jdbc-core-spring-boot-starter.version>
<velocity-engine-core.version>2.0</velocity-engine-core.version>
<qiniu.version>[7.2.0, 7.2.99]</qiniu.version>
<kaptcha.version>0.0.9</kaptcha.version>
<docker.maven.plugin.version>0.4.13</docker.maven.plugin.version>
<docker.repostory>192.168.31.70:5000</docker.repostory>
<docker.registry.name>iot</docker.registry.name>
<spring-boot-admin-server.version>1.5.6</spring-boot-admin-server.version>
<spring-boot-admin-server-ui.version>1.5.6</spring-boot-admin-server-ui.version>
<spring-boot-admin-server-ui-turbine.version>1.5.6</spring-boot-admin-server-ui-turbine.version>
<aliyun.oos.version>2.8.2</aliyun.oos.version>
</properties>
<!--公共依赖-->
<dependencies>
<!--注册中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!--配置中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--Lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!--测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<modules>
<module>iot-auth</module>
<module>iot-config</module>
<module>iot-common</module>
<module>iot-eureka</module>
<module>iot-gateway</module>
<module>iot-modules</module>
<module>iot-visual</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Brussels-SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun.oos.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<resources><!-- 使用@@站位符,输出Dockerfile至docker文件夹 -->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/docker</directory>
<filtering>true</filtering>
<includes>
<include>**/Dockerfile</include>
</includes>
<targetPath>../docker</targetPath>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>${java.version}</target>
<source>${java.version}</source>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.4</version>
<configuration>
<failOnNoGitDirectory>false</failOnNoGitDirectory>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
<injectAllReactorProjects>true</injectAllReactorProjects>
</configuration>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker.maven.plugin.version}</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>push-stander-image</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>${docker.repostory}/${docker.registry.name}/${env}/${project.artifactId}:${project.version}</imageName>
</configuration>
</execution>
<execution>
<id>push-git-tag-images</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>${docker.repostory}/${docker.registry.name}/${env}/${project.artifactId}:${git.commit.id.abbrev}</imageName>
</configuration>
</execution>
<execution>
<id>push-latest-image</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>${docker.repostory}/${docker.registry.name}/${env}/${project.artifactId}:latest</imageName>
</configuration>
</execution>
</executions>
<configuration>
<!-- 私有仓库配置,需要settings.xml文件配合serverId对应的服务地址 -->
<!--<serverId>docker-aliyun</serverId>-->
<registryUrl>${docker.repostory}</registryUrl>
<!--<forceTags>true</forceTags>-->
<!--install阶段也上传,否则只有deploy阶段上传-->
<pushImage>false</pushImage>
<dockerDirectory>${project.build.directory}/docker</dockerDirectory>
<imageName>
${docker.repostory}/${docker.registry.name}/${env}/${project.artifactId}:${project.version}
</imageName>
<imageTags>
<!--docker的tag为项目版本号、latest-->
<imageTag>${git.commit.id.abbrev}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<resources>
<rescource><!-- 将打包文件放入dockerDirectory指定的位置 -->
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<!--<include>${project.build.finalName}.jar</include>-->
<include>${project.artifactId}.jar</include>
<include>**/*.etc</include>
</rescource>
</resources>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<!--<repositories>-->
<!--<repository>-->
<!--<id>xhs</id>-->
<!--<name>xhs Nexus</name>-->
<!--<url>http://192.168.31.60:8081/nexus/content/groups/public/</url>-->
<!--</repository>-->
<!--</repositories>-->
<distributionManagement>
<repository>
<id>releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.31.60:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.31.60:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project>
子pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xhs.iot</groupId>
<artifactId>iot-auth</artifactId>
<version>1.0.0.Standard.RELEASE</version>
<packaging>jar</packaging>
<name>iot-auth</name>
<description>jwt 认证服务</description>
<parent>
<groupId>com.xhs</groupId>
<artifactId>iot</artifactId>
<version>1.0.0.Standard.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>com.xhs.iot</groupId>
<artifactId>iot-common</artifactId>
<version>${iot.version}</version>
</dependency>
<!--oauth2.0-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<!--freemarker-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!--MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--HikariCP连接池-->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<finalName>${project.name}</finalName>
</configuration>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Dockerfile定义
# Version 0.0.1
FROM 192.168.31.70:5000/iot/test/java
MAINTAINER CaoBin "346322003@qq.com"
#RUN
RUN sed -i 's/DEBUG/INFO/g' `find /app/pinpoint-agent -name log4j.xml`
# 环境变量
ENV JAVA_OPTS="\
-server \
-Xmx800m \
-Xms800m \
-Xss256k \
-XX:-UseGCOverheadLimit \
-XX:SurvivorRatio=8 \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-XX:+UseParallelGC \
-XX:ParallelGCThreads=4 \
-XX:+UseParallelOldGC \
-XX:+UseAdaptiveSizePolicy \
-XX:+PrintGCDetails \
-XX:+PrintTenuringDistribution \
-XX:+PrintGCTimeStamps \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/app/logs/jvm \
-Xloggc:/app/logs/jvm/gc.log \
-XX:+UseGCLogFileRotation \
-XX:NumberOfGCLogFiles=5 \
-XX:GCLogFileSize=10M "
ENV WORK_PATH /app
ENV APP_NAME @project.artifactId@.@project.packaging@
ENV APP_VERSION @project.version@
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#EXPOSE 8080
#USER
#USER user:group
#VOLUME
VOLUME ["/app", "/tmp/app"]
#ADD
#COPY
COPY $APP_NAME $WORK_PATH/
#LABEL
#STOPSIGNAL
#ARG
#ONBUILD
# WORKDIR
WORKDIR $WORK_PATH
# ENTRYPOINT
#ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=@env@","-javaagent:/app/pinpoint-agent/pinpoint-bootstrap-1.6.1.jar", "-Dpinpoint.agentId=@project.artifactId@", "-Dpinpoint.applicationName=@project.artifactId@"]
# CMD
#CMD ["-jar", "@project.artifactId@.@project.packaging@"]
#ENTRYPOINT java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=@env@ -javaagent:/app/pinpoint-agent/pinpoint-bootstrap-1.6.1.jar -Dpinpoint.agentId=@project.artifactId@ -Dpinpoint.applicationName=@project.artifactId@ -jar @project.artifactId@.@project.packaging@
ENTRYPOINT java $JAVA_OPTS -XX:OnOutOfMemoryError='kill -9 %p' -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=@env@ -jar @project.artifactId@.@project.packaging@