[英]How to enable provided scope in subproject{} in gradle?
假設我們有一個多項目構建。 最終,整個項目捆綁在一起。 我們知道Web容器將提供一些實用程序jar,例如與日志記錄相關的jar,因此我們想使用provided
的范圍。 war
插件提供了不錯的providedCompile
和providedRuntime
配置。 但是,我們只想在創建war的子項目中使用war
插件。 所以,問題是,我們如何能使用類似providedCompile
和providedRuntime
在其他分項目? 理想情況下,我們希望將該范圍應用於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
使用預定義的compile
和runtime
配置。 然后,在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.