与Maven奇怪的编译错误

时间:2012-01-16 14:28:23

标签: java maven compiler-errors

我有一个依赖于项目B的项目A依赖于项目C.项目C依赖于Hibernate(更准确地说是org.hibernate:hibernate-core:3.6.8.Final)。项目B不依赖于休眠神器。但是,项目A依赖于此工件,但仅用于单元测试,因此我使用测试范围。当我尝试构建A时,项目C和B已正确构建并安装但在编译期间出现以下错误:

  

执行javac失败,但无法解析错误:   myPackage \ MyClass.class(myPackage:MyClass.class):警告:找不到   类型中的注释方法'value()'   'org.hibernate.annotations.Cascade':用于的类文件   未找到org.hibernate.annotations.Cascade发生了异常   在编译器(1.6.0_27)中。请在Java Developer中提交错误   检查后连接(http://java.sun.com/webapps/bugreport)   Bug Parade for duplicatelicates。包括您的计划和以下内容   报告中的诊断。谢谢。   com.sun.tools.javac.code.Symbol $ CompletionFailure:用于的类文件   未找到org.hibernate.annotations.CascadeType

我确切地知道MyClass属于项目C并导入org.hibernate.annotations.Cascade。并且C编译成功,因此它可以找到所述类。 但是在这里,似乎在编译期间找不到类文件。我认为可能对Hibernate的测试范围依赖可能会取消C的Hibernate依赖?但是,我不知道。

此外,如果我将项目A中的依赖项范围从测试更改为编译,则问题将消失。

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

这是编译器错误和代码中的错误。

在你身边:

你正在覆盖瞬态hibernate依赖的范围,因此它在编译时不可用,仅在测试时。

项目C中MyClass中使用的注释在运行时可用(否则hibernate在运行项目时将无法引用它们)。这意味着在编译时,javac需要能够加载这些注释,但却无法找到它们。

在编译器方面:

这在技术上应该与任何其他编译器生成的错误/警告一起吐出。但是,有人遗漏了编译器方面的内容,因此编译器崩溃而不是附加到警告列表中。我建议更新到最新的JDK,再试一次,如果它仍然无法报告错误。