一篇文章教你如何使用IDEA搭建聚合工程

561 阅读3分钟

1 前言

以前做过很多单体项目,基本上就是新建一个Springboot工程,然后新建yml配置文件,将开发环境与生产环境进行配置,接下来搭建基础设施功能,比如系统管理、日志管理、定时任务等等。虽然在工程目录结构上对这些功能进行了划分,但是还是显得比较臃肿,另外如果新项目要使用之前项目的功能只得复制粘贴了,这样做太费时费力了。

我相信很多开发者之前肯定也这么干过,哈哈。

前天公司来了个实习的,看着他打开Idea演示项目的时候,我发现跟我之前的做法类似,所有业务功能在一个工程里面,没有进行功能的模块划分(小项目这样做确实无可厚非)。

因为公司后面要进行一个大项目的开发,需要新来的同事理解模块化的工程。所以我就大致的给新同事介绍了下。

2 为什么需要搭建聚合工程

比如我们盖房子,有搬砖的、有筛沙的、有粉刷的、有装水电的等等,大家分工合作,各自负责自己的部分(这里比喻可能不是那么贴切,毕竟现实中有的一人负责多项工作)。

了解微服务的同学都知道,微服务是将一个复杂的业务功能进行服务的拆分,服务与服务之间通过RPC进行通讯,每个服务可以单独部署,也可以集群化。这种设计思想和聚合工程类似,但微服务更为复杂。

比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且针对某个模块的特殊控制更为方便。

3 聚合工程搭建

3.1 创建父工程

点击File->New Project,在弹出的窗口选择Maven项,右侧选择mava-archetype-quickstart,点击Next

按要求填写项目名称及存放路径,点击Next

这里设置Maven的路径,根据自己实际情况配置,配置完成后点击Finish

删除src目录,留个pom文件就行,编辑父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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
<!--子工程结构是Springboot,所以这里父工程继承Springboot工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>org.example</groupId>
    <artifactId>shop</artifactId>
    <version>1.0.0</version>
<!--    父工程设置成pom-->
    <packaging>pom</packaging>
    <name>shop</name>
    
<!--    创建子工程时,将子工程模块会自动注册到这里-->
    <modules>
        
    </modules>


    <properties>
        <springboot.version>2.7.7</springboot.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${springboot.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${springboot.version}</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    
    
<!--    设置构建插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>

    </build>

    <repositories>
        <repository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>


</project>

到此,父工程创建完毕。

3.2  创建子模块

在根目录上面右键New->Module

和创建父工程一样的选择,然后一直Next即可

点击Finish。

子工程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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.example</groupId>
    <artifactId>shop</artifactId>
    <version>1.0.0</version>
  </parent>

  <groupId>org.example</groupId>
  <artifactId>shop-admin</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>
  <name>shop-admin</name>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>


    <!-- SpringBoot Web容器 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- SpringBoot 测试 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

  </dependencies>


</project>

执行 maven install 

将启动类改造成Springboot启动,在原来的类上加 @SpringBootApplication注解

@SpringBootApplication
public class App 
{
    public static void main( String[] args )
    {
        SpringApplication.run(App.class,args);
    }
}

在src下创建resources目录,跟Springboot工程结构一样,再创建一个yml配置文件

配置启动项

启动项目

4 总结

到此搭建结束,其实也很简单,这里只是列出一种比较简单的方式,当然还有其他的,大家可以尝试下。