shade解決(jue)mybatis包(bao)沖(chong)突(tu)
目前(qian)有一個(ge)項目,A是(shi)第三方(fang)應用(yong),代碼不公開,不能(neng)修改,使用(yong)的(de)(de)(de)是(shi)mybatis plugs3.3.1,而當(dang)前(qian)項目是(shi)我們自己(ji)的(de)(de)(de)B,它需(xu)要用(yong)到A里的(de)(de)(de)方(fang)法(fa),B里mybatis plugs版本是(shi)2.3,目前(qian)在(zai)使用(yong)過程中出現了問題,這兩個(ge)版本的(de)(de)(de)有些方(fang)法(fa),注解都發(fa)生了很(hen)大的(de)(de)(de)變(bian)化 :
mybatis 3.x BaseMapper注解的位置:import com.baomidou.mybatisplus.core.mapper.BaseMapper;
mybatis 2.x BaseMapper注解的位置:import com.baomidou.mybatisplus.mapper.BaseMapper;
這兩(liang)個(ge)版(ban)本(ben)對(dui)于很多注解,接口,方(fang)法(fa),類都是(shi)不同的,兩(liang)個(ge)版(ban)本(ben)無法(fa)兼容,當我們項(xiang)目(mu)引用A項(xiang)目(mu)之(zhi)后,就出現A版(ban)本(ben)里(li)使(shi)用mybatis的一些錯誤,就是(shi)方(fang)法(fa),類未找到的錯誤。
shade插件進行解決
我們需要(yao)引用a-shade這個項目,它(ta)來依(yi)賴a,然后在它(ta)里(li)(li)使(shi)用shade插件(jian)對a里(li)(li)的(de)mybatis進行重命名,再由b直接引用a-shade,這時 a里(li)(li)的(de)方(fang)法也(ye)就有了(le),并且引用了(le)mybatis的(de)地方(fang)都換(huan)成(cheng)了(le)shade開頭(tou)的(de)包(bao)了(le)
實現圖
a-shade.jar反編譯之后

a-shade項目的shade代碼
<artifactId>a-service-shade</artifactId>
<dependencies>
<dependency>
<groupId>com.lind</groupId>
<artifactId>a-service</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<!-- 不生成dependency-reduced-pom.xml-->
<createDependencyReducedPom>false</createDependencyReducedPom>
<relocations>
<relocation>
<pattern>com.baomidou</pattern>
<shadedPattern>shade.com.baomidou</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
引用a-shade
打包發布后,B項目(mu)直(zhi)接使用a-shade這個包即可,其它代碼不(bu)需要修改
<dependency>
<groupId>com.lind</groupId>
<artifactId>a-shade</artifactId>
<version>1.0.1</version>
</dependency>