Spring Cloud與微服務中的父Maven模組
文章目錄
專案結構
接下來我將開始嘗試建立基於SpringCloud的eureka微服務專案架構,首先看一下專案的總體檔案模組結構:
其對應的Maven模組結構如下:
springcloud-parent中pom.xml
springcloud-parent中pom.xml的作用
springcloud-parent父模組在這裡的作用主要有如下這麼幾點:
- 指定專案的公共依賴模組
比如說下面的指定spring boot的parent,也就是說指定當前模組是哪一個Maven模組的子模組,這樣自該模組下的所有子模組,全部都會繼承該parent父模組中的依賴。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> </parent>
它的另一個作用是指定子模組所繼承的公共依賴,比如說junit測試依賴,比如說logging日誌依賴等等都是如此。
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>
- 載入子Maven模組
Maven父模組是通過如下方式自動載入子模組的:
<modules>
<module>springcloud-goods-item</module>
<module>springcloud-goods-order</module>
<module>springcloud-eureka</module>
<module>springcloud-eureka2</module>
<module>springcloud-goods-item2</module>
<module>springcloud-api-gateway</module>
<module>springcloud-config-server</module>
<module>springcloud-config-resources</module>
<module>rabbit-mq-resources</module>
<module>springcloud-goods-db</module>
</modules>
這樣我們在父模組中執行Maven指令,其Maven指令會自動的傳遞到子Maven模組中執行,比如說下面的指令就是如此:
mvn clean
它的意思是清理父模組以及子模組中的target資料夾
- 指定子Maven模組的軟體版本
根據Maven的規則,一旦在父模組中指定版本號,其子模組就不用指定版本號了,因為子模組的版本號預設與父模組相同。
- 指定子Maven模組的外掛資訊
其通過plugins來指定子模組中所使用的外掛版本及資訊,這樣子模組中就無需重複再寫了,直接使用父模組中的外掛及對應的版本,比如說Maven的編譯外掛maven-compiler-plugin等。
- 指定子Maven模組的資源打包方式
在這裡,其指定的是將Spring Cloud的配置檔案*.yml
視為資原始檔進行使用,比如說打入war包等。當然,位於resources資料夾內的檔案,預設就是資原始檔,所以說這裡也可以省略。
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
<filtering>false</filtering>
</resource>
- 指定Maven專案的私服上傳地址
當我們配置好了distributionManagement,我們可以通過使用如下指令將專案釋出到私服中:
mvn deploy -Dmaven.test.skip=true
其中的 -Dmaven.test.skip=true
指的是忽略測試檔案。
- 統一子模組中的父模組版本號
這裡使用maven-resources-plugin外掛來統一Maven眾多子模組中的parent的版本號資訊。
當我們修改了父模組的版本號時,我們要統一修改子模組中的版本號資訊,此時我們可以直接執行如下命令:
mvn -N versions:update-child-modules
當然,我們還可以使用另一種方式,就是在所有的子模組的parent中通過EL表示式指定父模組的版本號,如下:
<version>${springcloud.goods.version}</version>
這裡的程式碼親測可用,只是在IDEA中報錯,但是並不影響使用,而由於我有潔癖,看著IDE報紅,實在不忍直視,所以說就沒有采用這種方式,而是直接通過maven-resources-plugin來進行統一管理。
原始碼
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 http://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>1.5.4.RELEASE</version>
</parent>
<groupId>com.lyc</groupId>
<artifactId>springcloud-parent</artifactId>
<version>1.0-RELEASE</version>
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modules>
<module>springcloud-goods-item</module>
<module>springcloud-goods-order</module>
<module>springcloud-eureka</module>
<module>springcloud-eureka2</module>
<module>springcloud-goods-item2</module>
<module>springcloud-api-gateway</module>
<module>springcloud-config-server</module>
<module>springcloud-config-resources</module>
<module>rabbit-mq-resources</module>
<module>springcloud-goods-db</module>
</modules>
<name>SpringCloud微服務</name>
<url>http://www.example.com</url>
<dependencies>
<!--新增junit5測試依賴-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.2</version>
<scope>test</scope>
</dependency>
<!-- lombok依賴 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
<!--spring-boot日誌依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
</dependencies>
<!--釋出專案到Maven私服-->
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>releases for lyc</name>
<url>http://118.190.210.59:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>snapshots for lyc</name>
<url>http://118.190.210.59:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
<build>
<finalName>${project.artifactId}</finalName>
<!--必須加入下面的程式碼,因為不加的話,有的時候能載入配置檔案,有的時候不能載入,
而如果加入的話,那麼其一定能夠將其載入到配置檔案中。
-->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>