簡體   English   中英

如何在gradle的子項目{}中啟用提供的范圍?

[英]How to enable provided scope in subproject{} in gradle?

假設我們有一個多項目構建。 最終,整個項目捆綁在一起。 我們知道Web容器將提供一些實用程序jar,例如與日志記錄相關的jar,因此我們想使用provided的范圍。 war插件提供了不錯的providedCompileprovidedRuntime配置。 但是,我們只想在創建war的子項目中使用war插件。 所以,問題是,我們如何能使用類似providedCompileprovidedRuntime在其他分項目? 理想情況下,我們希望將該范圍應用於subprojects {}閉包中的日志記錄jar。

更新
我的情況如下。

在root build.gradle ,我有類似以下內容:

subprojects {
    apply plugin: 'groovy'
    apply plugin: 'maven'

    dependencies {
        compile 'org.slf4j:slf4j-api:1.7.7'                // already provided by the servlet container
        compile 'javax.servlet:javax.servlet-api:3.1.0'    // already provided by the servlet container
        runtime 'ch.qos.logback:logback-classic:1.1.2'     // already provided by the servlet container
        runtime 'ch.qos.logback:logback-core:1.1.2'        // already provided by the servlet container
...

這些依賴關系不僅由戰爭子項目使用,而且應在戰爭中排除。 因此,我需要某種機制來實現這一目標。

順便說一句,我已經找到了解決方案。

有兩種方法可以實現所provided范圍。

選項1
創建一個自定義配置provided 例如:

configurations {
    provided
}

sourceSets.test {
    runtimeClasspath += configurations.provided
}

這種方法的缺點是,例如IntelliJ IDEA等IDE可能不了解自定義配置,因此無法正確提取依賴關系。 IntelliJ IDEA發生在我身上。

選項2
使用預定義的compileruntime配置。 然后,在war子項目的build.gradle中,過濾掉您選擇的jar。 例如,

war {
    Set exclusions = ['slf4j-api-1.7.7.jar', 'javax.servlet-api-3.1.0.jar',
                      'logback-classic-1.1.2.jar', 'logback-core-1.1.2.jar'] as Set
    classpath = classpath.filter { file ->
        !exclusions.contains( file.name )
    }
}

暫無
暫無

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

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