由于“不兼容的类型”,mvn安装失败

时间:2011-12-07 15:15:16

标签: maven maven-3

我从“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工作,这是我的代码,所以我无法让他们修复它; - )

感谢。

3 个答案:

答案 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)。

可以在错误报告中找到更多详细信息,我用它来跟踪此问题:

https://issues.jboss.org/browse/JBTM-997

答案 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)

清洁工作区也有效。 :)