gpt4 book ai didi

java - 你如何参数化 Spring Boot Gradle 插件?

转载 作者:行者123 更新时间:2023-12-03 02:41:45 24 4
gpt4 key购买 nike

我们正在寻求从 Maven 迁移到 Gradle,并且已经解决了您期望替换父 POM 概念的大部分挑战。有一个关键点我们还没有弄清楚。我们需要指定我们在全局范围内使用的 Spring Boot 版本,但是我遇到了我尝试过的两种解决方案的无效构建文件问题:

  • 我试着把 plugins { id 'org.springframework.boot' version '2.1.17.RELEASE' }通用构建脚本中的声明。 构建错误 , “只有 Project 和 Settings 构建脚本可以包含插件 {} 块。”
  • 我尝试调用通用构建文件来指定 springBootVersion参数并在插件声明中使用它。 构建错误 , “在 plugins {} 块之前只允许 buildscript {} 和其他插件 {} 脚本块,不允许其他语句”

  • 如果我可以简单地 apply plugin: 'org.springframework.boot',所有这一切都会更容易。但是 Gradle 找不到插件。除了一个微服务外,所有微服务都在单一版本的 Spring Boot 上,如果可能的话,我们希望能够进行全局升级。
    附加信息
  • 我有大约 40 个微服务以及这些服务使用的一些库
  • 他们每个人都有单独的存储库,所以正常的父/子方法不起作用
  • Maven 父 POM 允许您将该 POM 作为它自己的资源发布,并且 Gradle 中没有 1:1 等效功能
  • Gradle pluginManagement这个概念对我们也不起作用,因为它解决了 Spring Boot 插件,但现在找不到依赖管理插件。

  • 我的常用构建脚本包含在此处:
    repositories {
    mavenLocal()

    /* Removed our internal repositories */

    jcenter()
    mavenCentral()
    }

    apply plugin: 'java'
    apply plugin: 'jacoco'
    apply plugin: 'maven-publish'
    apply plugin: 'io.spring.dependency-management'

    group = 'nedl-unified-platform'

    /* Required to publish Spring Boot microservices to publish to repository */
    configurations {
    [apiElements, runtimeElements].each {
    it.outgoing.artifacts.removeIf { it.buildDependencies.getDependencies(null).contains(jar) }
    it.outgoing.artifact(bootJar)
    }
    }

    java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
    withJavadocJar()
    withSourcesJar()
    }

    ext {
    set('springBootVersion', '2.1.17.RELEASE')
    set('springCloudVersion', "Greenwich.SR6")
    }

    dependencyManagement {
    imports {
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
    }

    jacoco {
    toolVersion = "0.8.5"
    reportsDir = file("$buildDir/reports/jacoco")
    }

    test {
    finalizedBy jacocoTestReport // report is always generated after tests run
    }

    jacocoTestCoverageVerification {
    violationRules {
    rule {
    limit {
    minimum = 0.2
    }
    }
    }
    }

    jacocoTestReport {
    dependsOn test // tests are required to run before generating the report

    reports {
    xml.enabled true
    html.destination file("${reportsDir}/jacocoHtml")
    xml.destination file("${reportsDir}/jacocoReport.xml")
    }
    }

    tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
    }

    publishing {
    publications {
    maven(MavenPublication) {
    from components.java
    }
    }

    repositories {
    /* excluded for privacy and brevity's sake, our internal Maven repo */
    }
    }

    这是由我们要参数化的项目构建脚本调用的:
    plugins {
    id 'org.springframework.boot' version springBootVersion
    }

    apply from: "https://mycentral.repo/project-common/develop/build.gradle"

    dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
    implementation 'ch.qos.logback:logback-classic'
    implementation 'javax.annotation:javax.annotation-api:1.3.2'
    implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'
    implementation 'org.glassfish.jaxb:jaxb-runtime:2.4.0-b180830.0438'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }

    version = '0.0.2-SNAPSHOT'

    最佳答案

    我不确定我是否完全理解您的问题,但您应该使用 Gradle 方式共享配置:根项目配置。
    不要在每个项目中都包含通用构建脚本,而是创建一个全局项目并在此处设置配置。

    root
    |
    | --- projectA
    | --- projectB
    | --- projectC
    跟据 settings.gradle
    include 'projectA'
    include 'projectB'
    include 'projectC'
    在根 build.gradle , 设置版本
    ext.springBootVersion = '2.1.17.RELEASE'
    在使用 springBoot 的子项目中,比方说 projectB , 在子 build.gradle 中应用插件
    buildscript {
    repositories {
    jcenter()
    mavenCentral()
    }

    dependencies {
    classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"
    }
    }

    apply plugin: 'org.springframework.boot'

    关于java - 你如何参数化 Spring Boot Gradle 插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64389906/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com