[英]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.