想直接看解决方案的可以直接看最后。
事件起因
最近在做gradle项目迁移到maven,原因是我们使用jenkins做自动化CICD,CI 时会先从gitlab拉取源代码进行编译,由于我们编译使用的gradle是打包成镜像,以docker形式启动的,所以每次CI时会去启动镜像,这时会先启动gradle的守护进程,这个过程在jenkins下异常缓慢,导致每次CI时间过长,尝试关闭启动开启守护进程,但是仍然会启动一个jvm什么的还是很慢,后来我们分析其实就是这种镜像方式使用导致gradle启动慢,而我们又没办法解决这个问题,所以只能将项目迁移回maven为了提高效率。
那么效率差多少呢?以我们项目得话,打包这个环节maven大概快3分钟。还是很有必要的。
具体操作
下面说具体问题,我们使用spring boot + mybatis 做开发,在mapper接口中,有的开发人员在方法的参数列表中参数前没有加注解@param指定映射后的参数名,原来在gradle下编译后的class文件中,参数名还是正常的,mybatis会自动使用参数名作为映射后的参数名,但maven编译后发现参数名变成了var1这类,导致mybatis映射到xml中找不到对应的参数,报错bindingException,所以在mybatis 的maven项目中,一定要配置打包保留参数名。下面是具体配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>