如何在Gradle中包含或排除特定依赖项

fv2wmkja  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(128)

我正在使用gradle构建一个需要连接DB的springboot应用程序。对于我的本地dev,我希望有H2 DB,但当我在实际的env中部署时,我希望psotgresql,所以当我打包并运行我的应用程序dev/test/prod环境时,我需要排除H2 DB。
无法实现这一点。两个依赖项都被包含或排除。

dependencies {
    //other dependencies
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    //nonLocalImplementation 'org.postgresql:postgresql'
    //implementation 'com.h2database:h2'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'

    if (project.hasProperty("local")) {
        implementation 'com.h2database:h2'
    }

    if(project.hasProperty("test") || project.hasProperty("prod")){
        implementation 'org.postgresql:postgresql'
    }
}

bootRun {
    systemProperty 'spring.profiles.active', project.findProperty("activeProfile") ?: 'default'
}

个字符
给了我编译时错误,因为我的代码将期望H2 Web服务器类可用

j13ufse2

j13ufse21#

Sping Boot 已经为这个developmentOnly提供了一个特殊的作用域。这是一个特殊的作用域,用于开发过程中需要的依赖项,但不应该在构建工件中。
Sping Boot Gradle插件文档中也记录了该范围。
因此,而不是不同属性的复杂性,并为各种环境单独构建,只需使用特定的范围。

dependencies {
    //other dependencies
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    //nonLocalImplementation 'org.postgresql:postgresql'
    //implementation 'com.h2database:h2'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'

    developmentOnly 'com.h2database:h2'
    implementation 'org.postgresql:postgresql'
}

字符串
有了上面的依赖项,H2将在开发过程中本地使用,但不包含在工件中。H2的嵌入式数据库优先于PostgreSQL驱动程序(由于嵌入式),因此它将工作。

qvk1mo1f

qvk1mo1f2#

相反,这使得它更复杂,你可以尝试这样做,使条件依赖-

configurations {
    localOnly
    postgresOnly
}

dependencies {
    // other dependencies
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'

    localOnly 'com.h2database:h2'
    postgresOnly 'org.postgresql:postgresql'

    if (project.hasProperty("local")) {
        implementation project.configurations.localOnly
    }

    if (project.hasProperty("test") || project.hasProperty("prod")) {
        implementation project.configurations.postgresOnly
    }
}

bootRun {
    systemProperty 'spring.profiles.active', project.findProperty("activeProfile") ?: 'default'
}

字符串
告诉我你是否还有问题。

相关问题