在没有war插件的情况下提供了Compile

时间:2012-12-18 03:15:22

标签: gradle

我想为许多项目重用某些过滤器,所以我想提取它并使用一个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。还有另一种方法吗?

7 个答案:

答案 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