说明:采用idea2019.3.1 gradle有可能会报错,将idea升级到2019.3.4就好了
exception during working with external system: java.lang.AssertionError
at org.jetbrains.plugins.gradle.service.project.BaseGradleProjectResolverExtension.createModule(BaseGradleProjectResolverExtension.java:154)
......
一、创建根项目
1、先创建一个空的gradle项目
创建完成后
2、先看创建的gradle版本
3、在本地配置号gradle,将idea的gradle配置改为本地
4、修改build.gradle,注意springcloud的版本需要和springboot版本对应,具体版本可百度,这里提供一个连接https://www.cnblogs.com/zhuwenjoyce/p/10261079.html
如果不确定springboot版本,可以先创建一个springboot项目,看一下springboot版本然后修改为idea自动创建的版本即可,springcloud根据springboot版本进行修改即可,注意如果不用java1.8也要修改
buildscript {
ext {
springBootVersion = '2.2.5.RELEASE'
springCloudVersion = 'Hoxton.SR1'
}
repositories {
mavenLocal()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
allprojects {
group 'com.qpf'
version '1.0-SNAPSHOT'
apply plugin: 'java'
// 指定JDK版本
sourceCompatibility = 1.8
targetCompatibility = 1.8
//指定编码格式
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
repositories {
mavenLocal()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
mavenCentral()
}
}
subprojects {
//dependency-management 插件
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
imports {
//spring bom helps us to declare dependencies without specifying version numbers.
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootVersion}"
}
}
jar {
manifest.attributes provider: 'gradle'
}
}
5、添加.gitignore文件,根据需要自己修改内容即可,若idea中没有该插件,自己添加一个,不往git上提交的可以忽略此步
三、创建子模块
1、使用spingboot创建子模块consul
一样需要是gradle
此时gradle编译报错,先不用管
exception during working with external system: java.lang.AssertionError
....
2、检查子模块有没有添加到settings.gradle中,若没有手动添加
3、处理:将子模块下的build.gradle文件中除了dependencies中的内容之外全部删除,添加
apply plugin: 'org.springframework.boot'
最终
apply plugin: 'org.springframework.boot'
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
注意修改依赖为:
implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery'
发现报错,按照第五小步处理
4、删除子模块下多余文件,只留下src文件夹和settings.gradle,图片中build文件夹是编译文件不用管
5、如果编译出错则
取消Offline Model,点击gradle中的Toggle Offline Model,然后重新编译
6、配置consul子模块的配置文件,这里我将 application.properties修改为application.yml进行配置
server:
port: 8081
spring:
application:
name: demo-server
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: service-producer
7、windows启动consul服务
8、启动类上添加@EnableDiscoveryClient支持服务发现
启动项目查看,若启动项目有问题,查看windows是否启动了consul,若没有则可查看启动consul方法:https://blog.csdn.net/weixin_41996632/article/details/105047732
9、创建class文件,文件中写入注解,检查jdk包是否能够正常引入
四、 和模块consul一样创建zuul模块
1、build.gradle
apply plugin: 'org.springframework.boot'
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
// 健康检查依赖于此包
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// Spring Cloud Consul 的支持
implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-ribbon'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-zuul'
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
2、application.yml
server:
port: 8082
spring:
application:
name: demo-zuul
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: service-producer
3、启动类添加@EnableDiscoveryClient
4、settings.gradle添加include('demo-zuul')
5、删除多余的文件
最终启动如下图
consul服务查看如下
说明:删除模块时不要直接删文件,需要从项目中移除然后删除File->Project Structure...
然后删除根项目settings.gradle中的include('eureka'),最后从项目中删除子模块文件即可
提示:若不想修改gradle本地文件编译,则不用删除子模块中gradle文件夹就可以(推荐此方法)