В частности, в модулях каталог сборки: каталоги build/classes, build/generated и build/resources отсутствуют, а build/libs, build/publications и Для каждого модуля создаются каталоги build/tmp.
Модули зависят друг от друга.
Использование Gradle 8.4
Вот мой settings.gradle(корневой каталог):
Код: Выделить всё
rootProject.name = 'project-root'
include('module1')
include('module1-test')
include('module2')
include('module2-test')
include('module3')
include('module3-test')
// ... other models
rootProject.children.each { it.projectDir = new File(settingsDir, sprintf("../%s", it.name)) }
Код: Выделить всё
plugins {
id 'idea'
id 'java'
id 'java-library'
id 'maven-publish'
id 'jacoco'
id 'checkstyle'
id 'com.github.spotbugs' version "${spotbugs_version}"
id 'io.spring.dependency-management' version "${spring_dependency_management_version}"
}
subprojects {
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'maven-publish'
apply plugin: 'jacoco'
apply plugin: 'checkstyle'
apply plugin: 'io.spring.dependency-management'
repositories {
mavenCentral()
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
tasks.withType(JavaCompile).configureEach {
options.encoding = "UTF-8"
options.compilerArgs.add("-parameters")
}
sourceSets {
main {
java {
srcDirs = ['src/main/java']
}
resources {
srcDirs = ['src/main/resources']
}
}
test {
java {
srcDirs = ['src/test/java']
}
resources {
srcDirs = ['src/test/resources']
}
}
}
tasks.named('jar') {
manifest {
attributes(
'Implementation-Title': project.name,
'Implementation-Version': project.version
)
}
archiveBaseName.set(rootProject.name)
}
java {
withJavadocJar()
withSourcesJar()
}
dependencyManagement {
imports {
mavenBom("org.springframework.boot:spring-boot-dependencies:$spring_boot_version")
}
}
idea {
module {
downloadJavadoc = true
downloadSources = true
}
}
test {
useJUnitPlatform()
finalizedBy jacocoTestReport
testLogging {
events "passed", "skipped", "failed"
}
}
jacoco {
toolVersion = "0.8.11"
reportsDirectory = layout.buildDirectory.dir("$buildDir/reports/jacoco")
}
jacocoTestCoverageVerification {
violationRules {
rule {
element = 'CLASS'
limit {
counter = 'LINE'
minimum = 0.90
}
limit {
counter = 'BRANCH'
minimum = 0.90
}
excludes = [
'com.example.project.',
'com.example.project.',
// ... other excludes
]
}
}
}
checkstyle {
toolVersion = checkstyle_version
}
check.dependsOn(
checkstyleMain,
checkstyleTest,
test,
jacocoTestReport,
jacocoTestCoverageVerification
)
publishing {
repositories {
maven {
name = "GitHubPackages"
url = "https://maven.pkg.github.com/username/repository"
credentials {
username = System.getenv("GITHUB_USERNAME")
password = System.getenv("GITHUB_TOKEN")
}
}
}
publications {
mavenJava(MavenPublication) {
groupId group
artifactId project.name
version = project.version
from(components.java)
}
}
}
}
dependencies {
implementation project(':module1')
implementation project(':module1-test')
implementation project(':module2')
implementation project(':module2-test')
implementation project(':module3')
implementation project(':module3-test')
// ... other dependencies
}
Код: Выделить всё
project-root/
├── settings.gradle
├── build.gradle
├── model1/
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── model1/
│ │ │ └── Model1.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── model1/
│ │ └── Model1Test.java
│ └── resources/
│ └── test-application.properties
├── model1-test/
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── model1test/
│ │ │ └── Model1TestHelper.java
│ │ └── resources/
│ │ └── helper-config.properties
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── model1test/
│ │ └── Model1TestHelperTest.java
│ └── resources/
│ └── test-helper-config.properties
├── model2/
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── model2/
│ │ │ └── Model2.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── model2/
│ │ └── Model2Test.java
│ └── resources/
│ └── test-application.properties
├── model2-test/
│ ├── build.gradle
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── model2test/
│ │ │ └── Model2TestHelper.java
│ │ └── resources/
│ │ └── helper-config.properties
│ └── test/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── model2test/
│ │ └── Model2TestHelperTest.java
│ └── resources/
│ └── test-helper-config.properties
Код: Выделить всё
dependencies {
implementation project(':module2')
implementation project(':module3')
implementation group: 'org.apache.commons', name: 'commons-lang3'
compileOnly group: 'org.projectlombok', name: 'lombok'
annotationProcessor group: 'org.projectlombok', name: 'lombok'
testImplementation project(':module1-test')
}
Я был бы признателен за любые идеи или предложения о том, что может произойти. неправильно и какие изменения мне следует внести, чтобы обеспечить создание всех ожидаемых каталогов.
Заранее большое спасибо!
Подробнее здесь: https://stackoverflow.com/questions/788 ... -resources