mvaven -package 经历这么几个过程
maven-resources-plugin:3.1.0:resources
maven-compiler-plugin:3.8.1:compile
maven-resources-plugin:3.1.0:testResources
maven-compiler-plugin:3.8.1:testCompile
maven-surefire-plugin:2.22.2:test
maven-jar-plugin:3.1.2:jar 没有lib包 没有主类
spring-boot-maven-plugin:2.1.9.RELEASE:repackage 需要配置 上面都是默认的
<?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>
<parent>
<!-- 也可以写自己定义的父pom统一规范 在父pom 可以用 <dependencyManagement>只声明版本 公共插件也可以写在父pom里-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<name>demo</name>
<version>1.0-SNAPSHOT</version>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.3.0.Final</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.name}</finalName>
<resources>
<!-- 下同理不会打包xml文件-->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*</include>
</includes>
</resource>
<!-- 如果不写这个 他不会打包 该目录下的xml文件** 代表任意目录 *任意文件 比如mybatis文件-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<!--值得一提的是这个插件从上往下执行-->
<!-- 不写这个的话 生产的包不是可执行包 没有主清单属性 也不会把lib打入进去 写这个他会生成一个jar包带lib的 和一个original只有class文件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version> 2.1.9.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!--打包源码-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<!-- 主要原因在于mapstruct 必须配合 lombok可以不要下面这个 但是mapstruct必须有-->
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.0.Final</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<!-- dockerfile-maven-plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.9</version>
<executions>
<execution>
<id>default</id>
<goals>
<!-- 先build在push-->
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 跳过整个docker插件 默认false-->
<skip>false</skip>
<!-- 可以配下仓库可以push上去 然后需要在maven用户名密码-->
<!-- <useMavenSettingsForAuth>true</useMavenSettingsForAuth>-->
<!-- <docker.repostory>hub-tx.keji.com/saas</docker.repostory><!–hub-saas.dianzhenkeji.com/saas–>-->
<repository>com.naylor/${project.artifactId}</repository>
<tag>${project.version}</tag>
<!-- 这个参数dockerfile要用-->
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<buildDirectory>${session.executionRootDirectory}/target/</buildDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
#alpine优势小
FROM java:8-jre-alpine
#这个所有的镜像和装包从阿里云下载
RUN echo "http://mirrors.aliyun.com/alpine/v3.8/main" > /etc/apk/repositories \
&& echo "http://mirrors.aliyun.com/alpine/v3.8/community" >> /etc/apk/repositories \
#update更新索引 upgrade升级 安装包 apk info 可以查看安装包
&& apk update upgrade \
#procps 可以用ps kill w(显示当前登录用户)等命令 curl 百度 bash wc统计行数 bashname 文件名称
#其实本身自带有我觉得不必要 只是不全 tzdata 要配合后两行用 主要就是当前时间 否则时间不准
&& apk add --no-cache procps curl bash tzdata \
#这个其实就是调用excel特殊字体 本地的jdk有这些代码 但是openjdkexit没有 所以就弄上l
&& apk add font-adobe-100dpi ttf-dejavu fontconfig \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
#没有啥用 就是标识下
EXPOSE 8080
#增加个参数 pom文件定义有
ARG JAR_FILE
#把本地jar放到容器里 其实用copy就行 这样ADD优势可以解压tar 可以写网址
ADD target/${JAR_FILE} /app.jar
#docker run 执行的命令 bash -c 其实 默认隐藏带有的 这样把显式弄出来 就可以把命令都写到后面
ENTRYPOINT ["bash","-c","java -jar /app.jar"]
#docker run -d --name=es7 \
#-p 9200:9200 -p 9300:9300 \
#-e "discovery.type=single-node" elasticsearch:7.5.1
#restart docker重启时 自动重启
# docker run --name oap --restart always -d --restart=always -e TZ=Asia/Shanghai -p 12800:12800 -p 11800:11800 --link es7:es7 -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=es7:9200 apache/skywalking-oap-server:6.6.0-es7
#
#docker run -d --name skywalking-ui --restart=always -e TZ=Asia/Shanghai
#-p 8088:8080 --link oap:oap -e SW_OAP_ADDRESS=oap:12800 apache/skywalking-ui:6.6.0
#如果是rancher需要挂载一个盘
#java -javaagent:D:\devSoft\apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\agent\skywalking-agent.jar=agent.service_name=demo123,collectorbackend_service=127.0.0.1:11800 -jar demo123.jar