40

我想为许多项目重用某些过滤器,所以我想提取它并使用单个 jar 将其添加到任何 Web 应用程序。

对于构建,我使用 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我收到以下错误:

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

现在,我知道我不能在没有 WAR 插件的情况下使用提供的编译,但我需要项目是一个简单的 JAR。还有另一种方法可以做到这一点吗?

4

7 回答 7

54

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 文档,它不包括编译类路径。

于 2012-12-18T12:21:24.513 回答
14

看看SpringSource 中的 Gradle 插件 propdeps。从项目描述:

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

于 2013-01-04T21:13:55.163 回答
13

Gradle 2.12开始,定义仅编译依赖项的问题最终通过新的“copmpileOnly”配置以简单自然的方式解决:

dependencies {
    compileOnly 'javax.servlet:servlet-api:2.5'
}
于 2016-10-27T13:55:39.687 回答
6

我最近写了一篇博文,正好涵盖了这种情况。它还向您展示了如何正确设置与 Eclipse 的集成。

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

于 2012-12-18T13:07:44.710 回答
6

当您发现自己在使用 Gradle 2.12 时,将“providedCompile”更改为“compileOnly”。

于 2016-03-18T15:42:44.083 回答
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
于 2013-07-17T09:32:01.190 回答
4

为了使 javadoc 工作,我必须添加以下内容:

javadoc.classpath=sourceSets.main.compileClasspath
于 2013-09-10T13:33:09.370 回答