当前位置: 首页 > 知识库问答 >
问题:

避免grails中的循环引用继承

康弘义
2023-03-14

我有一个用Grails 2.3.8编写的大项目。有时,当我使用我的CI部署它时,我收到以下消息:

由于StackOverflow Error,无法完成Web应用程序[/ProjectName##1152]的注释扫描。

可能的根本原因包括 -Xss 设置过低和非法的循环继承依赖关系。正在处理的类层次结构是 [org.bouncycastle.asn1.ASN1EncodableVector-

我已经增加了Xss设置,但很明显,但可能我错了,有一个循环引用:org.bouncycastle.asn1.asn1encodalvector-

我知道你可以避免检查,我不能删除库,因为我需要它。但我不知道如何在Grails中做到这一点。我可以排除他们,但这不是我想要的。

非常感谢任何建议

尼贝

更新我刚刚修复了这个问题。我删除了构建配置文件中弹跳城堡库的所有痕迹。没有依赖或排除的痕迹。只需在crypto.2.0中添加插件,一切正常!

共有2个答案

何建中
2023-03-14

在我的例子中,这是<code>org.bouncycastle:bcprov-jdk15on:jar:1.47DeencodableVector是ASN1EncodableVector的父级,而在1.47中则相反!!!取决于哪个JAR版本首先加载每个类,您可能会遇到这个问题,或者如果幸运的话,它不会发生,这是一个概率问题。

我通过删除一个传递依赖项来解决这个问题。我选择删除旧的一个。这就是我在<code>pom.xml</code>中所做的:

...
 <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>
...
孔建柏
2023-03-14

我认为这是因为从类路径中引用了两个版本的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 

在从我的类路径中删除任何一个之后,我解决了这个问题。

 类似资料:
  • 问题内容: 我知道python中的循环导入问题已经出现过很多次了,我已经阅读了这些讨论。在这些讨论中反复提出的意见是,循环导入表明设计不良,应重新组织代码以避免循环导入。 有人可以告诉我在这种情况下如何避免循环导入吗?:我有两个类,并且我希望每个类都有一个构造函数(方法),该构造函数接受另一个类的实例并返回该类的实例。 更具体地说,一类是可变的,一类是不变的。哈希,比较等需要不可变的类。可变类也需

  • 问题内容: 我尝试使用MVP范例构建Webapp。因为我希望API干净并且使所有内容易于测试,所以我尝试通过Contructor Injection注入所有可能的内容。现在,我到了一个具有多个文本字段的视图。当数据库中有值时,演示者将填充这些文本字段,因此我的演示者需要视图的引用,但是vie显然也需要演示者的引用。CDI告诉我,由于循环依赖性,无法将Presenter注入视图。是否有可能避免通过s

  • 从我的main开始,我将启动两个线程,称为producer和consumer。两者都包含循环。生产者循环是UDP服务器,因此不需要Hibernate。我的问题出在消费者方面。使用者循环将对象从链接队列中移除,并将其传递给一个函数进行进一步处理。根据研究,在循环中使用线程Hibernate不是一个好的实践,因为有时O/S在设定时间结束时不会释放。如果我删除线程Hibernate,当应用程序是理想的,

  • 我用FOS REST包完成了一个REST Api。我有一个用户实体和一个评论实体。所以我想得到用户评论:/users/{idUser}/comments,但问题是在评论的响应中,用户被包括在内,用户包括他的评论,评论包括用户,用户包括用户。。。所以我最终得到了一个inmense JSON响应。 控制器的我的getCommentsAction使用存储库和findBy方法,有没有办法告诉FOS Res

  • 问题内容: 我们都知道您由于以下原因而无法执行以下操作: 但这显然有时有效,但并非总是如此。这是一些特定的代码: 当然,这导致: 即使没有多个线程。无论如何。 解决此问题的最佳方法是什么?如何在不引发此异常的情况下循环地从集合中删除项目? 我还在这里使用任意值,不一定是an t,因此您不能依赖。 问题答案: 是安全的,您可以这样使用它: 注意,这是在迭代过程中修改集合的唯一安全方法。如果在进行迭代

  • 如果我有一个班级ProfessorDto和一个班级StudentDto,如果ProfessorDto有一个StudentDto列表,StudentDto有一个ProfessorDto类型的属性,我如何避免循环问题?我没有给出域类的代码,但假设它与Dto的代码相同。 我是Mapstruct的新手,将域bean转换为具有简单属性的Dto,如Long,String正在工作,但在我的示例中,关系OneTo