我有以下gradle项目:
jar-module-A
+-- JavaEE lib(Dependency)
war-module-A
+-- jar-module-A
我想从WEB-INF / lib中排除JavaEE lib。
使用providedCompile:
由于jar-module-A不是web模块而是jar,我不能在jar-module-A的build.gradle中使用providedCompile。
配置{runtime.exclude JavaEE-lib}
它不仅从运行时而且还从testRuntime中排除JavaEE,它在war-module-A中通过ClassNotFoundException使单元测试失败。
如何缓解这种情况?
答案 0 :(得分:4)
暴力解决方案将是:
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'maven'
repositories {
mavenCentral()
maven {
url "file:///tmp/repo"
}
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file:///tmp/repo")
}
}
}
dependencies {
compile group: 'ruimo', name: 'module_a', version: '1.0-SNAPSHOT'
testCompile group: 'junit', name: 'junit', version: '4.10'
}
war {
classpath = classpath.filter {
it.name != 'javaee-api-6.0.jar'
}
}
代表module_b
。它可能与文件名有关(不确定)。也许稍后会看一下,但不确定 - 随着时间的推移而缩短。
<强>更新强>
更复杂:
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'maven'
repositories {
mavenCentral()
maven {
url "file:///tmp/repo"
}
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file:///tmp/repo")
}
}
}
dependencies {
compile(group: 'ruimo', name: 'module_a', version: '1.0-SNAPSHOT') {
transitive = false// here You can exclude particular dependency, not necessarily all
}
providedCompile group: 'javax', name: 'javaee-api', version: '6.0'
testCompile group: 'junit', name: 'junit', version: '4.10'
}
不,我看到它可以通过多种方式完成。这取决于构建的其他要求。
答案 1 :(得分:0)
如果传递不起作用,可以尝试分辨率startegy 。 我厌倦了传递或甚至正常的排除。
https://docs.gradle.org/2.2.1/dsl/org.gradle.api.artifacts.ResolutionStrategy.html
dependencies{
compile(group: 'ruimo', name: 'module_a', version: '1.0-SNAPSHOT')
}
configurations.all {
resolutionStrategy {
force ruimo:module_a:1.0-SNAPSHOT
}
}