IDEA如何创建多个模块Maven SpringBoot项目

IDEA如何创建多个模块Maven SpringBoot项目

创建模块
一、在界面左上角选择File->New->Project后,选择Spring Initializr,默认使用的Java版本是1.8。
在这里插入图片描述
二、点击Next,进入下一步,可以设置项目的一些基本信息。

groupId和artifactId统称为“坐标”,是为了保证项目唯一性而提出的。groupId是项目组织唯一的标识符,实际对应JAVA的包的结构,ArtifactID是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。groupId一般分为多个段,一般第一段为域,第二段为公司名称。举个apache公司的tomcat项目例子:这个项目的groupId是org.apache,它的域是org,公司名称是apache,artifactId是tomcat。包结构package最好是以groupId.artifactId打头的。
在这里插入图片描述
三、点击Next,进入下一个选择dependency的界面,作用是在pom中自动添加一些依赖,在项目开始时就下载。这里我们暂时不勾选任何依赖。
在这里插入图片描述
四、点击Next,进入下一个界面,填写工程名,并选择工程所在目录。填写完成后,点击Finish,即可创建一个spring boot项目。
在这里插入图片描述
新建完成父工程之后将多余的文件和文件夹删除,删除前与删除后的结构如下(忘记截图,网络图片如下,参考文章地址:https://jingyan.baidu.com/article/e2284b2ba1602fe2e7118d77.html):

在这里插入图片描述

在这里插入图片描述

创建子模块

在上面创建好的many-parent-demo工程名上,点击右键,选择New–>Module,进入New Module页面。
在这里插入图片描述
在这里插入图片描述
该模块的名字安照自己的需要自行填写(eg:我这是当做公共模块,就叫common-demo),后面其他的参数都可参照父模块的参数设置。
在这里插入图片描述
按照上述步骤,可以按照自己的需要,创建多个子模块

一些公共模块common、core等,不需要启动类的,可以把启动类删除。
在这里插入图片描述


多模块项目配置

父模块配置

父pom是为了抽取统一的配置信息和依赖版本控制,方便子pom直接引用,简化子pom的配置。

下面介绍下父pom的配置中需要注意的一些地方。我贴出的pom看起来会有点冗余,因为其中一些不需要的地方,我没有直接删掉而是注释掉,并加了说明,是为了后续查看的时候还能清楚删掉的原因。

1、父模块的打包类型

多模块项目中,父模块打包类型必须是pom,同时以给出所有的子模块,其中每个module,都是另外一个maven项目。 后续新增的子模块也必须加到父pom的modules中。

2、继承设置

继承是maven中很强大的一种功能,继承可以使子pom获得parent中的各项配置,对子pom进行统一的配置和依赖管理。父pom中的大多数元素都能被子pom继承,想深入了解的同学可自行搜索学习~~

3、使用dependencyManagement管理依赖版本号

一般在项目最顶层的父pom中使用该元素,让所有子模块引用一个依赖而不用显式的列出版本号。maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

4、使用properties控制依赖包的版本号,便于版本维护

在properties标签中,添加各依赖包的版本号,然后在dependency中直接引用该依赖版本号的值即可。

父模块的pom文件

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging> <!-- 父模块打包类型必须为pom -->

    <modules>
        <module>common-demo</module>
        <module>core-demo</module>
        <module>consumer-demo</module>
        <module>provider-demo</module>
    </modules>

    <name>demo</name>

    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>

<dependencyManagement>
    <dependencies>
<!--        <dependency>
            <groupId></groupId>
            <artifactId></artifactId>
        </dependency>-->
    </dependencies>
</dependencyManagement>


<!--    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>-->


    <!-- 该插件作用是打一个可运行的包,必须要写在需要打包的项目里。这里的父模块不需要打包运行,所以删除该插件 -->
<!--    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>-->

</project>

common模块的pom文件:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 子模块的parent要使用顶层的父模块 -->
    <parent>

        <!--        <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.4.3</version>
                <relativePath/>--> <!-- lookup parent from repository -->
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>


    <groupId>com.example</groupId>
    <artifactId>common-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <packaging>jar</packaging>

    <name>common-demo</name>
    <description>Demo project for Spring Boot</description>

    <!-- properties可删掉,会继承父模块的 -->
<!--    <properties>
        <java.version>1.8</java.version>
    </properties>-->

    <dependencies>
<!--        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>-->
    </dependencies>

<!--    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>-->

</project>

core模块的pom文件:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>


    <!-- 子模块的parent要使用顶层的父模块 -->
    <parent>

        <!--        <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.4.3</version>
                <relativePath/>--> <!-- lookup parent from repository -->
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>


    <groupId>com.example</groupId>
    <artifactId>core-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>core-demo</name>
    <description>Demo project for Spring Boot</description>

    <!-- properties可删掉,会继承父模块的 -->
    <!--    <properties>
            <java.version>1.8</java.version>
        </properties>-->


    <dependencies>
<!--        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>-->

        <!-- Common   应用公共模块common-->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>common-demo</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

    </dependencies>

<!--    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>-->

</project>

consumer模块的项目文件:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 子模块的parent要使用顶层的父模块 -->
    <parent>

        <!--        <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.4.3</version>
                <relativePath/>--> <!-- lookup parent from repository -->
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>


    <groupId>com.example</groupId>
    <artifactId>consumer-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>consumer-demo</name>
    <description>Demo project for Spring Boot</description>

    <!-- properties可删掉,会继承父模块的 -->
    <!--    <properties>
            <java.version>1.8</java.version>
        </properties>-->

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Common   应用公共模块common-->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>common-demo</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

        <!-- Core   应用公共模块common-->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>core-demo</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <!-- 该配置使打成的war,不带版本号,直接是consumer-demo.war -->
        <finalName>consumer-demo</finalName>
    </build>

</project>


provider模块的配置大致同consumer,这里不再粘贴

参考文档地址:https://www.cnblogs.com/huanghongbo/p/9098588.html

打包时可能出现的错误:

Maven中出现Could not find artifact …:pom:0.0.1-SNAPSHOT。。

多模块项目构建时,先将总项目install,之后子项目分别install,注意他们的依赖关系。

比如dao的运行需要依赖domain,service的运行需要依赖dao,web的运行需要依赖service,所以先insall总项目,在install domain,然后dao,service,web。

如果总项目install时就出现问题,就先从子项目开始,最后弄总项目即可。

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.666 s <<< FAILURE! - in com.exampl…

test目录打包出错:

简单粗暴的解决方法是,直接删掉,相关的测试类

另外一种就是:
不用上述方式编译打包,改用命令行方式跳过Test,命令如下:
mvn clean package -DskipTests 这样maven就不会进行Test相关的编译了。

另外:创建的测试项目,上传至资源里

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值