Maven compiler plugin error: can't access enum (bad signature, bad class)

Maven compiler plugin error: can't access enum (bad signature, bad class)

我正在使用 maven-compiler-plugin:2.3.2,每次我在 类 中进行更改时,它在导入中有一个枚举 (ContentType),我需要进行 clean,否则它给了我:

ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project wp2: Compilation failure
[ERROR] /home/semyon/development/.../ContentManager.java:[15,46] error: cannot access ContentType
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project wp2: Compilation failure
/home/semyon/development/.../ContentManager.java:[15,46] error: cannot access ContentType

at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.MojoExecutor.executeForkedExecutions(MojoExecutor.java:364)
...

ContentType 是 enum 并且看起来像这样:

import org.jetbrains.annotations.NotNull;

public enum ContentType {

    ...; 

    private final String title;

    private final boolean hasJad;

    private final CoreType coreType;

    private final String[] searchKeywords;



    ContentType(@NotNull String title, CoreType coreType, boolean hasJad, String[] searchKeywords) {
        this.title = title;
        this.coreType = coreType;

        this.hasJad = hasJad;
        this.searchKeywords = searchKeywords;
    }

    @NotNull
    public String getTitle() {
         return title;
    }

    @NotNull
    public String getName() {
        return name();
    }

    @NotNull
    public CoreType getCoreType() {
        return coreType;
    }

    public enum CoreType {

         ...;

        private String title;

        CoreType(String title) {
            this.title = title;
        }

        public String getTitle() {
            return title;
        }

    }
}

UPD1,项目结构:

        /wp2
             /core
                  /cpe
                     /widget
                           /ContentManager.java
                  /cdr
                     /entities
                           /ContentType.java

更新 2:

ContentManager.java:[15,46] 是 import wp2.core.cdr.entities.ContentType;

更新 3: 现代编译器也会显示 bad classbad signature 错误

可能是代码中的错误,它试图确定更改后需要编译哪些 类。

试用最新版本Maven compiler plugin。版本号在 link 后面的页面上,在右侧 header 中,在 Maven 徽标下方(3.2 在撰写本文时)。

终于找到答案了

错误在构造函数中:

ContentType(@NotNull String title...

枚举中的构造函数中不能有注释,因为 javac 有问题。 Javac 为 enum 构造函数存储了不正确的签名(你写的那个,而不是实际使用的那个——我记得它有两个额外的参数)。 当 javac 验证签名时,它会看到 annotated 参数,在我的例子中是 first 参数。但是在 actual 签名中(String name, int ordinal, String title, CoreType coreType, boolean hasJad, String[] searchKeywords,两个第一个参数是通过 enum -> Enum 翻译添加的)title 只是 third参数和第一个参数是name未注释并且javac认为class不正确。

tl;dr 从构造函数中删除注释,javac 有问题