美文网首页java大搜罗
Spring Boot 创建多模块项目

Spring Boot 创建多模块项目

作者: 小昭文 | 来源:发表于2018-10-26 13:54 被阅读210次

    本文使用IDEA作为开发工具。

    1、构建骨架

    新建一个普通的Spring Boot项目,名称为springboot-multi-module。
    可以参考IDEA新建Spring Boot项目

    image.png

    2、新建一个web子模块

    右键项目>>New>>Module


    image.png

    然后在弹出的子界面中选择的左侧选择Maven,然后Next


    image.png

    输入子模块的名称,然后Next


    image.png

    最后Finish


    image.png

    此时查看原来父类的pom.xml文件,发现packing变为了pom,并且增加了一个modules节点,里面有一个刚添加的web子模块

        <!--新增了modules节点-->
        <modules>
            <module>web</module>
        </modules>
        <!--由原来的jar变为pom-->
        <packaging>pom</packaging>
    
    image.png

    3、移动和删除原来父模块的文件

    在web模块main>java和test>java 下新建原父模块同名的包,这里是com.xiaozhao

    image.png

    然后开始移动文件,把父工程的SpringbootMultiModuleApplication.java、SpringbootMultiModuleApplicationTests.java 、application.properties移动对web子模块下对应的目录中。用鼠标按住文件拖动即可。

    image.png

    拖动完毕后


    image.png

    然后删除src文件夹,最后工程的目录为


    image.png

    4、新建service子模块

    然后按照建立web子模块的方式再新建一个service的子模块

    image.png

    然后在service子模块中新建一个包 com.xiaozhao.service,然后在此包新建一个HelloService的类,内容如下:

    /**
     * @author xiaozhao
     * @date 2018/10/26上午11:13
     */
    @Service
    public class HelloService {
        public String hello(String name) {
            return "Hello " + name;
        }
    }
    
    

    5、在web子模块中引用service子模块的服务

    首先在web子模块的pom.xml文件中增加对service模块的依赖,此处注意artifactId的写法,为service模块中pom.xml中的独立的artifactId

    image.png
        <dependencies>
            <dependency>
                <groupId>com.xiaozhao</groupId>
                <artifactId>service</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    

    新建一个HelloController,内容如下:

    /**
     * @author xiaozhao
     * @date 2018/10/26上午11:14
     */
    @RestController
    @RequestMapping("/user")
    public class HelloController {
    
        @Autowired
        private HelloService helloService;
    
        @GetMapping("/hello/{name}")
        public String sayHello(@PathVariable String name) {
            return helloService.hello(name);
        }
    }
    
    

    最后运行项目,在地址栏输入 http://localhost:8080/user/hello/Kobe

    会看到如下的输出

    *Hello Kobe

    关于打包

    1、打jar包

    经过上述步骤之后,可以直接在IDEA开发工具中直接运行,但是执行maven的打包命令时,却会打包失败,提示找不到mainClass,这个时候在web模块的pom.xml文件下增加一个build节点,其中mainClass的值就是web子模块下的SpringbootMultiModuleApplication

     <build>
            <finalName>${artifactId}-${version}</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <mainClass>com.xiaozhao.SpringbootMultiModuleApplication</mainClass>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    

    然后删除父类pom.xml文件中的build节点

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

    此时再打包就可以成功了


    image.png

    但是这种情况下执行 mvn spring-boot:run 依然会提示找不到主类。

    2、打war包

    也可以打包为war包,放到独立Tomcat下执行。在上面打jar包的基础上做如下的修改:

    2.1 首先将web子模块的pom.xml文件中新增一个packaging节点

     <!--增加节点-->
        <packaging>war</packaging>
    

    2.2 在最外层pom.xml文件中排除内嵌的Tomcat依赖

    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <!--排除tomcat的依赖干扰-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
    
        </dependencies>
    

    2.3 修改web子模块下的 SpringbootMultiModuleApplication

    继承SpringBootServletInitializer,然后再覆盖其中的configure方法

    @SpringBootApplication
    public class SpringbootMultiModuleApplication extends SpringBootServletInitializer {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootMultiModuleApplication.class, args);
        }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(SpringbootMultiModuleApplication.class);
        }
    }
    
    

    最后打成war包即可

    image.png

    完整代码链接

    相关文章

      网友评论

        本文标题:Spring Boot 创建多模块项目

        本文链接:https://www.haomeiwen.com/subject/lplktqtx.html