Spring Boot使用maven打包共有模块及其使用
1. 新建父子项目,子项目依赖父项目的maven
Step1: 使用maven新建项目。
a. 新建项目时选择maven,直接点击next
b. 分别指定GroupId、ArtifactId、Version。然后点击next。
c. 视情况更改项目名称,然后点击finish
d. 删除新建项目下的src, 删除后的项目路径如下。
Step2: 新建module作为子项目
a. 新建module
b. 使用maven建立module,直接next,步骤与Step1下的步骤类似。
c. 指定ArtifactId。然后点击next
d. 视情况修改module name。然后点击Finish
e. 新建完成,可以看到完成后的目录结构以及父项目pom中增加的内容
Step3: 完善该子项目
a. 在java文件下新建目录结构,将自己需要的工具类放在新建的文件下。
b. 修改auth-util下的pom中的内容,指定artifactId、groupId、version。作为第三方引用的前提,以及指定工具类所在的位置
c. 将子模块的maven依赖交给父模块来管理。在子模块(auth-util)中加入dependencies,这里并不指定版本号。如下图:
d. 父模块中加入dependencyManagement,来管理所有的依赖。如下图:
这里面要注意的是,项目是基于springboot的,所有springboot的依赖写在这里面,另外,像spring security的版本号会由springboot自动加载,这里面可以不指定它的版本号。
Step4: 使用maven打包到本地仓库
a. 选择Run Maven —> install 。这里要注意右击父项目进行maven打包
若打包过程中遇到提示source版本低的时候,在父项目的pom中加入如下代码
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
截屏如下:
2. 公共模块的使用
step1: 新建一个springboot项目
New Project–>Spring Initializr–>一路next。新建完成。
step2: 加入依赖
a. 在新建的项目的pom中加入上文新建好的子项目的依赖。
<dependency>
<artifactId>auth-util</artifactId>
<groupId>com.common.auth.util</groupId>
<version>1.0</version>
</dependency>
如下图所示:
b. 查看是否加入依赖成功。IDEA右侧有maven字样的,点击可以快速查看本项目所有的依赖
此时依赖加入成功,可以在本项目中使用auth-util下所有的工具类。
3. 工具类中涉及到mapper、@Component的处理
如下面的俩个类。MyUserDetailService上有@Component,该类交给spring容器管理,便于其他类使用时的注入;MyUserDetailServiceDao是基于mybatis的插叙数据库的mapper。
1.解决办法:
在新建的springboot项目中的启动类上面加入两个注解,一个是@MapperScan(basePackages = {“扫描mapper的路径”}),用于识别所有的mapper;另外一个是
@ComponentScan(basePackages = {“扫描spring管理的路径”}),该注解会屏蔽当前项目默认的扫描路径,所以这里面不仅要写依赖的包中的路径,也要把本项目需要扫描的包的路径写进去(所有的例如用到了@Component、@Controller、@Service等等的包)。
本例如下:
2.测试:
写完后,可以写一个controller来测试是否成功
因为本项目用到了mysql数据库,所以需要配置好数据源。这里就不做赘述了。
@RestController
public class TestController {
@Resource
MyUserDetailService myUserDetailService;
@GetMapping("/test")
public UserDetails getPassword(){
UserDetails userDetails = myUserDetailService.loadUserByUsername("admin");
return userDetails;
}
}
使用Postman来检测该接口
测试通过后证明问题已解决。