最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring一個(gè)項(xiàng)目多個(gè)模塊聚合打包問(wèn)題解決方案(最新推薦)

 更新時(shí)間:2023年09月27日 10:55:37   作者:糖果店的幽靈  
最近遇到個(gè)需求,針對(duì)后端解耦模塊較多的項(xiàng)目,想在云端啟動(dòng)時(shí)簡(jiǎn)潔些只啟動(dòng)一個(gè)jar文件的情景,本文重點(diǎn)給大家介紹spring一個(gè)項(xiàng)目多個(gè)模塊聚合打包問(wèn)題解決方案,感興趣的朋友一起看看吧

1.問(wèn)題描述:

最近遇到個(gè)需求,針對(duì)后端解耦模塊較多的項(xiàng)目,想在云端啟動(dòng)時(shí)簡(jiǎn)潔些只啟動(dòng)一個(gè)jar文件的情景。

1)解耦較細(xì)多個(gè)子module一個(gè)項(xiàng)目下

2)只想打到一個(gè)包啟動(dòng)一次

3)原解耦架構(gòu)不想打破、不想重構(gòu)

2.解決方案

針對(duì)此問(wèn)題spring原生自帶處理方式,下面寫(xiě)個(gè)demo

一、創(chuàng)建聚合父工程

1.首先使用 Spring Initializr 來(lái)快速創(chuàng)建好一個(gè)Maven工程。然后刪除無(wú)關(guān)的文件,只需保留pom.xml 文件。這里命名 demo-Project。

在這里插入圖片描述

2.然后在 pom.xml 里面聲明該父工程包含的子模塊。(其它信息就不逐一講述了,諸如繼承SpringBoot官方父工程以及統(tǒng)一依賴(lài)管理 請(qǐng)查看下面的注釋說(shuō)明)

<?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.7.16</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <packaging>pom</packaging>
    <groupId>com.example</groupId>
    <artifactId>demo-Project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-Project</name>
    <description>demo-Project</description>
    <modules>
        <module>demo-starter</module>
        <module>demo-one</module>
        <module>demo-tow</module>
    </modules>
    <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.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>

二、創(chuàng)建子模塊(module)

分別調(diào)整它們的pom.xml 以繼承上面的父工程。例如demo-one模塊的pom.xml 需要改造成這樣:

<?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>com.example</groupId>
        <artifactId>demo-Project</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo-one</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-one</name>
    <description>demo-one</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <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>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
<!--    <build>-->
<!--        <plugins>-->
<!--            <plugin>-->
<!--                <groupId>org.springframework.boot</groupId>-->
<!--                <artifactId>spring-boot-maven-plugin</artifactId>-->
<!--            </plugin>-->
<!--        </plugins>-->
<!--    </build>-->
</project>

三、編寫(xiě)子模塊代碼

在這里插入圖片描述

注:正常是控制層、業(yè)務(wù)層、數(shù)據(jù)層等的解耦,目前是簡(jiǎn)單多業(yè)務(wù)架構(gòu)模式假設(shè)每模塊里都有自己的service、entity、repo、service等層次代碼只是demo簡(jiǎn)單寫(xiě)了。

1.模塊1(demo-one)

啟動(dòng)類(lèi) :DemoOneApplication.java (demo-one)

package com.example.demoone;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoOneApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoOneApplication.class, args);
    }
}

控制器:ConTeone.java (demo-one)

package com.example.demoone.controler;
import com.example.demoone.bean.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConTeone {
    @Autowired
    User user;
    @PostMapping("/contest1")
    public String test1(){
        return "test1";
    }
    @PostMapping("/contest1/onebean")
    public User test2(){
        return user;
    }
}

javabean User類(lèi):

package com.example.demoone.bean;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.io.Serializable;
@Data
@Component
@ConfigurationProperties(prefix = "user")
@JsonSerialize
public class User{
    String username;
    String password;
}

配置文件:application.yml (demo-one)

server:
  port: 8081
user:
  username: admin
  password: admin
spring:
  profiles:
    active: true

2.模塊2(demo-tow)

啟動(dòng)類(lèi) :DemoTowApplication.java (demo-tow)

package com.example.demotow;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoTowApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoTowApplication.class, args);
    }
}

控制器:Contest.java (demo-tow)

package com.example.demotow.controler;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Contest {
    @PostMapping("/contest2")
    public String testTow(){
        return "test2";
    }
}

配置文件:application.yml (demo-tow) 這個(gè)不配了沒(méi)寫(xiě)特殊的東西,只是在demo-one里寫(xiě)了從yml配置好做演示。

四、創(chuàng)建聚合模塊 (demo-starter)

創(chuàng)建聚合模塊 它的pom.xml 以繼承上面的父工程。代碼為普通的spring-web的項(xiàng)目即可,擁有初始的 啟動(dòng)類(lèi)即可。但是啟動(dòng)類(lèi)需要開(kāi)啟包路徑掃描。
要求:

1)開(kāi)啟包掃描;
2)要繼承 子模塊demo-one、demo-tow;
3)要有打包插件配置 spring-boot-maven-plugin;
4)其他子模塊需要去掉打包插件 這很重要。

1. starter聚合模塊pom配置 (依賴(lài)子模塊很重要)

下圖依賴(lài)了兩個(gè)子模塊。

下圖的打包配置,最簡(jiǎn)單的配置即可,當(dāng)然看項(xiàng)目而定 有復(fù)雜需求按自己實(shí)際配置即可。

<?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.7.16</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-starter</name>
    <description>demo-starter</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>demo-one</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>demo-tow</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <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>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2.starter聚合模塊開(kāi)啟包掃描 (很重要)

特別注意:如果子模塊包路徑和啟動(dòng)類(lèi)的根路徑一致,不加上述注解也可,我這就是一樣的但是為了演示所以還是配置了。

五、打包測(cè)試

萬(wàn)事俱備直接打包測(cè)試即可了。

在父pom的項(xiàng)目路徑下打包

mvn clean package

打出來(lái)的包 在 demo-starter所在的路徑里,當(dāng)然運(yùn)行 install 在本地倉(cāng)庫(kù)找也可;發(fā)布制品庫(kù)的話(huà)直接發(fā)布上去的也是 demo-starter;

六、最后的最后 測(cè)試一下效果

啟動(dòng) demo-starter

java -jar .\demo-starter-0.0.1-SNAPSHOT.jar

demo-one的 返回User的接口

demo-one 的返回string的接口

demo-tow的返回string的接口

到此這篇關(guān)于spring一個(gè)項(xiàng)目多個(gè)模塊聚合打包問(wèn)題解決方案的文章就介紹到這了,更多相關(guān)spring多個(gè)模塊聚合打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

平泉县| 宁波市| 炉霍县| 台南县| 建德市| 盐源县| 宁远县| 吉水县| 兖州市| 邓州市| 海林市| 瑞昌市| 沙田区| 广西| 雅江县| 沙坪坝区| 龙州县| 阳谷县| 大石桥市| 永登县| 尤溪县| 上饶市| 堆龙德庆县| 长武县| 南京市| 大邑县| 枣强县| 文登市| 栾城县| 成武县| 永善县| 抚宁县| 天峨县| 乌兰察布市| 饶阳县| 全椒县| 阳东县| 东乡族自治县| 三门峡市| 余庆县| 谢通门县|