我从“mvn clean install”
收到以下错误 [ERROR] /private/tmp/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/transaction/WSBA.java:[21,65] incompatible types
found : org.jboss.narayana.txframework.api.configuration.transaction.CompletionType
required: org.jboss.narayana.txframework.api.configuration.transaction.CompletionType
[ERROR] /private/tmp/framework/src/main/java/org/jboss/narayana/txframework/api/annotation/service/ServiceRequest.java:[32,56] incompatible types
found : org.jboss.narayana.txframework.api.configuration.service.RequestType
required: org.jboss.narayana.txframework.api.configuration.service.RequestType
[INFO] 2 errors
我假设这是一个依赖性问题,并且在某个构建路径中有另一个CompletionType实例。我已经检查过这不是这种情况,并尝试使用空的〜/ .m2 /存储库。
我已经尝试重命名违规软件包的包,这不能解决问题。我只是在两行上使用新包名称得到了同样的错误。
我在pom.xml中的依赖项不应该包含一个包含这些类的库。
我试图在另一台开发人员的计算机上重现这一点,但问题不会发生。
我在两台计算机上看到了这个问题。这些计算机有很多环境同步,所以我也不会惊讶于问题也在同步。但是在我的办公室计算机上,我可以在Intellij中成功完成“mvn install”,但不能在命令行上执行。在我的家用计算机上,我在命令行和IntelliJ中都遇到了这个问题。
我已经针对此问题尝试了Google,但是一旦我从构建中删除了特定于我的项目的文本,我就没有足够的具体内容来搜索。
pom.xml可以在这里找到:
http://anonsvn.jboss.org/repos/labs/labs/jbosstm/trunk/txframework/framework/pom.xml
是的,我知道这是一个JBoss包,其中出现了问题。我为JBoss工作,这是我的代码,所以我无法让他们修复它; - )
感谢。
答案 0 :(得分:3)
这是由此版本的Oracle JDK中编译器的注释处理中的错误引起的:
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)
它也出现在等效的mac版本中,在发布时是最新版本。
我通过切换到OpenJDK的这个版本修复了问题:
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.4) (fedora-60.1.10.4.fc15-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
如果您无法切换JDK,则有一些解决方法(例如,如果您有mac)。
可以在错误报告中找到更多详细信息,我用它来跟踪此问题:
答案 1 :(得分:2)
编辑:我重新构建了这个答案,因为它的主要目的是提供一个解决方案来找到问题而不是解决问题。这些元素按照我在评论中或在此处发布的顺序添加。
0)不是一个常规的依赖性问题,因为如果你改变你的类的名字就会消失。
1)它可能与java版本有关。尝试明确设置源和目标。
2)它可能是你的依赖结构错误的jar,试试这个: 把它添加到你的pom:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<outputDirectory>
${project.build.directory}
</outputDirectory>
</configuration>
<executions>
<execution>
<phase>initialize</phase>
<configuration>
<version>4.0.0</version>
</configuration>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
调用clean install,然后在shell上尝试此命令(在项目的基本路径中,而不是dist目录。):
find . -name "*jar" -exec jar -tvf {} \; |grep RequestType
通过这种方式,您可以看到您的类路径中有多少RequestType表示,也许您会看到错误的表示来自哪里。
3)现在你的类的正确版本可能存在,但是发起问题的类(ServiceRequest.java)可以编译错误的类。将它们放在同一个类路径中,然后再试一次。
4)你的磁盘上有一个旧版本的类吗?尝试将其删除(如果仍需要,请将其移到便携式设备上)。
5)手动删除类路径中的每个二进制文件。不要依赖'mvn clean'来工作。
6)打印maven正在使用的类路径(谷歌将告诉你如何)。检查您没有想到的任何内容。
7)(模糊)通过使用UTF更加模糊的功能,可以两次创建完全相同的目录。如果您的路径包含非ASCII字符并且您的某台计算机是Mac(实际上不是笑话,那就会发生这种情况。对于德语能力:http://www.danisch.de/blog/2011/11/18/wer-unicode-und-utf-erfunden-hat-gehort-erschlagen/)。
8)您是否检查过环境变量是否设置正确?仔细检查一下。
9)致电:
mvn clean
mvn compile
然后查看您有多少个违规类的实例。
答案 2 :(得分:0)
清洁工作区也有效。 :)