2011-11-02 55 views
7

我有磨坊Gradle Web应用程序项目的基本运行,它工作正常,但我注意到Gradle的运行时类路径正在包含在码头中,有可能与Web应用程序发生冲突。在启动JettyRun时排除Gradle类路径运行时

注意下面,gradle使用的是稍早版本的logback,SL4J警告它在类路径中找到多个绑定。

:jettyRun 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/C:/dev/java/tools/gradle-1.0-milestone-5/lib/logback-classic-0.9.29.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/C:/Users/kirk.rasmussen/.gradle/caches/artifacts-3/ch.qos.logback/logback-classic/fd9fe39e28f1bd54eee47f04ca040f2b/jars/logback-classic-0.9.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 

有没有办法排除被列入gradle这个运行时类路径运行jettyRun任务时?我正在使用Gradle最新的1.0里程碑5版本。

我正在寻找类似'includeAntRuntime'的东西在Ant中的javac任务中。

http://ant.apache.org/manual/Tasks/javac.html

includeAntRuntime是否包含在类路径中的Ant运行时库;默认为yes,除非设置了build.sysclasspath。通常最好将其设置为false,以便脚本的行为对其运行的环境不敏感。

剥离下来的build.gradle:

apply plugin: 'groovy' 
apply plugin: 'war' 
apply plugin: 'jetty' 

jettyRun { 
    contextPath = '' 
} 

回答

2

正如manual for jettyRun任务描述,它有一个classpath属性,该属性是默认设置为project.sourceSets.main.runtimeClasspath。可以将该属性正好被设置为您选择的类路径:

configurations{ 
    myJettyRuntime 
} 

dependencies{ 
    myJettyRuntime "group:name:version" 
    ... 
} 

jettyRun{ 
    classpath = configurations.myJettyRuntime 
} 

或者你可以使用分别与-=运营商+=从这个classpath中增加或减少不必要的或依赖性冲突。

jettyRun{ 
    classpath -= configurations.myExcludedConf 
} 
+0

谢谢,这是一个好主意,但如果这是建立在功能上,它会更好,所以我不必确定哪些东西需要排除。我不相信你的建议会起作用,因为文件暗示它是附加的。 Gradle类路径看起来可能会出现在骑行中。 为什么Jetty插件需要Gradle类路径来启动容器是否有很好的理由? –

+0

我已经成功地在'sourceSet.main.compileClasspath'上使用' - =',所以它应该以类似于jetty classpath的方式工作。我不知道为什么,以及Gradle包含自己的类路径的原因。该手册建议,默认情况下,classpath被设置为'project.sourceSets.main.runtimeClasspath',它应该是你的应用程序的类路径,而不是gradle。如果问题仍然存在于最新的gradle版本中,那么我只能建议你提交一份bug报告。 – rodion

相关问题