避免 grails 中的循环引用继承
Posted
技术标签:
【中文标题】避免 grails 中的循环引用继承【英文标题】:Avoid cyclic reference inheritance in grails 【发布时间】:2014-07-18 15:16:36 【问题描述】:我有一个用 Grails 2.3.8 编写的大项目。有时,当我使用 CI 部署它时,我会收到以下消息:
由于 ***Error,无法完成对 Web 应用程序 [/ProjectName##1152] 注释的扫描。
可能的根本原因包括 -Xss 设置过低和非法循环继承依赖项。 正在处理的类层次结构是 [org.bouncycastle.asn1.ASN1EncodableVector->org.bouncycastle.asn1.DEREncodableVector->org.bouncycastle.asn1.ASN1EncodableVector]
我已经增加了Xss设置,但很清楚,但也许我错了,有一个循环引用: org.bouncycastle.asn1.ASN1EncodableVector->org.bouncycastle.asn1.DEREncodableVector->org.bouncycastle.asn1.ASN1EncodableVector
我表示您可以避免检查,我无法删除该库,因为我需要它。但我不知道如何在 Grails 中做到这一点。我可以排除它们,但这不是我想要的。
非常感谢您的建议
尼贝
更新 我刚刚解决了这个问题。我在 buildConfig 文件中删除了 bouncycastle 库的所有痕迹。没有任何依赖或排除的痕迹。只需在 crypto.2.0 中添加插件,一切正常!
【问题讨论】:
关于 SO 的另一篇文章在这里提到了同样的问题:***.com/questions/17584495/…。我认为您有同样的问题 - 在类路径上有两个或多个 bouncycastle 版本。您应该检查 grails 依赖报告并排除不需要的。 我遇到了同样的问题,因为我的全局 lib 文件夹中有 bcprov-jdk15on-147.jar 并且我的应用程序在其 lib 文件夹中嵌入了 bcprov-jdk15on-1.51.jar,这导致了这个冲突类加载器。从全局 lib 文件夹中删除 1.47 后,我的问题得到了解决。 【参考方案1】:我认为这是因为从类路径中引用了两个版本的 JAR。
这通常是在加载不同版本的 bcprov-jdk*.jar 时引起的。
For example, IN one of my scenario - I had
..../webapps/FOO/WEB-INF/lib/bcprov-jdk15on-147.jar
..../webapps/FOO/WEB-INF/lib/bcprov-jdk15on-1.51.jar
从我的类路径中删除其中任何一个后,我解决了这个问题。
【讨论】:
很好,就像一个魅力。由于我处理了一个多模块 Maven 项目,因此它帮助我搜索了它的来源: mvn dependency:tree -Dverbose -Dincludes=org.bouncycastle【参考方案2】:就我而言,这是org.bouncycastle:bcprov-jdk15on:jar:1.47
和org.bouncycastle:bcprov-jdk15on:jar:1.45
的版本冲突。我在我的 Maven 项目中发现了运行 mvn dependency:tree
的问题。在 1.45 版中,DEREncodableVector
是 ASN1EncodableVector
的父级,但在 1.47 版中则相反!!!根据哪个 JAR 版本首先加载每个类,您可能会遇到此问题,或者如果您很幸运,那么它不会发生,这是一种概率事件。
我通过删除传递依赖项之一解决了问题。我选择删除旧的。这就是我在pom.xml
中的做法:
...
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>xmltooling</artifactId>
<version>1.3.2-1</version>
<exclusions>
<exclusion>
<artifactId>log4j-over-slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>jcl-over-slf4j</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>bcprov-jdk15</artifactId>
<groupId>org.bouncycastle</groupId>
</exclusion>
</exclusions>
...
【讨论】:
以上是关于避免 grails 中的循环引用继承的主要内容,如果未能解决你的问题,请参考以下文章