2012-01-16 2 views
2

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

Failure executing javac, but could not parse the error: myPackage\MyClass.class(myPackage:MyClass.class): warning: Cannot find annotation method 'value()' in type 'org.hibernate.annotations.Cascade': class file for org.hibernate.annotations.Cascade not found An exception has occurred in the compiler (1.6.0_27). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport) after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report. Thank you. com.sun.tools.javac.code.Symbol$CompletionFailure: class file for org.hibernate.annotations.CascadeType not found

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

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

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

+1

Не уверен, что вы хотите от нас, точно; вы обнаружили ошибку компилятора, и вы должны сообщить об этом. –

+0

Является ли это ошибкой компилятора? не ошибка компиляции из-за проблем с моим кодом? –

+0

Он говорит прямо в сообщении, которое вы цитируете: «В компиляторе произошло исключение ... Пожалуйста, напишите ошибку ...» Так что да, это не ваша вина! –

ответ

3

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

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

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

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

На боковой стороне составителя:

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

+0

Спасибо, сэр, я узнал, что я действительно переоцениваю сферу своей зависимости от спящего режима, но я получил эту ошибку, когда думал, что я прав. И я до сих пор не понимаю, почему я только получаю спящий режим во время тестирования, так как у меня есть транзитивная зависимость от одного и того же артефакта с областью компиляции. Возможно, вы можете помочь мне с этим на этом посту http://stackoverflow.com/questions/8923787/different-scopes-of-the-same-artifact-and-transitive-dependencies-issue. Спасибо –

+1

Я также видел это исключение для компилятора с Java 1.6.0_26, но он стал регулярным предупреждением с Java 1.7.0_11. Тем не менее, вам, конечно, все равно нужно исправить свой код. В моем случае я использовал библиотеку, которая зависит от [Jackson] (http://jackson.codehaus.org/), но мне просто не хватало библиотек Джексона в моем классе. – sschuberth

+0

Видел ту же ошибку, и сообщение об ошибке вводит в заблуждение. Спасибо за комментарий sschuberth – dongshengcn

Смежные вопросы