背景

我司使用的是Java8+Maven3.6.3

为什么要使用mvnd来进行打包,因为我们的项目在进行整合之后,module的数量来到了59个,使用Intel® Core™ i9-9980HK CPU @ 2.40GHz 64GRAM 来进行打包还需要至少2min的时间,使用公司的打包服务器需要10min,已经成为了痛点

首先安装Maven-mvnd

brew install mvndaemon/homebrew-mvnd/mvnd

安装完成之后查看是否成功

mvnd -version

image-20241217092750347

使用mvnd进行打包,与原生mvn的命令用法是相同的,不过是将mvn变为了mvnd

mvnd clean package -Dmaven.test.skip=true

如何使用IDEA集成mvnd呢?有开发用户已经给IDEA提出过,是否可以将mvnd配置在IDEA中,让开发人员原生使用,但是IDEA的官方明确回复maven已经达到原生支持,可以使用另外的shell插件来实现maven的编译。

简而言之就是一键运行脚本,哈哈有点鸡肋

image-20250208165513167

使用原生maven

image-20241217101336950

使用mvnd

image-20250208163839941

踩坑

第一个问题

使用原生maven可以打包成功但是使用mvnd就会失败,简单来说就是遇到了lombok不生效的情况

解决办法 在根pom中使用打包plugin,指定使用lombok进行打包,因为使用idea的时候就已经勾选了启用注解编译,但是使用原生命令的时候就会有问题

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source> <!-- 根据你的Java版本调整 -->
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version> <!-- 确保与依赖版本一致 -->
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>

第二个问题

使用原生mvn命令进行打包时报错

[ERROR] /xxxxxx/SymmetricEncoder.java:[4,16] 找不到符号 [ERROR] 符号: 类 BASE64Encoder [ERROR] 位置: 程序包 sun.misc [ERROR] -> [Help 1]

这个如果大家做过Java升级就很明白,这是因为高版本jdk不再有这些解密包,问题就出现在使用mvn的Jdk版本上

image-20241217092750347

我们可以看到驱动mvnd的java版本是23.0.1,这明显太高了,项目本身使用的是1.8

尝试直接指定javaHome把

/usr/libexec/java_home -V 

image-20250208164450277

使用1.8

code .zshrc

在尾部添加

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
source .zshrc

使用mvnd发现报错了,因为maven不支持jdk8,所以我们要尝试降低mvnd的版本访问maven-mvnd的github我们发现可以使用

brew install mvndaemon/homebrew-mvnd/mvnd@1

来安装1的版本,1的版本使用的是maven3.9,相比于2的4.0beta兼容了jdk8

重新卸载安装之后

image-20250208164834959