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

Eld*_*ael 38 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()

}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我需要servlet api成功编译此过滤器,因此我想将其添加为maven提供的依赖项.

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

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

现在,我知道在没有WAR插件的情况下我不能使用providedCompile,但我需要将项目作为一个简单的JAR.还有另一种方法吗?

Hie*_*mus 51

这个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
Run Code Online (Sandbox Code Playgroud)

这会添加配置,并将所有依赖项放在主类和测试类的编译类路径中.您还需要将其添加到runtimeClasspath,因为根据gradle DSL文档,它不包括编译类路径.

  • 有关在Eclipse和IntelliJ中均可使用的解决方案,请参见此处:http://stackoverflow.com/a/25809968/2591231 (3认同)

Ger*_*ger 14

看一下SpringSource的Gradle插件propdeps.从项目描述:

为Gradle提供其他可选和提供的依赖项配置以及Maven POM生成支持.


Dor*_*old 12

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

dependencies {
    compileOnly 'javax.servlet:servlet-api:2.5'
}
Run Code Online (Sandbox Code Playgroud)


dty*_*dty 6

我最近写了一篇博文,其中详细介绍了这种情况.它还向您展示了如何正确设置与Eclipse的集成.

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


小智 5

有一种更简单的方法:

configurations {    
    provided
    provided.extendsFrom(compile)
}
Run Code Online (Sandbox Code Playgroud)

然后你可以:

dependencies {  
    provided group: 'javax.servlet', name: 'javax.servlet-api', version:'3.+' 
}
Run Code Online (Sandbox Code Playgroud)

您还希望在生成的Eclipse或Idea项目文件中包含提供的库:

idea.module.scopes.PROVIDED.plus += configurations.provided
eclipse.classpath.plusConfigurations += configurations.provided
Run Code Online (Sandbox Code Playgroud)


小智 5

当您发现自己使用Gradle 2.12时,请将"providedCompile"更改为"compileOnly".