提供没有战争插件的编译
我想为许多项目重用某些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
- Android Studio构build失败,在根项目“MyProject”中找不到“Task”。
- 插件太旧,请更新到更新的版本,或设置ANDROID_DAILY_OVERRIDE环境variables
- 即使设置正确,Gradle也会find错误的JAVA_HOME
- supportMapFragment的findFragmentById在Android Studio中返回null
- Android Studio lint报告“无法推断参数types”。
- 在通过Gradle运行Java类时传递系统属性和参数的问题
- 如何创buildJava gradle项目
- 通过Gradle和Android Studio构build和运行应用程序比通过Eclipse慢
- Graven对应于Maven原型?