【问题标题】:Does Grails + Maven + JCL work in conjunction?Grails + Maven + JCL 可以协同工作吗?
【发布时间】:2011-09-09 05:50:56
【问题描述】:

我正在使用 IntelliJ IDEA 10.0.1 和 Grails 1.3.7。我有一个 mavenized Grails 项目,它依赖于许多日志库。

问题来了:
我必须使用 JCL 作为日志框架,但 grails 默认使用 SLF4J,并且有一些默认依赖项,例如 jcl-over-slf4j,每个 grails 项目都继承这些依赖项。首先,我在我的项目 pom 文件中排除了每个 jcl-over-slf4j 传递依赖,并使用 mvn dependency:tree 验证我的 pom 没有任何 SLF4J 桥接库.

但是,当我尝试启动我的 grails 应用程序时,jcl-over-slf4j 仍然被下载到我的本地 maven 存储库中。这显然会在运行时导致 StackOverflowError,因为 jcl-over-slf4jslf4j-jcl 都在类路径中。

那么由于哪个声明 jcl-over-slf4j 依赖项仍在下载?

由于我的 pom 是干净的,显而易见的结论是 Grails 本身依赖于这些库。如前所述,Grails 有一些默认依赖项,每个 Grails 项目都依赖这些依赖项。

我知道我可以在 BuildConfig.groovy 文件中排除继承的依赖项,如果我运行 grails dependency-report,我还可以看到这些依赖项不再列出。

grails.project.dependency.resolution = { 
    inherits("global") {
      excludes "jcl-over-slf4j", "jul-to-slf4j", "slf4j-log4j12"
    }
}

但即便如此,当我启动我的 grails 应用程序时,jcl-over-slf4j 依赖项仍然会下载到我的存储库中!我错过了什么吗?当您使用 mavenized grails 项目时,是否有其他方法可以排除继承的 grails 依赖项?

任何帮助将不胜感激

谢谢! 斜线

【问题讨论】:

    标签: grails


    【解决方案1】:

    好吧,我想我现在知道答案了..

    问题是我的 pom 文件中定义的 ma​​ven-grails-plugin(当你使用 maven + grails 时这是强制性的)依赖于 jcl-over-slf4j,因此在我开始时会被下载我的应用程序通过 Maven。使用我当前的 maven 版本(2.2.1),不可能从插件中排除依赖项。关于这个问题还有一个 jjira 问题。 Can not exclude a dependency from a plugin

    删除 ma​​ven-grails-plugin 后,不再下载依赖项,但缺点是我无法再通过 maven 启动应用程序..

    经验教训:不要同时使用 Maven + Grails + JCL。

    请注意,mvn dependency:tree 仅列出项目依赖项,但 列出插件依赖项。

    希望这对您有所帮助! 问候斜线

    【讨论】:

    • mvn dependency:resolve-plugins 可能有助于列出插件依赖项
    • 谢谢提示!当我让它运行时,它显示 grails-maven-pluginjcl-over-slf4j 没有依赖关系(至少没有直接依赖关系)。但是为什么它仍然被下载?
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2016-03-13
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多