maven多模块踩坑-公共模块找不到等问题

一、多模块如何使用?

1、这不是微服务

记得刚入职时,作为初入职场的小白,git导入项目后,发现这些东西,以为是微服务,然后我在公用模块加入自己的实体类后,启动我的service,居然显示没有这个实体类,同事告诉我,要去clean install一下,当时就一点不懂,后来看书系统性地学习了下maven,才知道这叫多模块,而且,还并不多复杂。
maven多模块踩坑-公共模块找不到等问题_第1张图片

很多新人打眼一看,这么多工程包(module),就说这是微服务,其实不是的,他只是maven多模块。

2、使用步骤,如何搭建

第一步: 新建parent工程,在里面加多个module子工程。
第二步: 修改父子的pom,

  1. 父pom里加入module设置
    <modules>
        <module>commonmodule>
        <module>alibaba-configmodule>
        <module>alibaba-providermodule>
        <module>alibaba-consumermodule>
        <module>gatewaymodule>
    modules>

  1. 子pom中加入父模块
    <parent>
        <groupId>com.testmvngroupId>
        <artifactId>parentartifactId>
        <version>1.0-SNAPSHOTversion>
        <relativePath>../pom.xmlrelativePath>
    parent>
  1. common模块(需要被人引用的模块)修改编译插件 踩坑就在这里发生!!
    <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <executions>
                    <execution>
                        <phase>nonephase>
                    execution>
                executions>
                <configuration>
                    <classifier>executeclassifier>
                configuration>
    plugin>

首先,你可能创建项目时使用的idea直接创建springboot,这时,maven默认编译插件有两个,分别是

            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.8.1version>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                    <encoding>UTF-8encoding>
                configuration>
            plugin>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <version>2.3.7.RELEASEversion>
                <configuration>
                    <mainClass>com.testmvn.common.CommonApplicationmainClass>
                configuration>
                <executions>
                    <execution>
                        <id>repackageid>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>

如果使用这样的配置,那么common模块就不会被其他模块引用到了,你可以把springboot编译插件删掉,只用maven插件。或者你像我这样设置。
否则,就会报一个程序包不存在异常,找不到你引用的类…

3、总结&&注意事项

  1. 父子模块的maven坐标
  2. 父子模块的依赖管理,这里没提到
  3. 父子模块引用,不要落下哪个微服务模块
  4. common公共模块不能使用默认的springboot 编译插件,否则找不到
  5. 下一篇总结使用springcloud alibaba,要想学微服务,一定要把maven多模块先学好
  6. 推荐书籍 : 《maven实战》 ,很好的一本书,国产作者,里面从maven坐标开始详细的记录了每个maven细节,适合新人和老人反复巩固和学习,不要像我刚入职那样,闹了笑话

你可能感兴趣的:(springboot,maven,maven,java,开发语言)