lesson 5 聚合项目
之前说完了很多基本的东西,现在来说说在多项目中Gradle是这么做的。
还是使用之前的示例lesson
项目。
我们可以利用IDE直接创建一个module
出来,不过这样就没啥意思了,既然我们刚开始学,还是自己创建吧。
创建一个web
,entity
文件夹,文件结构如下
.
├── build.gradle
├── entity
├── settings.gradle
└── web
接着在这两个项目中创建两个空白的build.gradle
文件。基本的东西就足够了。
然后是修改配置文件了。
把根目录的settings.gradle
中添加以下几行
include 'web','entity'
这样,这两个文件夹就已经被当做module加入到lesson项目中了。他们两个的基本配置就如同之前讲过的单个项目一样,如果是完全不依赖的情况,可以各自配置,完全不影响,我相信这个会比较简单,这里顺便说一下,子模块的配置也是可以在整体中配置的。
在lesson中的build.gradle中使用allprojects
和subprojects
配置
allprojects {
group 'com.lesson'
version '1.0.0'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
subprojects {
apply plugin:'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
repositories {
maven {
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
}
// if (project.name == 'web') { // 也可以使用这样的逻辑判断来区别不同的模块需要加载的配置
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
// }
}
需要注意的是,all配置全部,包括父项目在内,sub只包含子项目,如果配置了相同的属性会根据最后一次执行的位置覆盖。在这两个闭包中,不可以使用plugins
的闭包,同样根据依赖的传递性,插件和依赖都可以省略版本号。
说完了完全独立的情况,如果模块之间需要依赖怎么办呢。
比如web
模块需要依赖entity
模块。
在web
的配置文件中加入
dependencies{
compile project(':entity')
}
project()
是一个方法,参数是:entity
,其中:
表示当前项目,这样就表示在web中引入了entity,说到:
也说明一下,如果在聚合项目中,存在某一个模块也是一个聚合项目时,应该怎么去配置,在settings.gradle中用下面的方式
include 'web:service','web:api'
这样的方式去引入他们就可以了。
下面展示一个完整的示例吧。
settings.gradle
rootProject.name = 'lesson'
include 'web','entity'
lesson中的build.gradle
plugins {
id 'java'
id 'application'
id 'idea'
id 'org.springframework.boot' version '2.1.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.0.RELEASE'
}
group 'com.lesson'
version '1.0.0'
repositories {
maven {
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
}
dependencies {
implementation platform('io.spring.platform:platform-bom:Cairo-SR6')
}
allprojects {
group 'com.lesson'
version '1.0.0'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
subprojects {
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
repositories {
maven {
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
}
if (project.name == 'web') {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
}
}
web中的build.gradle
dependencies{
compile project(':entity')
}
entity中的build.gradle没有内容
在entity中创建一个普通的对象Entity
,它只有name
和age
属性,并重写toString()
方法
然后在web中创建一个spring boot的启动类,和一个Controller,给定访问路径为/hi
,返回一个Entity
的对象
@GetMapping("/hi")
public String hi() {
Entity entity = new Entity();
entity.setName("test");
entity.setAge(15);
return entity.toString();
}
最后启动项目,访问http://localhost:8080/hi
就能得到结果Entity{name='test', age=15}
,表明项目是OK的。