编译MyBatis源码时遇到的一系列问题
编译mybatis源码时,报错。
21:33 Error parsing .mvn/maven.config file: Unrecognized option: --no-transfer-progress
Fix maven config
maven.config 文件中内容都是红线
-Daether.checksums.algorithms=SHA-512,SHA-256,SHA-1,MD5
--no-transfer-progress
我当前使用的还是maven3.5.3
--no-transfer-progress
在构建过程中,不显示下载和上传的进度。这个参数在 Maven 3.6.1 才添加。
于是去maven官网下载来一个新的3.9.0。(https://maven.apache.org/download.cgi)
然后IDEA的 File >Settings >Build,Execution,Deployment >Build Tools >Maven
下更换maven home path。
环境变量中的maven path也要指向新版本。
先新建系统变量,
然后再环境变量path中,添加maven。
如果配置有误,可能IDEA中会出现下面的问题。
按照上述截图操作后:
接下来使用
mvn install -DskipTests=true -Dmaven.test.skip=true -Dlicense.skip=true
报错如下: Unknown lifecycle phase “.test.skip=true”.
将命令改为:
mvn clean install package '-DskipTests=true -Dmaven.test.skip=true -Dlicense.skip=true'
接下来报错如下:
从pom.xml文件中找到了JDK的限制条件,
<properties>
<!-- Copyright -->
<copyright>2022</copyright>
<!-- General configuration -->
<allowed.build.jdks>[11,12),[17,18),[19,20),[20,21),[21,22)</allowed.build.jdks>
<checkstyle.config>checkstyle.xml</checkstyle.config>
<clirr.comparisonVersion>36</clirr.comparisonVersion>
<formatter.config>eclipse-formatter-config-2space.xml</formatter.config>
<gcu.product>${project.name}</gcu.product>
<html.javadocType>-html5</html.javadocType>
<impsortGroups>au,ch,com,de,io,jakarta,java,javassist,javax,lombok,mockit,net,nl,ognl,org</impsortGroups>
<module.name>org.mybatis.parent</module.name>
<spotbugs.onlyAnalyze />
由于本地安装的是JDK8,所以果断换MyBatis源码版本,找个比较老的版本。
既然已经说到这里了,顺便说一下maven的Maven Enforcer 插件。
它提供了非常多的通用检查规则,比如检查 JDK 版本、检查 Maven 版本、检查依赖版本等,比如在我们MyBatis的源码中就有如下校验:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${enforcer.plugin}</version>
<configuration>
<rules>
<enforceBytecodeVersion>
<maxJdkVersion>${java.version}</maxJdkVersion>
<ignoredScopes>test</ignoredScopes>
</enforceBytecodeVersion>
<requireJavaVersion>
<version>${allowed.build.jdks}</version>
</requireJavaVersion>
<requireMavenVersion>
<version>[${maven.min-version},)</version>
</requireMavenVersion>
<requirePluginVersions>
<message>[ERROR] Best Practice is to always define plugin versions!</message>
<banLatest>true</banLatest>
<banRelease>true</banRelease>
<banSnapshots>true</banSnapshots>
<phases>clean,deploy,site</phases>
</requirePluginVersions>
</rules>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>extra-enforcer-rules</artifactId>
<version>${extra-enforcer-rules.version}</version>
</dependency>
</dependencies>
</plugin>
上述的配置会在构建时(准确的说是在 validate 时)需完成各项检查:
其中JDK版本要求为:[11,12),[17,18),[19,20),[20,21),[21,22),
因为我们是JDK8,所以报错如下:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.2.1:enforce (enforce-java) on project mybatis-parent:
[ERROR] Rule 1: org.apache.maven.enforcer.rules.version.RequireJavaVersion failed with message:
[ERROR] Detected JDK version 1.8.0-351 (JAVA_HOME=C:\Program Files\Java\jdk1.8.0_351\jre) is not in the allowed range [11,12),[17,18),[19,20),[20,21),[21,22).
好把,我们找个3.5.4的版本试试。
https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.5.4