Spring Boot使用maven打包共有模块及其使用

  • 1. 新建父子项目,子项目依赖父项目的maven
  • Step1: 使用maven新建项目。
  • Step2: 新建module作为子项目
  • Step3: 完善该子项目
  • Step4: 使用maven打包到本地仓库
  • 2. 公共模块的使用
  • step1: 新建一个springboot项目
  • step2: 加入依赖
  • 3. 工具类中涉及到mapper、@Component的处理
  • 1.解决办法:
  • 2.测试:


1. 新建父子项目,子项目依赖父项目的maven

Step1: 使用maven新建项目。

a. 新建项目时选择maven,直接点击next

maven deploy子模块 maven子模块打包_工具类


b. 分别指定GroupId、ArtifactId、Version。然后点击next。

maven deploy子模块 maven子模块打包_spring boot_02


c. 视情况更改项目名称,然后点击finish

maven deploy子模块 maven子模块打包_spring boot_03


d. 删除新建项目下的src, 删除后的项目路径如下。

maven deploy子模块 maven子模块打包_工具类_04

Step2: 新建module作为子项目

a. 新建module

maven deploy子模块 maven子模块打包_spring_05


b. 使用maven建立module,直接next,步骤与Step1下的步骤类似。

maven deploy子模块 maven子模块打包_maven_06


c. 指定ArtifactId。然后点击next

maven deploy子模块 maven子模块打包_工具类_07


d. 视情况修改module name。然后点击Finish

maven deploy子模块 maven子模块打包_spring boot_08


e. 新建完成,可以看到完成后的目录结构以及父项目pom中增加的内容

maven deploy子模块 maven子模块打包_spring boot_09

Step3: 完善该子项目

a. 在java文件下新建目录结构,将自己需要的工具类放在新建的文件下。

maven deploy子模块 maven子模块打包_maven deploy子模块_10


b. 修改auth-util下的pom中的内容,指定artifactId、groupId、version。作为第三方引用的前提,以及指定工具类所在的位置

maven deploy子模块 maven子模块打包_maven deploy子模块_11


c. 将子模块的maven依赖交给父模块来管理。在子模块(auth-util)中加入dependencies,这里并不指定版本号。如下图:

maven deploy子模块 maven子模块打包_spring boot_12


d. 父模块中加入dependencyManagement,来管理所有的依赖。如下图:

maven deploy子模块 maven子模块打包_工具类_13


这里面要注意的是,项目是基于springboot的,所有springboot的依赖写在这里面,另外,像spring security的版本号会由springboot自动加载,这里面可以不指定它的版本号。

Step4: 使用maven打包到本地仓库

a. 选择Run Maven —> install 。这里要注意右击父项目进行maven打包

maven deploy子模块 maven子模块打包_工具类_14


若打包过程中遇到提示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>

截屏如下:

maven deploy子模块 maven子模块打包_spring_15

2. 公共模块的使用

step1: 新建一个springboot项目

New Project–>Spring Initializr–>一路next。新建完成。

maven deploy子模块 maven子模块打包_spring_16

step2: 加入依赖

a. 在新建的项目的pom中加入上文新建好的子项目的依赖。

<dependency>
       <artifactId>auth-util</artifactId>
        <groupId>com.common.auth.util</groupId>
        <version>1.0</version>
 </dependency>

如下图所示:

maven deploy子模块 maven子模块打包_maven deploy子模块_17


b. 查看是否加入依赖成功。IDEA右侧有maven字样的,点击可以快速查看本项目所有的依赖

maven deploy子模块 maven子模块打包_工具类_18


此时依赖加入成功,可以在本项目中使用auth-util下所有的工具类。

3. 工具类中涉及到mapper、@Component的处理

如下面的俩个类。MyUserDetailService上有@Component,该类交给spring容器管理,便于其他类使用时的注入;MyUserDetailServiceDao是基于mybatis的插叙数据库的mapper。

maven deploy子模块 maven子模块打包_工具类_19


maven deploy子模块 maven子模块打包_spring boot_20

1.解决办法:

在新建的springboot项目中的启动类上面加入两个注解,一个是@MapperScan(basePackages = {“扫描mapper的路径”}),用于识别所有的mapper;另外一个是

@ComponentScan(basePackages = {“扫描spring管理的路径”}),该注解会屏蔽当前项目默认的扫描路径,所以这里面不仅要写依赖的包中的路径,也要把本项目需要扫描的包的路径写进去(所有的例如用到了@Component、@Controller、@Service等等的包)。

本例如下:

maven deploy子模块 maven子模块打包_工具类_21

2.测试:

写完后,可以写一个controller来测试是否成功
因为本项目用到了mysql数据库,所以需要配置好数据源。这里就不做赘述了。

@RestController
public class TestController {

    @Resource
    MyUserDetailService myUserDetailService;

    @GetMapping("/test")
    public UserDetails getPassword(){
        UserDetails userDetails = myUserDetailService.loadUserByUsername("admin");
        return userDetails;
    }
}

使用Postman来检测该接口

maven deploy子模块 maven子模块打包_spring_22


测试通过后证明问题已解决。