Java (библиотека) не может найти классы Grooy - PullRequest
0 голосов
/ 01 июня 2018

Я нахожусь в сложной ситуации, и я постараюсь быть кратким, но я с радостью предоставлю любую дополнительную информацию.

Я унаследовал ответственность за огромное, древнее (в годы Интернета) и плохо документированная кодовая база, в основном в отличном виде.К счастью, подавляющее большинство этой огромной системы приложений, сервисов и плагинов будет «окончено» через несколько месяцев, но однажды нужно будет жить дальше.Я пытался извлечь только этот кусок.Так что он может работать самостоятельно.

В целом все прошло довольно хорошо, есть несколько модульных тестов, поэтому я смог использовать компиляцию и модульные тесты, чтобы выяснить, какие файлы классов яМне нужно было собрать и сторонние библиотеки, которые мне нужны.

Однако я столкнулся с проблемой (как в модульных тестах, так и при попытке "запустить" приложение).

Сообщение об ошибке

Сообщение об ошибке выглядит примерно так:

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 (это не решило проблему).

Больше информации, чем вам требуется

Боюсь, я не знаю, отличный илиЯва или Gradle, что хорошо, и я понимаю экосистему, даже яess.

В среднесрочной перспективе я планирую довести зависимости и среду до версий, которые в настоящее время поддерживаются, но я думаю, что было бы лучше, чтобы сначала это работало по-старому.

Оригинальный проект, из которого я извлек весь этот код, все еще строит.Код, который я привел, был распределен по многим различным проектам, которые были очень сложным деревом зависимостей.Я подумал, что было бы лучше объединить их в один проект, так как «новая» база кода будет намного меньше.

Я потратил довольно много времени на изучение кода, где происходит эта ошибка(и это трассировка стека), похоже, что многое происходит

     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).

Идеи

Все эти сущностибыли в «плагине» (я все еще не уверен, что именно «плагин» именно в этом контексте). Из прочтения документации я знаю, что это было так, чтобы код можно было поделиться с некоторыми другими приложениями (не в этом репо).Возможно, в «старом» репо у java нет проблем с поиском классов, потому что все они завернуты в хорошую банку к тому времени, когда это кастинг должен произойти.

Это ошибка в groovy или одна изСторонние библиотеки, которые я использую, и я должен попробовать некоторые новые версии вещей, и он просто начнет работать.

(меня не особо волнует ни одна из моих идей)

Вопрос

Если вы кТеперь, как решить эту проблему, это было бы замечательно.Если нет, то как поступить?

Если какая-то важная информация отсутствует, я с радостью ее предоставлю.Большое спасибо за чтение всего этого.

Full Stack Trace

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...