我正在使用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
UPD 2:
ContentManager.java:[15,46]是import wp2.core.cdr.entities.ContentType;
UPD 3:
现代编译器还会显示bad class
和bad signature
错误
答案 0 :(得分:11)
我终于找到了答案
错误在costructor中:
ContentType(@NotNull String title...
枚举中的构造函数不得包含注释,因为javac
会被置号。
Javac存储了enum
构造函数的错误签名(你编写的那个,而不是实际使用的那个 - 我记得它有两个额外的参数)。
当javac
验证签名时,它会看到带注释的参数,在我的情况下,它是第一个参数。但是在实际签名(String name, int ordinal, String title, CoreType coreType, boolean hasJad, String[] searchKeywords
中,两个第一个参数由枚举添加 - >枚举翻译)title
仅第三个参数和< strong> first 参数为name
未注释,javac认为该类不正确。
tl; dr 从构造函数中删除注释,javac是错误的
答案 1 :(得分:1)
可能是代码中的一个错误,它试图确定在更改后需要编译哪些类。
试用最新版本的Maven compiler plugin。版本号位于链接后面的页面上,右侧标题中,Maven徽标下方(撰写本文时为3.2
)。