maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全过程 动态配置、日志记录配置...

springBoot打包的时候代码和jar包打包在同一个jar包里面,会导致jar包非常庞大,在不能连接内网的时候调试代码,每次只改动了java代码就需要把所有的jar包一起上传,导致传输文件浪费了很多时间,所以如果打包的时候只把写成的代码打包,已经上传服务器的jar包不用修改,这样每次上传文件将会大大节省时间,接下来描述一下单独打jar包的过程。

1、瘦身插件

更改springBoot打jar包的插件即可改为一下格式:

                             org.springframework.boot                spring-boot-maven-plugin                                    ZIP                                                                        non-exists                            non-exists                                                                                                                                                    repackage                                                                            classes                            false                                                                        

如图:

c5c2536cdd6d76a7b6cd741b6351c33d.png

2、生成lib目录

2、那么导入的jar包又在哪里呢?没关系,我们还有另一个插件。如下:

                   org.apache.maven.plugins                maven-dependency-plugin                                                            copy-dependencies                        package                                                    copy-dependencies                                                                            target/lib                            false                            false                            runtime                                                                        

当你打包的时候自动去生成,如下:

79b028df35376f095c51c23041e1f10e.png

jar包:

3c5f75668a31bfd0d5966ba2c28d258d.png

这样,就可以把项目中使用到的所有jar包提取出来。

3、配置文件的剔除

项目在大jar包的时候也会把配置文件和页面一起打包,导致每次都要替换或者更改配置文件,导致非常繁琐。

我们可以在打包插件中指定不用打包的内容,如下:

                             org.apache.maven.plugins                maven-jar-plugin                                                                                **/*.properties                        **/*.xml                        **/*.yml                        static/**                        templates/**                        **/*.xlsx                                                

4、映射配置文件目录

Spring Boot 加载配置文件的方式以及步骤

 springboot 默认加载配置文件有三个位置1、a 加载第二个是 通jar包同级 config目录 下的 一系列配置文件 xxx.yaml2、b 加载第一个是 同jar包同级的 一系列配置文件xxx.yaml3、c 加载第三个是 自身jar包的 配置文件。加载顺序 为:a b c

测试实例 :

 a: server.port = 8082b: server.port = 8081c: server.port = 8080

620bae6ab5321a3209a20df73a5b1850.png

结果如下:

68cfc361c3cf289187548c1c06ca7366.png

5、完整pom

             web-discovery-test                                    org.springframework.boot                spring-boot-maven-plugin                                    ZIP                                                                        non-exists                            non-exists                                                                                                                                                    repackage                                                                            classes                            false                                                                                                    org.apache.maven.plugins                maven-dependency-plugin                                                            copy-dependencies                        package                                                    copy-dependencies                                                                            target/lib                            false                            false                            runtime                                                                                                    org.apache.maven.plugins                maven-jar-plugin                                                                                **/*.properties                        **/*.xml                        **/*.yml                        static/**                        templates/**                        **/*.xlsx                                                            

6、启动命令

 java -jar -Dloader.path=lib -jar web-discovery-test.jar    java -Dloader.path=lib -jar *.jar

7、制作镜像

制作镜像步骤

1、Dockerfile 文件

 ## java:8-alpine(145) java8:latest (500m)FROM java:8-alpine# 维者信息MAINTAINER fageRUN mkdir -p /work /work/config /work/libs /work/logs /work/fileEXPOSE  8080ADD  empty.jar  /work/web-discovery-test.jar  WORKDIR   /workCMD ["java","-Dloader.path=/work/libs","-jar","/work/web-discovery-test.jar"]

2、提供相对应的文件

比如:empty.jar

运行命令

 docker run -d -p 8080:8080 --name web-discovery-test -v /fage/web-discovery-test/web-discovery-test.jar://work/web-discovery-test.jar -v /fage/web-discovery-test/logs:/work/logs -v /fage/web-discovery-test/libs:/work/libs -v /fage/web-discovery-test/file:/work/file -v /fage/web-discovery-test/config:/work/config web-discovery-test:v2

