我处于一个复杂的情况,我会尽量简短,但我很乐意提供更多信息。
我继承了一个庞大的,古老的(在互联网年代)以及记录不佳的代码库的责任,主要是在groovy中。幸运的是,这个庞大的应用程序和服务及插件系统的绝大多数将在几个月内“终结”,但有一段时间需要继续存在。我一直试图提取那一块。所以它可以自己站起来。
整体情况已经相当顺利,有一些单元测试,所以我已经能够使用编译和单元测试来找出我需要带来的类文件和第三方库我已经需要的。
但是我遇到了一个问题(在单元测试中以及当我尝试“运行”应用程序时)。
错误消息看起来像这样。
Exception in thread "main" org.codehaus.groovy.runtime.typehandling.GroovyCastException:
Cannot cast object '[
...
about 20 different classes, as far as I can tell these are ORM entities
...
]' with class 'com.google.common.collect.RegularImmutableList' to class 'java.lang.Class' due to:
java.lang.ClassNotFoundException: [
...
the exact same list of classes (and paths) only with the java style '/' instead of the groovy style '.'
... ]
为了使事情变得更复杂,即使在我更小的代码库中,仍然存在很多依赖关系(都非常古老)。
我正在运行Groovy Version: 2.2.2 JVM: 1.7.0_121 Vendor: Oracle Corporation OS: Linux
我一直在运行gradle 2.2.1但在遇到这个问题之后我做了一些研究并了解到我应该能够更新gradle所以我做了,我现在处于4.7(这没有解决问题)
我害怕我不熟悉groovy或java或gradle,我更了解生态系统。
从中期来看,我计划将依赖项和环境纳入目前支持的版本,但我认为最好先使用旧方法。
我所有这些代码的原始项目仍然构建。我带来的代码分散在许多不同的项目中,这些项目都形成了一个非常复杂的依赖树。我认为最好将它们纳入一个项目,因为“新”代码库将要小得多。
我花了相当多的时间查看发生此错误的代码(并且它是堆栈跟踪),看起来似乎有很多事情发生了
protected HibernateBundle<HohumDatabaseConfiguration> initializeHibernateBundle(List<Class<?>> serviceEntities) {
HibernateBundle bundle = new HibernateBundle<HohumDatabaseConfiguration>(
ImmutableList.copyOf(serviceEntities),
new HohumSessionFactoryFactory()) {
@Override
DatabaseConfiguration getDatabaseConfiguration(HohumDatabaseConfiguration configuration) {
return configuration.database
}
}
return bundle
}
有问题的行是ImmutableList.copyOf(serviceEntities)
。
所有这些实体都在一个“插件”中(我仍然不确定“插件是什么在这个上下文中。)从阅读文档我知道这是代码可以与其他一些应用程序共享(不是在这个repo中。)也许在“旧”的repo中,java没有找到类的问题,因为在这个转换需要发生时它们都被包装在一个漂亮的jar中。
这是groovy或我正在使用的第三方库之一的错误,我应该尝试一些新版本的东西,它才会开始工作。
(我对自己的想法并不感到兴奋)
如果你知道如何解决这个问题,那就太棒了。如果没有,应该如何进行?
如果缺少任何重要信息,我很乐意提供。非常感谢你阅读这一切。
Exception in thread "main" org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[class us.rupe.domain.AnswerEntity, class us.rupe.domain.AnswerTagEntity, class us.rupe.domain.BundleEntity, class us.rupe.domain.BundleProductEntity, class us.rupe.domain.IdealProductEntity, class us.rupe.domain.ProductEntity, class us.rupe.domain.QuestionEntity, class us.rupe.domain.TagEntity, class us.rupe.domain.SubjectEntity, class us.rupe.domain.SubjectDependentEntity, class us.rupe.domain.SurveyEntity, class us.rupe.domain.SurveyInstanceEntity, class us.rupe.domain.SurveyInstanceAnswerEntity, class us.rupe.domain.SurveyQuestionEntity, class us.rupe.domain.PurchaseEntity, class us.rupe.domain.QuestionGuardEntity, class us.rupe.domain.RecommenderVersionEntity, class us.rupe.domain.AdjusterConfigurationEntity, class us.rupe.domain.CurrentAdjusterConfigurationEntity]' with class 'com.google.common.collect.RegularImmutableList' to class 'java.lang.Class' due to: java.lang.ClassNotFoundException: [class us/rupe/domain/AnswerEntity, class us/rupe/domain/AnswerTagEntity, class us/rupe/domain/BundleEntity, class us/rupe/domain/BundleProductEntity, class us/rupe/domain/IdealProductEntity, class us/rupe/domain/ProductEntity, class us/rupe/domain/QuestionEntity, class us/rupe/domain/TagEntity, class us/rupe/domain/SubjectEntity, class us/rupe/domain/SubjectDependentEntity, class us/rupe/domain/SurveyEntity, class us/rupe/domain/SurveyInstanceEntity, class us/rupe/domain/SurveyInstanceAnswerEntity, class us/rupe/domain/SurveyQuestionEntity, class us/rupe/domain/PurchaseEntity, class us/rupe/domain/QuestionGuardEntity, class us/rupe/domain/RecommenderVersionEntity, class us/rupe/domain/AdjusterConfigurationEntity, class us/rupe/domain/CurrentAdjusterConfigurationEntity]
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToClass(DefaultTypeTransformation.java:380)
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:249)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:599)
at us.rupe.service.HohumDatabaseService$1.<init>(HohumDatabaseService.groovy)
at us.rupe.service.HohumDatabaseService.initializeHibernateBundle(HohumDatabaseService.groovy:57)
at us.rupe.service.HohumDatabaseService.<init>(BloomDatabaseService.groovy:25)
at us.rupe.RecommendationService.<init>(RecommendationService.groovy)
at us.rupe.RecommendationService.main(RecommendationService.groovy:58)