【问题标题】:Maven clean install: cannot find symbolMaven全新安装:找不到符号
【发布时间】:2013-10-03 19:24:47
【问题描述】:

我的 Maven 全新安装失败。下面是错误信息。

[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...
    }

MyAnnotation.java

@Retention (RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
} 

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

【问题讨论】:

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

标签: java maven build annotations


【解决方案1】:

发现问题...

我很抱歉,因为我没有包含足够的代码让任何人确定问题的根本原因,通常我不会在我的帖子中包含导入语句,但这次我应该包含。下面的类是一个更完整的例子。正如我们所看到的,下面的类声明了对驻留在静态嵌套类中的对象的静态导入(在同一个 .java 文件中)。虽然从编译的角度来看这不是非法的,但它在我的 Maven 全新安装中引起了问题。我仍然不 %100 确定为什么 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();

}

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

【讨论】:

    【解决方案2】:

    您的maven-compiler-plugin 使用的是 1.5。默认情况下它使用 1.4 并且在 1.5 中引入了注解

    【讨论】:

      【解决方案3】:

      尝试以下方法:

      • 只导入其中一个类。

      • 在另一种情况下始终使用 FQN(完全限定名称),假设这是注释 (@com.foo.MyAnnotation)。

      • 另外,按照 Vinay 的建议,在您的 maven-compiler-plugin 的 <configuration/> 中设置 source 和 target 版本。

      【讨论】:

        猜你喜欢
        • 2020-10-04
        • 2016-12-02
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        • 2021-08-01
        • 2012-08-27
        • 2014-09-05
        • 1970-01-01
        相关资源
        最近更新 更多