【问题标题】:Exclude Gradle classpath runtime when launching JettyRun启动 JettyRun 时排除 Gradle 类路径运行时
【发布时间】:2011-11-02 15:01:59
【问题描述】:

我有你基本运行的 Mill Gradle Web 应用程序项目,它运行正常,但我注意到 Gradle 的运行时类路径包含在码头一号中,这可能与 Web 应用程序发生冲突。

请注意,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.

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

我正在 Ant 的 javac 任务中寻找类似于“includeAntRuntime”的内容。

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 = ''
}

【问题讨论】:

    标签: jetty gradle embedded-jetty


    【解决方案1】:

    manual for jettyRun 任务中所述,它有一个classpath 属性,默认设置为project.sourceSets.main.runtimeClasspath。您可以将此属性设置为您选择的类路径:

    configurations{
      myJettyRuntime
    }
    
    dependencies{
      myJettyRuntime "group:name:version"
      ...
    }
    
    jettyRun{
      classpath = configurations.myJettyRuntime
    }
    

    或者,您可以分别使用 -=+= 运算符,从这个类路径中添加或减去不需要或冲突的依赖项。

    jettyRun{
      classpath -= configurations.myExcludedConf
    }
    

    【讨论】:

    • 谢谢,这是个好主意,但如果这是内置功能会更好,这样我就不必确定需要排除哪些内容。我不相信您的建议会起作用,因为文档暗示它是附加的。 Gradle 类路径看起来可能会顺其自然。 jetty 插件需要 Gradle 类路径来启动容器是否有充分的理由?
    • 我已经在sourceSet.main.compileClasspath 上成功使用了-=,所以它应该以同样的方式用于码头类路径。我不知道为什么以及出于什么原因 gradle 包含自己的类路径。该手册建议默认情况下将类路径设置为project.sourceSets.main.runtimeClasspath,这应该是您的应用程序的类路径,而不是 gradle。如果最新的 gradle 版本仍然存在问题,那么我只能建议您提交错误报告。
    【解决方案2】:

    如果您只是担心两个 SLF4j 绑定,那么您似乎可以ignore the warning in this case。这正是我正在做的。

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多