1. 程式人生 > >springboot建立多模組modules應用demo

springboot建立多模組modules應用demo

為什麼要使用多模組開發

        在平時的開發中,為了便於後期的維護,我們一般採用多模組開發。最常用的分層就是:domain、dao、service、web層。分層之後,各層級模組的職責功能明確,後期維護的時候會輕鬆許多。

多模組開發的核心:pom

        pom: Project Object Model 專案物件模型.pom檔案都是對應一個專案。

        而我們這裡要說的多模組,也是根據pom檔案進行的關聯。

<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>
  <groupId>com.demo</groupId>
  <artifactId>demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build/>
</project>

一個基本的pom檔案主要引數有:

project: pom.xml的頂級元素

modelVersion: 表示pom使用哪個版本的物件模型

groupId: 建立這個專案的團隊或組織標識

artifactId: 專案的名稱

version: 版本

packaging: 打包型別,如果是父專案,應為pom,子專案可為jar,war等

多模組專案的建立示例

(1)使用myeclipse新建一個maven專案


這個專案userParent是作為父專案,所以設定packaging為pom.

建立成功後顯示為:


刪除src資料夾

(2)建立子專案

在父專案上右鍵:New -> Maven Module


選擇packaging為預設的jar,父專案已預設選定



照此步驟,建立userDao,userService,userWeb專案

得到專案結構是:


(3)子模組之間依賴關係繫結

在實際專案中,各個子模組之間不是完全獨立的,可能會有一些依賴關係。比如userWeb會依賴userService,userDao,userDomain.而userDao依賴userDomain。那這些依賴關係,我們需要在pom檔案中進行配置,讓程式知道它們的繫結關係。

比如在userWeb的pom檔案中的繫結關係:

		<dependency>
			<groupId>com.xl</groupId>
			<artifactId>userService</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>com.xl</groupId>
			<artifactId>userDao</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>com.xl</groupId>
			<artifactId>userDomain</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
與此類似,將userService和userDao之間的繫結關係在pom檔案中建立起來

(4)啟動測試

啟動userWeb中的App類,瀏覽器測試。


多模組專案的打包示例

打包測試的時候,遇到了很多問題。

在父專案的pom中需配置

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skipTests>true</skipTests>    <!--預設關掉單元測試 -->
				</configuration>
			</plugin>
		</plugins>
	</build>

在userWeb的pom中配置

	<build>
		<plugins>
			<plugin>
				<!-- The plugin rewrites your manifest -->
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration><!-- 指定該Main Class為全域性的唯一入口 -->
					<mainClass>org.userWeb.App</mainClass>
					<layout>ZIP</layout>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal><!--可以把依賴的包都打包到生成的Jar包中 -->
						</goals>
						<!--可以生成不含依賴包的不可執行Jar包 -->
						<!-- configuration> <classifier>exec</classifier> </configuration> -->
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

如果這裡不配置,在啟動時候會報錯:

PS F:\workspace\userParent\userWeb\target> java -jar .\userWeb-0.0.1-SNAPSHOT.jar
.\userWeb-0.0.1-SNAPSHOT.jar中沒有主清單屬性

配置好了之後,在userParent目錄下,執行mvn install package

在userParent的userWeb/target/下執行 java -jar .\userWeb-0.0.1-SNAPSHOT.jar

那整個平臺就執行起來了。