跳至主要内容

加快Maven的构建速度

Welcome file

简介

对于CI/CD服务器,需要频繁对maven项目进行构建。我们可以基于这样的场景,使用一些技术加快maven构建速度。

使用所有cpu进行构建

默认情况下,maven只使用一个线程进行构建,但对于有多核cpu的CI/CD服务器来说,这样就有些浪费cpu资源了。这时可以通过Maven 3的并行构建来充分利用多核的性能,加速maven的构建。

构建命令:

mvn -T 1C clean install

设置-T 1C表示每个CPU一个线程。

这对于有多个模块并且没有依赖关系的大型项目来说,能极大的加快构建速度。更详细的资料可见参考资料1。

后台运行Maven

maven每次启动构建,JVM都需要重新加载相关的类,初始化相关的环境。对于CI/CD服务器来说,频繁构建就导致频繁的JVM初始化,会消耗大量时间。基于这样的场景,社区开发了maven daemon项目。

该项目的目的是让maven一直运行在后台,这样就可以免去不少maven构建时的初始化步骤。还有该项目使用了GraalVM,也就是说maven daemon是直接以本地二进制代码执行的,执行效率和内存占用相对传统JVM来说更有优势。

maven daemon使用起来也很简单,跟普通的mvn命令一样,只需要把mvn改成mvnd就可以(不同环境的安装方法,可见参考资料2的官方文档):

mvnd clean install

maven daemon默认就是以多线程的方式运行,所以不需要再额外设置参数。

参考资料

[1]Parallel builds in Maven 3:https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3

[2]mvn daemon:https://github.com/mvndaemon/mvnd

评论

此博客中的热门博文

国密SM2签名封装成PKCS7格式

在国内做金融行业,难免会有被强制使用国密算法的情况,而且一般还会指定必须使用硬件加密机之类的设备,所以我也稍微的研究了一下国密算法,使用软算法签名并封装 PKCS7 格式(文档中的一个交互)。 以下是基于 Bouncy Castle 的示例,密钥对的生成可以参考 Bouncy Castle 中 test 包下 SM2 相关代码 public static String sign ( ) throws Exception { //加载公钥 byte [ ] plainText = "hello, world" . getBytes ( ) ; FileInputStream input = new FileInputStream ( "F:\\certificate\\public.cer" ) ; CertificateFactory certificateFactory = new CertificateFactory ( ) ; X509Certificate certificate = ( X509Certificate ) certificateFactory . engineGenerateCertificate ( input ) ; input . close ( ) ; //加载私钥,private为换成实际的私钥 PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec ( "private" . getBytes ( ) ) ; //SM2算法实际上为ECC算法,并指定了一些参数值,所以这里的参数是EC KeyFactory factory = KeyFactory . getInstance ( "EC" , "BC" ) ; PrivateKey privateKey = factory . generatePrivate ( spec ) ; //以下为签名并封装成PKCS7格式 byte [ ] signedMessag

Spring Boot Actuator 2 示例

Welcome file 简介 Spring Boot Actuator为应用程序提供了各种开箱即用的运维特性,可以与应用方便的交互和监控。 使用环境:Java 11 和 Spring Boot 2.4.3.RELEASE 集成Spring Boot Actuator 在Spring Boot中集成Spring Boot Actuator与集成其他的框架类似,在 pom.xml 里引入相关的starter就可以: < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-actuator </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId > </ dependency > 由于大部分的使用场景还是web,所以这里也用Spring MVC做示例。 配置好 pom.xml 后,默认actuator仅暴露一些基本功能,实际使用中,根据需求暴露对应功能。为了简便测试,这里在 application.yml 中配置暴露全部功能: management : endpoints : web : exposure : include : "*" endpoint : health : enabled : true show-details : always probes : enabled : true shutdown : enabled : true metr

NextCloud数据目录迁移

最近服务器的环境坏了,所以迁移了NextCloud的数据目录。不过在迁移过程中有点小问题。 环境: Ubuntu 18.04 Docker 19.03.7 1.NextCloud页面不正常,Docker日志显示XX目录permission denied 参考了 这里 的做法,不过是把  /var/www/html/   整个目录的权限都修改为  chown -R www-data:www-data ,之后就不再报权限问题了。 2.数据库配置修改 因为NextCloud是在初始化时填的数据库连接信息,所以直接迁移数据目录的情况下,会导致应用连不到新的数据库环境。此时可以找到数据目录下的  config/config.php 文件,直接修改数据库连接配置。