提供没有战争插件的编译

我想为许多项目重用某些filter,所以我想提取它,并使用一个简单的jar添加到任何Web应用程序。

对于构build我使用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来成功编译这个filter,所以我想像Maven提供的依赖项那样添加它。

无论如何,运行gradle build我得到以下错误:

在根项目“hibernate-conversation-context”上找不到方法provideCompile(),用于参数[{group = javax.servlet,name = javax.servlet-api,version = 3. +}]。

现在,我知道我不能使用没有WAR插件的providedCompile,但是我需要该项目是一个简单的JAR。 有没有另外一种方法来做到这一点?

java插件没有这样的configuration。 但是你可以自己build立它,如下所示:

 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 

这增加了configuration,并把所有的依赖关系放在你的主类和testing类的编译类path中。 您还需要将其添加到runtimeClasspath,因为根据gradle DSL文档,不包括编译类path。

看看SpringSource的Gradle插件propdeps 。 从项目说明:

为Gradle提供额外的可选和提供的依赖项configuration以及Maven POM生成支持。

Gradle 2.12开始 ,定义仅编译依赖关系的问题终于通过新的“copmpileOnly”configuration以简单自然的方式得到解决:

 dependencies { compileOnly 'javax.servlet:servlet-api:2.5' } 

我最近写了一篇博客文章,其中涵盖了这种情况。 它也向你展示了如何正确设置与Eclipse的集成。

http://blog.codeaholics.org/2012/emulating-mavens-provided-scope-in​​-gradle/

有一个更简单的方法:

 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 

当你发现自己在使用Gradle 2.12时,将“provideCompile”改为“compileOnly”。

为了使javadoc的工作,我不得不添加这个:

 javadoc.classpath=sourceSets.main.compileClasspath