我想为许多项目重用某些过滤器,所以我想提取它并使用一个jar将它添加到任何Web App中。
对于构建我正在使用Gradle 1.3和以下build.gradle
文件:
apply plugin: 'java'
dependencies {
compile group:'org.slf4j', name:'slf4j-api', version:'1.7.+'
testCompile group:'junit', name:'junit', version:'4.+'
compile group:'org.springframework', name:'spring-web', version:'3.+'
compile group:'org.slf4j', name:'slf4j-log4j12', version:'1.6.+'
compile group:'log4j', name:'log4j', version:'1.2.+'
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version:'3.+'
}
repositories {
mavenCentral()
}
正如您所看到的,我需要servlet api成功编译此过滤器,因此我想将其添加为maven提供的依赖项。
无论如何,在运行gradle build
后,我收到以下错误:
无法为参数找到provideCompile()方法 root上的[{group = javax.servlet,name = javax.servlet-api,version = 3. +}] 项目'hibernate-conversation-context'。
现在,我知道在没有WAR插件的情况下我不能使用providedCompile,但我需要将项目作为一个简单的JAR。还有另一种方法吗?
答案 0 :(得分:50)
java
插件没有开箱即用的配置。但是,您可以按照以下方式自行构建:
configurations { providedCompile }
dependencies {
providedCompile "javax.servlet:javax.servlet-api:3.+"
}
sourceSets.main.compileClasspath += configurations.providedCompile
sourceSets.test.compileClasspath += configurations.providedCompile
sourceSets.test.runtimeClasspath += configurations.providedCompile
这会添加配置,并将所有依赖项放在主类和测试类的编译类路径中。您还需要将它添加到runtimeClasspath,因为根据gradle DSL文档,它不包含编译类路径。
答案 1 :(得分:14)
看一下Gradle插件propdeps from SpringSource。从项目描述:
为Gradle提供其他可选和提供的依赖项配置以及Maven POM生成支持。
答案 2 :(得分:12)
从 Gradle 2.12 开始,定义仅编译依赖项的问题最终通过新的“copmpileOnly”配置以简单而自然的方式解决:
dependencies {
compileOnly 'javax.servlet:servlet-api:2.5'
}
答案 3 :(得分:6)
我最近写了一篇博文,其中详细介绍了这种情况。它还向您展示了如何正确设置与Eclipse的集成。
http://blog.codeaholics.org/2012/emulating-mavens-provided-scope-in-gradle/
答案 4 :(得分:5)
有一种更简单的方法:
configurations {
provided
provided.extendsFrom(compile)
}
然后你可以:
dependencies {
provided group: 'javax.servlet', name: 'javax.servlet-api', version:'3.+'
}
您还希望在Eclipse或Idea的生成项目文件中提供所提供的库:
idea.module.scopes.PROVIDED.plus += configurations.provided
eclipse.classpath.plusConfigurations += configurations.provided
答案 5 :(得分:5)
当您发现自己使用Gradle 2.12时,请将“providedCompile”更改为“compileOnly”。
答案 6 :(得分:4)
为了使javadoc工作,我必须添加它:
javadoc.classpath=sourceSets.main.compileClasspath