需求:公司需要对不同模块单独开发,单独引用,上网找了打包引用的方式,因为需要在打包的项目中进行数据库操作,网上找的不详细,在此记录一下,比如:A项目打成公共jar包被其他单独(B、C 等等)项目引用
一,A项目进行打包
1,更换打包方式 不使用springboot自带的打包插件进行打包,因为springboot打包插件打出来的jar包第一目录为Boot-INF,会导致无法引用。 springboot打包方式为:
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
更改为maven打包方式:
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
下面为整个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>
<groupId>org.example</groupId>
<artifactId>accounting-balanceUpdate</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.13.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
2,项目目录结构 就是一个正常的springboot集成mybatis-plus项目,记得在启动类上加注解@MapperScan(“accounting.balanceupdate.mapper”) 3,进行打jar包 我使用的是idea进行打包 先clean再package进行打包,在项目目录的target目录下面可以看到jar包。
注意: 如果不想使用springboot集成mybatis-plus,想单独使用mybatis-plus的话,需要把springboot启动类,application.yml文件和springboot的相关依赖进行剔除,但我们连接数据库的配置一般写在yml文件中(在代码中直接连接数据库的除外),这时没有了数据库连接配置,想单独启动是不行的,可以直接打包放到别的项目中进行引用,前提是这个项目中连接的数据库和jar包中连接的数据库一致,同样可以成功进行数据库操作。
二,B项目引入A项目jar包
1,新建libs目录,放入jar包 2,配置依赖
<dependency>
<groupId>org.example</groupId>
<artifactId>accounting-balanceUpdate</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${pom.basedir}/libs/accounting-balanceUpdate.jar</systemPath>
</dependency>
3,配置yml文件
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
注意:必须要加classpath后面的*,代表扫描项目下所有的resources目录
4,mybatis-plus配置 在springboot启动类上加注解或者在配置类中加上此注解,不然无法扫描的目录类
@MapperScan({"com.tjcloud.designer.mapper", "accounting.balanceupdate.mapper"})
@ComponentScan({"com.tjcloud.designer", "accounting.balanceupdate"})
到此完成!!!
三,测试引用
TdAUserRealbalanceService为A项目jar包中的一个接口类 注意: jar包和主体项目的配置类不能重复,比如:在主体项目中已经使用MybatisPlusConfig配置类了,在jar包中就不可以在引入,不然项目会启动不成功,包配置覆盖的错误。 org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.tjcloud.designer.WriteOffApplication]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘mybatisPlusConfig’ for bean class [accounting.billwriteoff.config.MybatisPlusConfig] conflicts with existing, non-compatible bean definition of same name and class [com.tjcloud.designer.config.MybatisPlusConfig]
|