接下来我将开始尝试创建基于SpringCloud的eureka微服务项目架构,首先看一下项目的总体文件模块结构:
其对应的Maven模块结构如下:
springcloud-parent父模块在这里的作用主要有如下这么几点:
比如说下面的指定spring boot的parent,也就是说指定当前模块是哪一个Maven模块的子模块,这样自该模块下的所有子模块,全部都会继承该parent父模块中的依赖。
org.springframework.boot
spring-boot-starter-parent
1.5.4.RELEASE
它的另一个作用是指定子模块所继承的公共依赖,比如说junit测试依赖,比如说logging日志依赖等等都是如此。
org.junit.jupiter
junit-jupiter-api
5.3.2
test
Maven父模块是通过如下方式自动加载子模块的:
springcloud-goods-item
springcloud-goods-order
springcloud-eureka
springcloud-eureka2
springcloud-goods-item2
springcloud-api-gateway
springcloud-config-server
springcloud-config-resources
rabbit-mq-resources
springcloud-goods-db
这样我们在父模块中执行Maven指令,其Maven指令会自动的传递到子Maven模块中执行,比如说下面的指令就是如此:
mvn clean
它的意思是清理父模块以及子模块中的target文件夹
根据Maven的规则,一旦在父模块中指定版本号,其子模块就不用指定版本号了,因为子模块的版本号默认与父模块相同。
其通过plugins来指定子模块中所使用的插件版本及信息,这样子模块中就无需重复再写了,直接使用父模块中的插件及对应的版本,比如说Maven的编译插件maven-compiler-plugin等。
在这里,其指定的是将Spring Cloud的配置文件*.yml
视为资源文件进行使用,比如说打入war包等。当然,位于resources文件夹内的文件,默认就是资源文件,所以说这里也可以省略。
src/main/resources
**/*.yml
false
当我们配置好了distributionManagement,我们可以通过使用如下指令将项目发布到私服中:
mvn deploy -Dmaven.test.skip=true
其中的 -Dmaven.test.skip=true
指的是忽略测试文件。
这里使用maven-resources-plugin插件来统一Maven众多子模块中的parent的版本号信息。
当我们修改了父模块的版本号时,我们要统一修改子模块中的版本号信息,此时我们可以直接执行如下命令:
mvn -N versions:update-child-modules
当然,我们还可以使用另一种方式,就是在所有的子模块的parent中通过EL表达式指定父模块的版本号,如下:
${springcloud.goods.version}
这里的代码亲测可用,只是在IDEA中报错,但是并不影响使用,而由于我有洁癖,看着IDE报红,实在不忍直视,所以说就没有采用这种方式,而是直接通过maven-resources-plugin来进行统一管理。
pom.xml
源码:
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.4.RELEASE
com.lyc
springcloud-parent
1.0-RELEASE
pom
UTF-8
springcloud-goods-item
springcloud-goods-order
springcloud-eureka
springcloud-eureka2
springcloud-goods-item2
springcloud-api-gateway
springcloud-config-server
springcloud-config-resources
rabbit-mq-resources
springcloud-goods-db
SpringCloud微服务
http://www.example.com
org.junit.jupiter
junit-jupiter-api
5.3.2
test
org.projectlombok
lombok
1.18.4
org.springframework.boot
spring-boot-starter-logging
nexus-releases
releases for lyc
http://118.190.210.59:8081/repository/maven-releases/
nexus-snapshots
snapshots for lyc
http://118.190.210.59:8081/repository/maven-snapshots/
${project.artifactId}
src/main/resources
**/*.yml
false
org.apache.maven.plugins
maven-resources-plugin
3.1.0
UTF-8
org.apache.maven.plugins
maven-compiler-plugin
3.8.0
1.8
UTF-8
org.apache.maven.plugins
maven-clean-plugin
3.1.0
org.apache.maven.plugins
maven-deploy-plugin
3.0.0-M1
org.apache.maven.plugins
maven-install-plugin
3.0.0-M1
org.apache.maven.plugins
maven-jar-plugin
3.1.0
org.apache.maven.plugins
maven-site-plugin
3.7.1
org.apache.maven.plugins
maven-surefire-plugin
3.0.0-M1
org.codehaus.mojo
versions-maven-plugin
2.3
false
org.apache.maven.plugins
maven-resources-plugin
3.1.0
UTF-8
org.apache.maven.plugins
maven-compiler-plugin
3.8.0
1.8
UTF-8
org.apache.maven.plugins
maven-clean-plugin
3.1.0
org.apache.maven.plugins
maven-deploy-plugin
3.0.0-M1
org.apache.maven.plugins
maven-install-plugin
3.0.0-M1
org.apache.maven.plugins
maven-jar-plugin
3.1.0
org.apache.maven.plugins
maven-site-plugin
3.7.1
org.apache.maven.plugins
maven-surefire-plugin
3.0.0-M1