博客概要:Springboot多模塊項目搭建 + 打包jar運行 + 打包war運行 + 一個啓動類(有的項目是多模塊多個啓動類),爲後續的SpringCloud項目做準備。web
父工程:father 子模塊:sun一、sun二、web(啓動模塊)
勾選SpringWeb和lombokspring
如圖所示apache
而後刪除src文件夾,如圖:app
而後修改pom文件,添加一行打包類型maven
<packaging>pom</packaging>
建立3個子模塊,分別爲sun一、sun二、web,不勾選任何依賴。spring-boot
建立好三個模塊以後,在father項目父工程pom.xml添加依賴單元測試
<modules> <module>sun1</module> <module>sun2</module> <module>web</module> </modules>
更換pom.xml插件,準備打包使用測試
<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> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <configuration> <skipTests>true</skipTests> <!--默認關掉單元測試 --> </configuration> </plugin> </plugins> </build>
更換繼承:sun一、sun二、web三個子模塊分別繼承father父工程,這樣就一樣擁有了lombok以及web的依賴ui
<parent> <groupId>com.osc</groupId> <artifactId>father</artifactId> <version>0.0.1-SNAPSHOT</version> </parent>
刪除:由於web是啓動類項目,不須要因此相關的打包插件,可是sun一、sun2須要刪除下面的,由於是多餘的,以下:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
刪除:刪除共同的配置
<properties> <java.version>1.8</java.version> </properties>
添加:打包類型
<packaging>jar</packaging>
sun1項目上建立entity層,這個時候就可使用lombok插件了,由於繼承了父工程
@Data @AllArgsConstructor @ToString public class UserEntity { private String name; private int age; private String address; }
sun2定義爲service層,須要使用sun1的實體類,而後依賴sun1,在sun2的pom.xml中配置
<dependency> <groupId>com.osc</groupId> <artifactId>sun1</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
編寫service
@Service public class HelloService { public UserEntity getUser(){ return new UserEntity("jiutian",23,"beijing"); } }
這個時候咱們就是引用sun1的實體類
最後咱們建立web層,這個不須要刪除啓動類,而後都依賴sun1,sun2,把他們引入到pom.xml文件中,添加sun1,sun2依賴。
<dependency> <groupId>com.osc</groupId> <artifactId>sun1</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.osc</groupId> <artifactId>sun2</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
最後在啓動類上添加掃描,由於多個模塊,web啓動類運行的話默認只運行掃描本身這個模塊,致使找不到其餘模塊,因此添加一個掃描。
@ComponentScan(basePackages = {"com.osc.sun2.service","com.osc.web.controller"})
而後web項目上建立一個controller層
@RestController public class HelloController { @Autowired HelloService helloService; @GetMapping(value = "/test") public String test(){ return helloService.getUser().toString(); } }
在web項目pom.xml中插件更換爲
<build> <!--打包以後的名字--> <finalName>demo_many</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.osc.web.WebApplication</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> <!-- <!–能夠生成不含依賴包的不可執行Jar包–> <configuration> <classifier>exec</classifier> </configuration>--> </execution> </executions> </plugin> </plugins> </build>
而後使用IDEA右側maven,固然,這個maven必定是root的,也就是父工程下面才能夠,以下:
而後jar包打包成功,如圖:
而後jar包就此成功,而後咱們去命令行啓動
這個時候啓動了,咱們繼續剛剛訪問,
這個和本地測試同樣,說明jar包成功。
將web項目的pom文件
<packaging>war</packaging>
而後刪掉指向類配置,剩下的以下
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins>
如圖:
關掉以前啓動的jar命令,用kill -9 關掉,而後啓動war,如圖:
接下來,繼續測試,
仍是以前的結果,說明不管是咱們在IDEA上測試,仍是經過打包jar或者war,均可以獲得相同結果,這就說明咱們的多模塊項目單啓動類配置完成了。
注意:並非只有web項目才能夠寫controller層,若是你再建立一個模塊,把它依賴引入,而後在啓動類上添加掃描位置,其餘子模塊的controller也是能夠執行的。通常狀況下咱們企業作項目也每每是這樣子的,一個模塊的controller層用來後臺管理系統的,另一個模塊的controller層用來前臺系統的。