Grails + Maven + JCL是否一起使用?

时间:2011-06-06 11:50:20

标签: grails

我正在使用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 repo。这显然会在运行时导致StackOverflowError,因为 jcl-over-slf4j slf4j-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依赖项?

任何帮助将不胜感激

谢谢! 斜线

1 个答案:

答案 0 :(得分:0)

好的,我想我现在得到了答案..

问题是我的pom文件中定义的 maven-grails-plugin (在你使用maven + grails时是必需的)依赖于jcl-over-slf4j,因此在我启动时会被下载我通过maven申请。使用我当前的maven版本(2.2.1),无法从插件中排除依赖项。关于这个问题还有一个jjira问题。 Can not exclude a dependency from a plugin

一旦我删除 maven-grails-plugin ,就不再下载依赖项,但由于缺点,我无法再通过maven启动应用程序..

经验教训:不要结合使用Maven + Grails + JCL。

请注意,使用 mvn依赖关系:树列出了项目依赖项,但列出了插件依赖关系 NOT

希望这有任何帮助! 关注斜线