打包多模块maven项目优化

前言

使用下面的命令编译我们公司的后端项目,编译时长达到了1个多小时,这要是上线,不得把人急死,得优化一下,查询了一些资料,结论如下。

# 原始的命令
mvn clean package -Dmaven.test.skip=true
# 优化后的命令, 把$moduleName使用相对路径的pom文件,多个文件用英文逗号分开,进行编译
mvn clean package -T 32 -Dmaven.test.skip=true -am -pl $moduleName

后端代码编译

流水线中代码编译慢解决
在这里插入图片描述

开启多线程

mvnd clean package -T 12 -Dmaven.compile.fork=true
  • -Dmaven.compile.fork=true 表示开启多线程
  • -T 1c 表示利用多线程,一核一线程
  • -T 4 是直接指定4线程
    -T 1C 表示CPU线程的倍数
  • 就是假设,现在现在1个物理CPU,有4个核心,8个线程。
    那么此时-T 1C 就是8线程

只构建指定模块

mvn clean package -pl $moduleName -am
  • -pl - makes Maven build only specified modules and not the whole project.
  • -am - 使Maven找出目标模块所依赖的模块并进行构建

因为有一些模块其实用不上,所以这个命令的用途还是不错的。$moduleName使用相对路径的pom文件,进行编译

跳过测试代码

# mvn package进行编译、打包时, Maven会执行src/test/java中的JUnit测试用例,
# -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
# -Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类
#增加跳过测试代码的编译命令,所以为了提升编译速度,可以增加以下命令
mvn clean package -Dmaven.test.skip=true 

限制联网

如果本地编译没有引入新的包或者更新,可以将maven设置脱机模式
--offline

因为这个是在流水线执行,所以需要联网,指不定啥时候给我加一个上来,这个没啥用

mvnd

特点

  • 嵌入 Maven (所以不需要单独安装 Maven);maven 过渡到 maven-mvnd的过程中实现 无缝切换!所以不需要再安装maven或进行复杂的配置更改。

  • 使用 GraalVM 构建的本地可执行文件。与传统的 JVM 相比,它启动更快,使用的内存更少。

安装

github地址:https://github.com/apache/maven-mvnd

下载地址:https://github.com/apache/maven-mvnd/releases

  1. 下载对应的zip包,
  2. 配置环境变量
  3. 使用mvnd -version进行验证是否安装成功
C:\Users\HaC> mvnd -v
mvnd native client 0.7.1-windows-amd64 (97c587c11383a67b5bd0ff8388bd94c694b91c1e)
Terminal: org.jline.terminal.impl.jansi.win.JansiWinSysTerminal
Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)
Maven home: E:\apache-mvnd-0.7.1-windows-amd64\mvn
Java version: 1.8.0_131, vendor: Oracle Corporation, runtime: E:\JDK1.8\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

常用命令

# 编译命令和mvn一样,把mvn换为mvnd就行
mvnd clean package
# 使用过程中碰见了端口占用
mvnd --stop

结论

和mvn开启多线程对比后,感觉差别不是太大,也就没有花时间在往下看,继续用mvn命令也算,时间过去了一周,也就没有截图了…

帮助文档查看

mvnd --help

总结

到生产系统尝试之后发现,和机器性能也有一定的关系。本地可能要用个15分钟完成的事情,生产系统用了3-4分钟。不管咋说吧,本次的优化也用了一定的时间,要有自己的一个文档输出鸭,坚持鸭

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Maven是一个用于构建和管理Java项目的工具,而模块应用是指将一个大型项目拆分成多个模块进行开发和管理的方式。代码混淆是一种通过修改代码结构和变量名等方式来增加代码的复杂性,从而提高代码的安全性和保护知识产权的方法。 在Maven中,可以使用插件来实现代码混淆。常用的插件有ProGuard和Apache Maven Shade Plugin。 1. ProGuard是一个流行的Java代码混淆工具,可以通过删除无用的类、字段和方法,重命名类、字段和方法名称,以及优化字节码等方式来混淆代码。在Maven项目中使用ProGuard可以通过配置插件来实现。你可以在项目的pom.xml文件中添加以下配置: ```xml <build> <plugins> <plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.3.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <!-- 配置ProGuard规则 --> <proguardVersion>6.2.2</proguardVersion> <injar>${project.build.finalName}.jar</injar> <outjar>${project.build.finalName}-obfuscated.jar</outjar> <obfuscate>true</obfuscate> <options> <option>-keep public class com.example.MainClass {*;}</option> <!-- 其他ProGuard配置 --> </options> </configuration> </plugin> </plugins> </build> ``` 2. Apache Maven Shade Plugin是另一个常用的Maven插件,它可以将多个模块的代码打包成一个可执行的JAR文件,并且可以对代码进行混淆。你可以在项目的pom.xml文件中添加以下配置: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- 配置混淆规则 --> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>com/example/MainClass.class</exclude> <!-- 其他需要排除的类 --> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 这样配置后,运行`mvn package`命令即可生成混淆后的JAR文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值