gradle - 如何在考虑相对路径的情况下使用多项目设置 settings.gradle 和 build.gradle
问题描述
我制作了一个类似目录的java多项目,如下所示
myRoot
┝ settings.gradle
┝ build.gradle
┗ core
┗ ┗━ web
└ └ ── build.gradle
└ └ ── src
┗ ┗━ corecommon
└ └ ── build.gradle
└ └ ── src
┗ ┗━ frame
└ ─ ── build.gradle
└ ─ ── src
┗ biz
┗ ┗━ model
└ ─ ── build.gradle
└ ─ ── src
┗ ┗━ bizcommon
└ ─ ── build.gradle
└ ─ ── src
为了包含我的多项目,我写了一个settings.gradle
如下的根目录。
rootProject.name = 'myRoot'
rootDir.eachDir { dir ->
if(dir.name.startsWith('core')){
dir.eachDir {eachDir ->
include eachDir.name
project(":${eachDir.name}").projectDir = eachDir
}
}
if(dir.name.startsWith('biz')){
dir.eachDir {eachDir ->
include eachDir.name
project(":${eachDir.name}").projectDir = eachDir
}
}
}
这是我build.gradle
的根目录的总结版本。
buildscript {
...
}
allprojects {
group 'com.myRoot'
version '0.1.1'
repositories {
flatDir {
dirs "$rootProject.projectDir/libs"
}
mavenCentral()
}
}
subprojects {
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
configurations {
developmentOnly
runtimeClasspath {
extendsFrom developmentOnly
}
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
flatDir {
dirs "$rootProject.project.buildDir"
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'
...
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
bootRun{
systemProperties = System.properties
}
}
task initSourceFolders {
sourceSets*.java.srcDirs*.each {
if (!it.exists()) {
it.mkdirs()
}
}
sourceSets*.resources.srcDirs*.each {
if (!it.exists()) {
it.mkdirs()
}
}
}
}
project(':corecommon') {
dependencies {
compile project(path: ':model')
}
}
project(':bizcommon') {
dependencies {
compile project(path: ':model')
compile project(path: ':corecommon')
}
}
project(':frame') {
dependencies {
compile project(path: ':model')
compile project(path: ':corecommon')
compile project(path: ':bizcommon')
}
}
project(':web') {
dependencies {
compile project(path: ':model')
compile project(path: ':corecommon')
compile project(path: ':bizcommon')
compile project(path: ':frame')
}
}
由于我的逻辑Main
类包含在web
项目中,所以我组成web/build.gradle
如下。
plugins {
}
bootJar {
enabled = true
archiveBaseName = 'myRoot'
}
jar { enabled = true }
group 'com.myRoot'
version '0.1.1'
dependencies {
...
}
task copyTask(type: Copy) {
copy {
from 'build/libs'
into project.parent.buildDir
}
}
问题是我当地的环境在corecommon
上课方面没有错。但是,当我通过 gitlab-runner 部署时,corecommon
类没有在web
项目中注册。
似乎 gitlab-runner 上的逻辑路径与 my settings.gradle
or不兼容build.gradle
。
有人对这种情况有什么看法吗?
解决方案
推荐阅读
- mysql - 如何在 Django RF 项目中使用 UUID 作为主键来保留原始 ID?
- azure - 如何避免 .Net Core 上 Azure 表存储/Cosmos DB 表 API 的启动延迟
- docker - 是否可以直接从 ACR 运行 docker 映像
- linq2db - Linq2DB 和动态查询
- android - 是否可以将 Material ChipGroup 方向设置为 VERTICAL?
- loopbackjs - 环回根据请求发送关系数据
- logging - IBM Watson Assistant list_logs 函数
- c# - 如何在 Core Razor Pages 2.0 中表示相同的 MVC Core Controller Action 方法
- odoo - 设计横向格式的自定义 qweb 报告
- python - 工厂男孩 - 如何创建工厂所需的数据(预生成挂钩)