假设我们有一个多项目构建。最终整个项目被捆绑成一场战争。我们知道Web容器会提供一些实用工具罐,比如一些与日志相关的jar,所以我们想要使用provided
种范围。 war
插件提供了良好的providedCompile
和providedRuntime
配置。但是,我们只想在创建战争的子项目中使用war
插件。所以,问题是,我们如何在其他子项目中使用providedCompile
和providedRuntime
之类的东西?理想情况下,我们希望将该范围应用于subprojects {}
闭包中的日志记录jar。
更新
我的情况如下所示。
在根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
...
这些依赖项不仅用于war子项目,而且应该在战争中排除它们。因此,我需要一些机制来实现这一目标。
顺便说一下,我已经找到了解决方案。答案 0 :(得分:0)
有两种方法可以实现provided
范围。
选项1
创建自定义配置provided
。例如:
configurations {
provided
}
sourceSets.test {
runtimeClasspath += configurations.provided
}
这种方法的缺点是IDE,例如IntelliJ IDEA,可能不了解自定义配置,因此无法正确提取依赖关系。 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 )
}
}
答案 1 :(得分:0)