簡體   English   中英

Gradle 多項目存儲庫配置不適用於 spring-boot 應用程序

[英]Gradle multi-project repository configuration not working for spring-boot application

我有一個簡單的多項目結構如下:

|- gps-framework
|- build.gradle
|- settings.gradle
|- gps-web-service
|----build.gradle
|----src/main....

在位於gps-framework/根目錄下的build.gradl e 看起來像這樣:

plugins {
    id 'java'
    id "java-library"
    id "maven-publish"
    id "jacoco"
    id 'org.springframework.boot' version '2.3.4.RELEASE'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
}

subprojects {

    subproject ->
        
        apply plugin: 'maven-publish'
        apply plugin: 'jacoco'
      
        def isApp = subproject.name == 'gps-web-service'

        if (isApp) {
            apply plugin: 'java'
        } else {
            apply plugin: 'java-library'
        }

        group = 'com.mycompnay'
        version = project.hasProperty('customVersion') ? project['customVersion'] : 'integration-SNAPSHOT'

        //System.out.println(subproject.name)

        compileJava {
            sourceCompatibility = '1.8'
            targetCompatibility = '1.8'

            options.encoding = 'UTF-8'
     
        }

        compileTestJava {
            sourceCompatibility = '1.8'
            targetCompatibility = '1.8'

            options.encoding = 'UTF-8'

        }

        repositories {
            mavenCentral()
            mavenLocal()

            maven {
                name "release"
                url "my-custom-mvn-repo/release"
                authentication {
                    //
                }
            }

            maven {
                name "snapshot"
                url "my-custoom-mvn-repo/snapshot"
                authentication {
                    //
                }
            }
        }

        configurations {
            runtime.exclude(group: "org.slf4j", module:"slf4j-log4j12")
        }

        publishing {
            repositories {
                maven {
                    authentication {
                        //
                    }
                    def isSnapshot = subproject.version.contains('SNAPSHOT')
                    url =  isSnapshot ? "my-custom-mvn-repo/snapshot" : "my-custom-mnv-repo/release"
                }
            }
        }

        jacocoTestReport {
            reports {
                xml.enabled true
                html.enabled true
            }
        }

        if (subproject.hasProperty('jacocoTestCoverageVerification')) {
            subproject.check.dependsOn subproject.jacocoTestCoverageVerification
        }

        test {
            testLogging {
                exceptionFormat = 'full'
            }
        }
}

位於gps-framework/gps-web-service的子項目 gps-web-service 的build.gradle如下所示:

group = 'com.mycompany'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'


dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}

從我到目前為止所讀到的內容來看,由於存儲庫設置是在根 build.gradle 中定義的,並且這些設置被注入到這些子項目中,因此我不需要重新定義存儲庫設置。 這似乎不像我跑步時的情況

./gradlew build

我得到的錯誤是:

Could not find org.springframework.boot:spring-boot-starter-web:.
Required by:
    project :gps-web-service

Possible solution:
 - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html

我是否誤解了注入項目屬性的整個概念,或者我在這里遺漏了什么? 我將嘗試復制子項目 build.gradle 中的 repo 設置,但希望這不是必需的。

為了解決這個特定的問題,我不得不在子項目的 build.gradle 中定義 spring boot 插件如下:

plugins {
    id 'org.springframework.boot' version '2.3.4.RELEASE'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
}

生成的文件如下所示:

plugins {
        id 'org.springframework.boot' version '2.3.4.RELEASE'
        id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    }

group = 'com.mycompany'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'


dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM