Quarkus开发模式下如何排除指定类自动重载以兼容ActiveJDBC?
在Quarkus中解决JavaLite ActiveJDBC字节码插装失效问题
异常信息
org.javalite.activejdbc.InitException: you are trying to work with models, but no models are found. Maybe you have no models in project, or you did not instrument the models.
问题根源
ActiveJDBC必须依赖编译后的字节码插装才能正常工作,这个插装操作需要在应用启动前的编译后阶段完成。但Quarkus开发模式会自动从源码重新加载并编译所有类,直接覆盖了之前完成的ActiveJDBC字节码插装,导致模型无法被识别,抛出上述异常。
解决方案:配置Quarkus排除特定类的热重载
完全可以通过Quarkus的配置来避免特定类被重新编译和重载,具体操作如下:
- 方式一:排除整个模型类包
在项目的application.properties中添加以下配置,替换成你实际的模型类包路径:
quarkus.deployment.exclude-classes=com.yourproject.models.*
- 方式二:排除单个/多个具体类
如果只需要排除部分模型类,直接指定类全限定名即可:
quarkus.deployment.exclude-classes=com.yourproject.models.User,com.yourproject.models.Order
配置完成后重启Quarkus开发模式,指定的模型类就不会被重新编译,之前的字节码插装效果会被保留,ActiveJDBC就能正常识别模型了。
备选方案
如果上述配置不生效,可以把ActiveJDBC的模型类单独打包成Jar包,作为第三方依赖引入项目。Quarkus开发模式不会对第三方Jar包中的类进行热重载,同样能避开插装失效的问题。
内容的提问来源于stack exchange,提问作者ipolevoy
相关产品推荐
相关产品推荐

