【发布时间】:2012-08-31 08:35:24
【问题描述】:
我正在尝试编译几个 WAR 文件,所有这些文件都依赖于一个通用 JAR 模块。然而,在我的 Gradle 构建中,我似乎无法获得类似“已提供”的依赖项来使用 Java 插件。
我的编译如下:
apply plugin: 'java'
configurations{
providedCompile
}
dependencies {
compile module("org.springframework.amqp:spring-amqp:${springAmqpVersion}")
compile module("org.slf4j:slf4j-api:${slf4jVersion}")
compile module("org.slf4j:slf4j-ext:${slf4jVersion}")
providedCompile "javax.servlet:servlet-api:${servletApiVersion}"
runtime module("org.slf4j:jcl-over-slf4j:${slf4jVersion}")
runtime module("org.slf4j:jul-to-slf4j:${slf4jVersion}")
runtime module("org.slf4j:log4j-over-slf4j:${slf4jVersion}")
sourceArchives module("org.springframework.amqp:spring-amqp:${springAmqpVersion}:sources")
sourceArchives module("javax.servlet:servlet-api:${servletApiVersion}:sources")
}
sourceSets {
main { compileClasspath += configurations.providedCompile }
}
但是,最后一点是异常的地方。我曾尝试在运行时依赖项扩展它之后将 servlet-api(由 Tomcat 提供)添加到配置中,或者只是将其作为编译模块放入,然后稍后将其从运行时依赖项中删除。
我尝试了几种不同的方式来修改依赖项,我最接近的结果是:
newRuntime = configurations.runtime.minus(configurations.providedCompile)
configurations.runtime = newRuntime
然而,最后一点会生成具有适当依赖关系的变量 newRuntime,但是当我尝试将变量重新分配回运行时配置时,它会抛出“找不到属性异常”
我在 Gradle 的 bug tracking 上发现了很多关于这个确切问题的讨论:Gradle-784
然而,主要的线索来自 Spring,他们使用 Maven 和他们的 gradle 构建,我不熟悉。
我在 SO 上找到的最有希望的链接,但不幸的是,我无法让示例也能正常工作:SO Provided Question 值得注意的是 Stack Overflow 问题最有希望的那一行:
//Include provided for compilation
sourceSets.main.compileClasspath += configurations.provided
这一行没有像其他尝试那样给出错误,但是似乎providedCompile(提供的我的版本)依赖项实际上并没有放在编译类路径中,因为尝试编译时出现类路径错误。
【问题讨论】:
-
注意,forums.gradle.org/gradle/topics/… 似乎建议只设置 compile 来扩展提供的配置。这似乎有效,但逻辑上没有意义,因为运行时也扩展了编译?