【发布时间】:2013-05-07 10:02:17
【问题描述】:
我正在简化(这是一个词吗?)一个项目,其构建过程迄今为止完全基于 ant/shell 脚本。
考虑以下枚举
public enum ResourceType {
A, B;
}
以下bean:
public ResourceTypeOwner {
//set get resourceType property
}
还有如下代码sn-p:
void foo(ResourceTypeOwner rto) {
ResourceType resourceType = rto.getResourceType();
switch (resourceType) {
case A:
handleA(resourceType); break;
case B:
handleB(resourceType); break;
default:
throw new RuntimeException("Unsupported resource type");
}
}
使用 maven 构建时出现编译错误:
无法打开 ResourceType 类型的值。只能转换 int 允许使用值或枚举变量
pom.xml 有如下插件配置供编译
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<compilerId>eclipse</compilerId>
<compilerVersion>1.6</compilerVersion>
<source>1.6</source>
<target>1.6</target>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-eclipse</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
</plugin>
...
</plugins>
ant(使用 org.eclipse.jdt.core.JDTCompilerAdapter)和 eclipse 构建/编译都很好。我显然做错了什么(除非它是一个未报告的 maven-compiler-plugin 或 plexus-compiler-eclipse 插件错误,这有点不太可能,打开枚举既不是坏事也不是火箭科学)。有人有想法吗?
其他环境细节
$mvn -version Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200) Maven 主页:/home/d/dev/tools/apache-maven-3.0.4 Java 版本: 1.6.0_35,供应商:Sun Microsystems Inc. Java 主页:/opt/jdk1.6.0_35/jre 默认语言环境:en_US,平台编码:UTF-8 操作系统名称:“linux”,版本:“3.2.0-40-generic”,arch:“amd64”,家族: “unix”
更新:
标准 JDK 编译器成功编译特定类。看起来像 plexus-compiler-eclipse 2.2 问题。
【问题讨论】:
-
检查你的类路径中是否只有一个
ResourceType(包括依赖项)。我相信您还有另一个(常规)同名课程。 -
我刚刚在整个 mvn 存储库中搜索了具有相同名称的类。没有了。此外,它发生在两个不同的枚举上(这些是在整个项目上打开枚举的唯一情况)。最后将枚举重命名为 ResourceType123456(使用 eclipse 重构)。同样的问题。不过谢谢。
-
一定要用eclipse编译器吗? jdk 有什么问题?
-
存在泛型推断的情况,主要是 javac 不允许而 ecj 允许。考虑
foo() 和 bar() 和 foo 在其方法体中调用 bar。 Javac 也强制您将第二个参数添加到 foo 中。我不是建议 foo 应该只有一个类型参数,但我没有编写整个代码库;) -
我也有同样的问题。它特定于 eclipse 编译器。
标签: java maven-3 maven-compiler-plugin