我从“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/repository。
我尝试重命名有问题的包的包,但这并不能解决问题。我只是在两行中使用新的包名称时遇到相同的错误。
我在 pom.xml 中的依赖项不应包含包含这些类的库。
我尝试在另一位开发人员的计算机上重现此问题,但没有出现问题。
我在两台计算机上看到此问题。这些计算机的很多环境都已同步,因此问题也已同步,我对此并不感到惊讶。然而,在我的办公室计算机上,我可以在 Intellij 中成功执行“mvn install”,但不能在命令行上执行。在我的家用计算机上,我在命令行和 IntelliJ 中都遇到了这个问题。
我已经尝试用 Google 搜索这个问题,但是一旦我从构建中删除了特定于我的项目的文本,我就没有足够具体的内容可供搜索。
pom.xml 可以在这里找到:
http://anonsvn.jboss.org/repos/labs/labs/jbosstm/trunk/txframework/framework/pom.xml
是的,我知道这是一个 JBoss 软件包,其中出现了问题。我为 JBoss 工作,这是我的代码,所以我无法让他们修复它;-)
谢谢。
这是由于该版本的Oracle JDK中编译器的注释处理中的一个bug导致的:
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),可以采取解决方法。
更多详细信息可以在我用来跟踪此问题的错误报告中找到:
编辑:我重组了这个答案,因为它的主要目的是提供一个解决方案来发现问题而不是解决问题。这些元素按照我在评论或此处发布的顺序添加。
这不是一个常规的依赖问题,因为如果你更改类的名称,这个问题就会消失。
可能与java版本有关。尝试明确设置源和目标。
这可能是您的依赖结构中错误的 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>
调用全新安装,然后在 shell 上尝试此命令(在项目的基本路径中,而不是 dist 目录中。):
find . -name "*jar" -exec jar -tvf {} \; |grep RequestType
通过这种方式,您可以看到类路径上有多少个 RequestType 表示形式,也许您会看到错误的表示形式来自何处。
您的类现在可能存在正确的版本,但是引发问题的类(ServiceRequest.java)针对错误的版本进行编译。将它们放在同一个类路径中,然后重试。
您的磁盘上是否有该课程的旧版本?尝试将其删除(如果您仍然需要,可以将其移动到便携式设备上)。
手动删除类路径中的每个二进制文件。不要依赖“mvn clean”来工作。
打印出maven正在使用的类路径(谷歌会告诉你如何做)。检查是否有任何您未预料到的内容。
(晦涩)通过使用 UTF 的更晦涩的功能,可以两次创建完全相同的目录。如果你的路径包含非 ASCII 字符并且你的一台机器是 Mac(真的,不是开玩笑。对于德语能力者:http://www.danisch.de/blog/2011/11/18/wer- unicode-und-utf-erfunden-hat-gehort-erschlagen/)。
您检查过环境变量设置是否正确吗?仔细检查它们。
致电:
mvn 干净 mvn编译
然后查看您有多少个违规类的实例。
清洁工作区也有效。 :)