Spring Cloud与微服务中的父Maven模块

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZZY1078689276/article/details/84940354

项目结构

  接下来我将开始尝试创建基于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>

猜你喜欢

转载自blog.csdn.net/ZZY1078689276/article/details/84940354
今日推荐