3、命令构建

 docker build -t 镜像名:版本号标签 .## 实例:docker build -t web-discovery-test:v1 .
 [root@localhost docker]#[root@localhost docker]# docker build -t web-discovery-test:v2 .Sending build context to Docker daemon   2.56kBStep 1/6 : FROM java:8-alpine8-alpine: Pulling from library/java709515475419: Pull complete38a1c0aaa6fd: Pull complete5b58c996e33e: Pull completeDigest: sha256:d49bf8c44670834d3dade17f8b84d709e7db47f1887f671a0e098bafa9bae49fStatus: Downloaded newer image for java:8-alpine ---> 3fd9dd82815cStep 2/6 : RUN mkdir -p /work /work/config /work/libs /work/logs /work/file ---> Running in 4833f98cc891Removing intermediate container 4833f98cc891 ---> 8398b01d5158Step 3/6 : EXPOSE  8080 ---> Running in 6b43e5e32ef7Removing intermediate container 6b43e5e32ef7 ---> 5bde587635f3Step 4/6 : ADD  empty.jar  /work/web-discovery-test.jar ---> beed469c2bfeStep 5/6 : WORKDIR   /work ---> Running in d953acaefdc0Removing intermediate container d953acaefdc0 ---> 801c71d84e45Step 6/6 : CMD ["java","-Dloader.path=/work/libs","-jar","/work/web-discovery-test.jar"] ---> Running in af7a7d89f55bRemoving intermediate container af7a7d89f55b ---> 2f03a2dfcb94Successfully built 2f03a2dfcb94Successfully tagged web-discovery-test:v2[root@localhost docker]#[root@localhost docker]# docker imagesREPOSITORY                                             TAG                 IMAGE ID            CREATED             SIZEweb-discovery-test                                     v2                  2f03a2dfcb94        4 seconds ago       145MB

4、其他命令

##进入容器
docker exec -it 容器名 /bin/bash 
##查询 xx 相关的镜像
docker search xx
##下载镜像到本地
docker pull 镜像名 (可定义名称 xx:xx)
##查看本地镜像
docker images
##查看正在运行镜像
docker ps (-a 所有启动过的,包括不运行的)
##将容器制作成镜像(内部自定义了一些配置等)
docker commit -m '镜像描述' -a '制作者' 容器名 镜像名
##将制作好的镜像打成 tar 包
docker save -o tar包的名字 镜像名
##怎么使用 tar 包
docker load < tar 包所在路径

5、RUN vs CMD vs ENTRYPOINT区别

  • RUN:执行命令并创建新的镜像层;

  • CMD:设置容器启动后默认执行的命令即参数,但cmd能被docker run后面的命令行参数替换;

  • ENTRYPOINT:配置容器启动时运行的命令。

ENTRYPOINT的Exec格式用于设置要执行的命令及其参数,同时可以通过CMD提供额外的参数。ENTRYPOINT中的参数始终会被用到,而CMD的额外参数可以再容器启动时动态替换。

ENTRYPOINT指令可以让容器以应用程序或者服务的形式运行。和CMD不同的是,ENTRYPOINT不会被忽略,一定会被执行,即使运行docker run时指定了其他命令。

修改镜像名称

