0
点赞
收藏
分享

微信扫一扫

构建纯净的Mybatis源码

王传学 2022-02-08 阅读 85

在构建mybatis源码时,会有很多杂七杂八的东西,比如护照、各种说明等等,看着不是很舒服,而且有时还会因为这些东西而构建失败,因此想构建一个比较纯净的源码,里面只有代码,过程如下。

由于mybatis是使用maven来构建的,所以需要先安装maven并配置,这里不再阐述maven的安装和配置了,毕竟是maven嘛,大家都会。

先下载mybatis的源码包,下载地址:https://github.com/mybatis/mybatis-3/releases,这里以mybatis-3.5.9版本为例。

下载后解压缩,打开里面的pom.xml文件,会发现该项目依赖一个父工程,所以我们需要先下载并编译父工程。
在这里插入图片描述
先下载对应版本的父工程,下载地址:https://github.com/mybatis/parent/tags,本例中是mybatis-parent-33

下载完父工程后解压缩,然后进入到父工程的源码目录,把那些杂七杂八的东西都删掉,只留下src文件夹和pom.xml文件即可。
在这里插入图片描述
打开cmd执行mvn install命令,开始编译并安装父工程,编译好后就可以删掉父工程的源码文件夹了(删不删随意,反正安装好父工厂之后这个文件夹就没有什么作用了)。

此时已经弄好了父工程,开始构建mybatis工程。先打开mybatis源码目录,还是老样子,把那些杂七杂八的东西都删掉,只留下src文件夹和pom.xml文件即可。
在这里插入图片描述
然后打开pom.xml,把那些花里胡哨的标签都删掉,只留下项目描述和依赖就行,同时删掉测试依赖。可以参考一下我整理后的pom.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-parent</artifactId>
    <version>33</version>
    <relativePath />
  </parent>
  <artifactId>mybatis</artifactId>
  <version>3.5.9</version>
  <packaging>jar</packaging>

  <dependencies>
    <dependency>
      <groupId>ognl</groupId>
      <artifactId>ognl</artifactId>
      <version>3.3.0</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.28.0-GA</version>
      <scope>compile</scope>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.32</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.17.0</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.3.0</version>
      <optional>true</optional>
    </dependency>
  </dependencies>
</project>

打开src文件夹,直接删掉site文件夹,并清空test文件夹。
在这里插入图片描述
然后返回到上一级目录,也就是源码文件夹,打开cmd,执行mvn install命令,开始构建。
在这里插入图片描述
此时就可以使用IDEA直接打开工程了,可以看到里面还是蛮干净的。
在这里插入图片描述

注意:在构建源码后,如果出现了无法读取外部DTD错误,需要在JAVA_HOME下的jre/lib目录下创建一个名为jaxp.properties的文件,内容如下:

javax.xml.accessExternalSchema=all
javax.xml.accessExternalDTD=all

就可以解决问题了。该问题的报错信息如下:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 55; 外部 DTD: 无法读取外部 DTD 'mybatis-3-config.dtd', 因为 accessExternalDTD 属性设置的限制导致不允许 'http' 访问。
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
	at com.xxx.mybatis.Main.main(Main.java:16)
Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 55; 外部 DTD: 无法读取外部 DTD 'mybatis-3-config.dtd', 因为 accessExternalDTD 属性设置的限制导致不允许 'http' 访问。
	at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:263)
	at org.apache.ibatis.parsing.XPathParser.<init>(XPathParser.java:127)
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.<init>(XMLConfigBuilder.java:82)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:77)
	... 2 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 55; 外部 DTD: 无法读取外部 DTD 'mybatis-3-config.dtd', 因为 accessExternalDTD 属性设置的限制导致不允许 'http' 访问。
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1472)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1185)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1073)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:974)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:507)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:867)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:796)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:142)
	at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247)
	at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
	at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:261)
	... 5 more
举报

相关推荐

0 条评论