Странная ошибка компиляции с Maven - PullRequest
2 голосов
/ 16 января 2012

У меня есть проект A, который зависит от проекта B, который зависит от проекта C. Проект C зависит от Hibernate (точнее, org.hibernate: hibernate-core: 3.6.8.Final). Проект B не зависит от спящего артефакта. Но проект A зависит от этого артефакта, но только для модульных тестов, поэтому я использую область тестирования. Когда я пытаюсь собрать A, проекты C и B правильно собираются и устанавливаются, но я получаю следующую ошибку во время компиляции A:

Сбой при выполнении javac, но не удалось разобрать ошибку: myPackage \ MyClass.class (myPackage: MyClass.class): предупреждение: не удается найти метод аннотации 'value ()' в типе org.hibernate.annotations.Cascade: файл класса для org.hibernate.annotations.Cascade not found Исключительная ситуация в компиляторе (1.6.0_27). Пожалуйста, отправьте сообщение об ошибке на Java Developer Соединение (http://java.sun.com/webapps/bugreport) после проверки Bug Parade для дубликатов. Включите вашу программу и следующее диагностика в вашем отчете. Спасибо. com.sun.tools.javac.code.Symbol $ CompletionFailure: файл класса для org.hibernate.annotations.CascadeType не найден

Я точно указал, что MyClass принадлежит проекту C и импортирует org.hibernate.annotations.Cascade. И C успешно компилируется, чтобы найти указанный класс. Но здесь, кажется, что файл класса не может быть найден во время компиляции. Я думал, что, возможно, зависимость тестируемой области от Hibernate может отменить зависимость C от Hibernate? Но я понятия не имею.

Кроме того, если я изменю область зависимости в проекте A от теста к компиляции, проблема исчезнет.

Спасибо за вашу помощь

1 Ответ

3 голосов
/ 19 января 2012

Это и ошибка компилятора, и ошибка в вашем коде.

На вашей стороне:

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

Аннотации, используемые в MyClass в проекте C, доступны во время выполнения (в противном случае hibernate не сможет ссылаться на них при запуске проекта).Это означает, что когда вы компилируете, javac должен иметь возможность загружать эти аннотации, но не может их найти.

На стороне компилятора:

Технически это просто выплюнуть с помощьюлюбой другой компилятор генерирует ошибки / предупреждения.Однако кто-то что-то пропустил на стороне компилятора, поэтому компилятор падает, вместо добавления в список предупреждений.Я бы порекомендовал обновить систему до последней версии JDK, попробуйте еще раз, и если она все еще не работает, сообщите об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...