[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pujh/centos tomcat-centos 70ff7873d7cd About an hour ago 612 MB
docker.io/centos latest 9f38484d220f 11 days ago 202 MB
[root@localhost ~]# docker tag 70ff7873d7cd my_centos:tomcat-centos
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_centos tomcat-centos 70ff7873d7cd About an hour ago 612 MB
pujh/centos tomcat-centos 70ff7873d7cd About an hour ago 612 MB
docker.io/centos latest 9f38484d220f 11 days ago 202 MB
[root@localhost ~]# docker rmi 70ff7873d7cd
Error response from daemon: conflict: unable to delete 70ff7873d7cd (cannot be forced) - image is being used by running container 70859e710147
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
70859e710147 70ff "/bin/sh -c '/root..." About an hour ago Up About an hour 0.0.0.0:8090->8080/tcp dazzling_hopper
[root@localhost ~]# docker stop 70859e710147
[root@localhost ~]# docker rm 70859e710147
[root@localhost ~]# docker rmi 70ff7873d7cd
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_centos tomcat-centos 70ff7873d7cd About an hour ago 612 MB
docker.io/centos latest 9f38484d220f 11 days ago 202 MB
### IMAGE ID 一样,无法删除
[root@localhost /]# docker rmi 00bc163fa009
Error response from daemon: conflict: unable to delete 00bc163fa009 (must be forced) - image is referenced in multiple repositories
[root@localhost /]# docker rmi williamyeh/java8:latest
Untagged: williamyeh/java8:latest
Untagged: williamyeh/java8@sha256:174d528516a0eae5c4df69966eeb5e51d7c0dc1a532249af61013953eab1d9f3

8、Spring Boot日志

Spring Boot 默认使用logback日志。

1、使用动态配置

开发与生产配置隔离,分开配置

application.properties

 ## 开发环境 dev /生产环境 productspring.profiles.active=dev

application-dev.yaml

 ## 日志配置 配置绝对路径,不要使用相对路径logging:  file:    path: D:\logs\dev## 其他配置    server:  port: 8084

application-product.yaml

 ## 日志配置 配置绝对路径,不要使用相对路径logging:  file:    path: D:\logs\product## 其他配置    server:  port: 80

2、logback配置

logback-spring.xml配置

一定要加 -spring ,表示在spring配置被加载之后才执行,当前的logback配置,

                         converter/>                    converter/>              value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>              value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>System.outdebug${CONSOLE_LOG_PATTERN}UTF-8${FILE_LOG_PATTERN}UTF-8${logPath}/debug/log-debug-%d{yyyy-MM-dd}.%i.log100MB15debug${FILE_LOG_PATTERN}UTF-8${logPath}/info/log-info-%d{yyyy-MM-dd}.%i.log100MB15infoACCEPTDENY${FILE_LOG_PATTERN}UTF-8${logPath}/error/log-error-%d{yyyy-MM-dd}.%i.log100MB15ERROR

9、Linux 删除目录的命令

-r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思

删除文件夹实例:
rm -rf /var/log/httpd/access
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
删除文件使用实例:
rm -f /var/log/httpd/access.log
将会强制删除/var/log/httpd/access.log这个文件

10、实战测试

1、项目结构

f9ef7270ad348ff60beb40cf954d007b.png

2、服务器结构

ef688a6d007d5e7752196122f3a2c680.png

3、镜像

 docker build -t web-discovery-test:v1 .

68cfc361c3cf289187548c1c06ca7366.png

可以发现,这个jar是非常的小

4、执行结果

运行命令

 docker run -d -p 8080:8080 --name web-discovery-test -v /fage/web-discovery-test/web-discovery-test.jar://work/web-discovery-test.jar -v /fage/web-discovery-test/logs:/work/logs -v /fage/web-discovery-test/libs:/work/libs -v /fage/web-discovery-test/file:/work/file -v /fage/web-discovery-test/config:/work/config web-discovery-test:v2

运行结果查看

d9c074f6484d973bcf1c7dd5a044379c.png

日志打印

 [root@localhost docker]# docker logs -f b2b3eaee4b81  .   ____          _            __ _ _ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  '  |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::        (v2.3.2.RELEASE)2020-08-06 14:14:17.080  INFO 1 --- [           main] com.fage.demo.DemoApplication            : Starting DemoApplication v0.0.1-SNAPSHOT on b2b3eaee4b81 with PID 1 (/work/web-discovery-test.jar started by root in /work)2020-08-06 14:14:17.084  INFO 1 --- [           main] com.fage.demo.DemoApplication            : The following profiles are active: product2020-08-06 14:14:18.863  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)2020-08-06 14:14:18.880  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]2020-08-06 14:14:18.892  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.37]2020-08-06 14:14:19.026  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext2020-08-06 14:14:19.026  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1835 ms2020-08-06 14:14:19.892  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'2020-08-06 14:14:20.374  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''2020-08-06 14:14:20.403  INFO 1 --- [           main] com.fage.demo.DemoApplication            : Started DemoApplication in 4.073 seconds (JVM running for 4.615)2020-08-06 14:15:04.855  INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'2020-08-06 14:15:04.855  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'2020-08-06 14:15:04.871  INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 16 ms2020-08-06 14:15:04.928  INFO 1 --- [nio-8080-exec-1] com.fage.demo.DemoApplication            : file.isDirectory() = true2020-08-06 14:15:35.456  INFO 1 --- [nio-8080-exec-4] com.fage.demo.DemoApplication            : hello world2020-08-06 14:15:35.457 ERROR 1 --- [nio-8080-exec-4] com.fage.demo.DemoApplication            : error2020-08-06 14:16:12.006  INFO 1 --- [nio-8080-exec-6] com.fage.demo.DemoApplication            : hello world2020-08-06 14:16:12.012 ERROR 1 --- [nio-8080-exec-6] com.fage.demo.DemoApplication            : error2020-08-06 14:16:15.305  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : file.isDirectory() = true2020-08-06 14:16:15.306  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : 文件夹: /work/file/mk2020-08-06 14:16:15.306  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : 文件: /work/file/aaa

验证 是否映射成功?调用接口:http://192.168.71.134:8080/files和http://192.168.71.134:8080/hello

d2d9aa8cc6bff36266badccb4359406d.png

日志打印:

 2020-08-06 14:16:15.305  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : file.isDirectory() = true2020-08-06 14:16:15.306  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : 文件夹: /work/file/mk2020-08-06 14:16:15.306  INFO 1 --- [nio-8080-exec-7] com.fage.demo.DemoApplication            : 文件: /work/file/aaa

代码分享

微信公众号 点击关于我,加入QQ群,即可获取到代码

a11de481c1630765149c78885762c317.png

<think>好的,我现在需要回答用户关于Spring Boot Maven插件中类似<minimizeJar>true</minimizeJar>的配置的问题。首先,我得确认用户提到的minimizeJar配置是否存在,因为在我的知识库中,Spring Boot Maven插件的常用配置里并没有这个选项。可能是用户记错了名称,或者混淆了其他插件或构建工具的功能。 接下来,我应该回忆一下Spring Boot Maven插件的主要功能,比如打包执行JAR、自动处理依赖版本、构建Docker镜像等。然后,常见的配置参数有哪些呢?例如,mainClass用于指定主类,layout设置打包类型,excludeDevtools排除开发工具,classifier指定分类器等。用户提到的minimizeJar听起来像是减少JAR大小的功能,但Spring Boot Maven插件本身是否支持这个呢? 可能的替代配置Spring Boot 2.3引入的layered参数,用于分层打包,优化Docker镜像构建。另外,用户可能想通过排除不必要的依赖来缩小JAR,这时候可以使用excludes配置。或者,用户可能混淆了其他工具如Maven Shade插件或Spring Boot瘦身JAR功能。瘦身JAR需要将依赖分离到lib目录,并通过配置spring-boot-maven-plugin配置项来实现。 此外,可能需要使用Maven的依赖排除机制,或者在构建时使用ProGuard等工具进行代码混淆和优化。这些虽然不是Spring Boot Maven插件的直接配置,但结合起来可以达到减小JAR体积的效果。 需要验证这些信息是否正确,比如检查官方文档中的插件配置选项,确认是否有minimizeJar参数。如果确实没有,那么应该向用户说明,并提供可能的替代方案。同时,提醒用户注意依赖排除可能带来的运行时问题,建议进行充分测试。 最后,整理回答的结构,先指出minimizeJar配置不存在,然后介绍相关的配置选项,如分层打包排除依赖、瘦身JAR配置等,并给出示例代码,帮助用户理解如何应用这些配置。确保回答清晰,步骤明确,用户能够根据指导进行操作。</think>关于`spring-boot-maven-plugin`插件,实际上官方文档中并没有名为`<minimizeJar>true</minimizeJar>`的配置项。您可能混淆了类似功能,以下是几个Spring Boot Maven插件中用于优化JAR的实用配置--- ### 1. 分层打包 (Layered JAR) - **Spring Boot 2.3+** 通过分层技术将依赖分类打包,优化Docker镜像构建: ```xml <configuration> <layers> <enabled>true</enabled> </layers> </configuration> ``` --- ### 2. 排除开发工具依赖 缩小生产环境JAR体积: ```xml <configuration> <excludeDevtools>true</excludeDevtools> </configuration> ``` --- ### 3. 瘦身JAR配置 将依赖外置到`/lib`目录,显著减少主JAR体积: ```xml <configuration> <layout>ZIP</layout> <includes> <include> <groupId>non-existent</groupId> <artifactId>empty</artifactId> </include> </includes> </configuration> ``` 需配合`maven-dependency-plugin`将依赖复制到`lib/`目录。 --- ### 4. 依赖排除 精简不需要的依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> </dependencies> ``` --- ### 5. 代码混淆工具 虽然不属于Maven插件配置,但推荐组合使用- **ProGuard**:代码优化和混淆 - **jlink** (JDK9+):创建最小化JRE --- ### 验证建议: 执行打包使用命令分析JAR内容: ```bash # 查看JAR结构 jar tvf target/your-app.jar # 分析依赖树 mvn dependency:tree ``` > **注意**:依赖排除可能影响运行时功能,建议在测试环境充分验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值