專案結構

  接下來我將開始嘗試建立基於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>