Java Maven clean安装:找不到符号

Java Maven clean安装:找不到符号,java,maven,build,annotations,Java,Maven,Build,Annotations,我的Maven clean安装失败。下面是错误消息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project MyProject: Compilation failure: Compilation failure: [ERROR] C:\..\MyClass.java:[13,2] cannot find sym

我的Maven clean安装失败。下面是错误消息

[ERROR] Failed to execute goal
org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile
(default-compile) on project MyProject: Compilation failure:
Compilation failure:

[ERROR] C:\..\MyClass.java:[13,2] cannot find symbol

[ERROR] symbol  : class MyAnnotation

[ERROR] location: class mypackage.MyClass
MyClass.java

public class MyClass{

    @MyAnnotation
    public static class MyAnnotation{
        //some static nested class code here...
    }
@Retention (RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
} 
MyAnnotation.java

public class MyClass{

    @MyAnnotation
    public static class MyAnnotation{
        //some static nested class code here...
    }
@Retention (RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
} 

我不知道为什么会出现问题,有人能给我一些想法吗?

你的
maven编译器插件使用的是1.5吗。默认情况下,它使用1.4,注释在1.5中引入。请尝试以下操作:

  • 只导入其中一个类

  • 对于另一种情况,请始终使用FQN(完全限定名),让我们假设这是注释(
    @com.foo.MyAnnotation

  • 此外,正如Vinay所建议的,在
    maven编译器插件的
    中设置
    源代码
    目标版本

找到了问题

我很抱歉,因为我没有为任何人提供足够的代码来确定问题的根本原因,通常我不会在我的帖子中包含导入语句,但这次我应该这样做。下面的课程是一个更完整的例子。正如我们所看到的,下面的类声明了对静态嵌套类(在同一个.java文件中)中的对象的静态导入。虽然从编译的角度来看这并不违法,但它在我的Maven clean安装中引起了问题。我仍然无法百分之百确定maven为什么不喜欢这样,但是这种静态导入的方式一开始就没有什么意义。为了解决这个问题,我删除了静态导入,并在使用静态导入的地方替换了一个普通的静态调用(MyAnnoation.someObject)

package com.classes;

import static com.classes.MyClass.MyAnnotation.someObject;

public class MyClass{

     @MyAnnotation
     public static class MyAnnotation{

     public static final Object someObject = new Object();

}

再次为没有在我的原始帖子中提供静态导入详细信息表示歉意,希望有人会觉得这很有帮助。

您有一个名为
MyAnnotation
的类和注释?听起来是个坏主意。这是我继承的项目,没有访问源代码的权限:(那么至少检查一下你的包。Java编译器需要知道你的类在哪里。如果你没有访问源代码的权限,那么maven编译的是什么?你怎么知道源代码是这样的呢?对不起,措辞错误,我可以看到源代码,但我继承了jar文件。我无法更改它。)