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

运行在Quarkus(gradle)上的多模块项目中的ClassCastException

韦原
2023-03-14

我似乎在多模块项目中遇到了奇怪的classcast异常。以下是项目结构的简要概述:

Project: dto-commons
    contains
        -> AuditingEntityObjectSelector (a normal java class)
        -> AbstractAuditingEntity (JPA @MappedSuperClass)

Project: model
    contains lots of JPA entities, which all extend AbstractAuditingEntity from the project 'dto-commons'
    depends on 
        -> dto-commons

Project: selectors
    contains
        -> SampleRequestSelector (a normal java class which extends AuditingEntityObjectSelector from the project 'dto-commons'
    depends on 
        -> model


Project:mainservices
    - model
    - selectors
    - dto-commons

Project:rest-api   --> This project is launched with quarkusDev (gradle)
    - mainservices

我已经创建了一个小testresource,在这里我注入了一些服务,一个EntityManager等等。一切似乎都在工作,除了我得到了非常奇怪的ClassCastException

JAVAClassCastException:class com。大地测量学。查询结构。选择器。SampleRequestSelector无法强制转换为类com。大地测量学。领域查询结构。AuditingEntityObjectSelector

一些调试向我展示了以下内容:

new SampleRequest() instanceof AbstractAuditingEntity --> true (which is correct)
new SampleRequestSelector() instanceof AuditingEntityObjectSelector --> false (which is NOT correct)

这可能是一个类加载问题,但我不知道是什么原因造成的。

SampleRequest.class.classLoader == AbstractAuditingEntity.class.classloader --> true 
SampleRequestSelector.class.classLoader == AuditingEntityObjectSelector.class.classloader --> false (don't know for sure, but I think that should be true)

有人能给我指出正确的方向吗?

(请注意,所有项目的资源目录中都有一个空的META-INF/beans.xml

共有1个答案

濮阳景天
2023-03-14

这看起来像是类装入器问题的另一部分。我们目前正在积极修复它们,但这不是一个容易的话题。

我想你只是对quarkusDev有意见吧?当你执行-runner时就不会了。jar

如果您可以尝试组合一个简单的复制器并打开一个GH问题,这样我们就可以确保当前的类装入器工作也解决了这个问题,这将是非常有帮助的。

 类似资料:
  • 我的问题似乎类似于运行在Quarkus(gradle)上的多模块项目中的ClassCastException。 不过我用的是maven。我可以确认在使用转轮或测试时没有出现问题。我创建了一个示例应用程序,在https://github.com/AmsterdamFilho/quarkus-poc. 如果在开发模式下运行应用程序,并使用swagger ui或curl执行endpoint,则会出现异常

  • 问题内容: 这是一个基本问题,我只是不太熟悉Maven多模块结构。说,我有一个Web应用程序。我想将一些模块连接到它(某些服务)。我是否需要仅将其中一个模块(依赖于其他模块)制作为一个Web应用程序,然后运行它?一开始我以为我可以运行整个项目,但是这个选项在我的IDE中是无效的(我现在正在使用NetBeans),这使我认为我应该运行一个类似于主模块的东西(在这种情况下为Web应用程序) )。是这样

  • 我有一个基本的SpringBoot应用程序。使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎,并将包作为可执行的JAR文件。是一个带有Spring Boot的多模块项目,该项目将有3个模块。这里是父模块pom。xml 这里是模块核心 这里是模块web: 从父根目录,我使用以下方法生成所有模块: 但问题是tdk-web-0.0.2-SNAPSHOT。jar不包含tdk-c

  • 问题内容: 我最近开始使用Gradle并替换了我现有的基于Maven的项目。过去我在使用Maven处理多模块构建时遇到很多问题。在处理多模块水龙头时,Gradle呼吸了新鲜空气,但还不是很完美。 我的项目有以下文件夹布局: 我遇到的问题是“ EnterpriseApp1”和“ ClientApplication”都依赖于CommonLib项目。我不知道如何配置“ EnterpriseApp1”构建

  • 我是新来的,并尝试在Maven多模块项目中使用它。我的项目结构如下: 应用程序模块执行具有构建目标的quarkus maven插件。包含一个简单的rest控制器,因此也包含一个在中。RESTAPI模块由应用程序模块引用。 如果我使用打包整个项目,那么生成的runner jar将按预期工作。但是,如果我尝试使用在开发模式下启动项目,我会遇到以下异常: 错误]无法执行目标io。quarkus:quar

  • 我有一个多模块的项目与Spring Boot。 我的根pom.xml仅包含以下内容: 如果尝试,将收到错误: 我想知道我需要做什么,以便能够在我的根目录中准确地执行以下命令: 编辑:根据注释的建议,我尝试将配置从模块移动到root pom.xml,但仍然收到相同的错误: 谢谢