配置构建路径有效,但在pom中添加相同的依赖项不会

时间:2015-10-15 02:48:13

标签: java eclipse maven soap jar

所以我试图在Eclipse项目的一个模块中使用org.apache.cxf.binding.soap.interceptor.SoapHeaderInterceptor。

由于这是我正在添加的新jar,我最初自己下载了它,然后将其添加为项目下的引用库。一切都很好。我让我的类扩展了SoapHeaderInterceptor,而且所有东西都是hunky dory。

所以,一旦我完成了所有的编码,我从引用的库中删除了jar,然后将它添加到我的模块的pom中,如下所示:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-bindings-soap</artifactId>
    <version>2.5.2</version>
</dependency>

我对该项目进行了Maven更新,随后在Maven依赖项下添加了jar。我甚至打开了我当地的m2存储库,它也在那里。

但我现在在课上遇到错误(如下所示)

public class AuthenticationInterceptor extends SoapHeaderInterceptor

如下:

  

项目未构建,因为其构建路径不完整。不能   找到类文件   org.apache.cxf.interceptor.AbstractInDatabindingInterceptor。修复   构建路径然后尝试构建此项目

     

类型org.apache.cxf.interceptor.AbstractInDatabindingInterceptor   无法解决。它是从必需的.class中间接引用的   文件AuthenticationInterceptor.java

     

AuthenticationInterceptor类型的层次结构不一致

注意:SoapHeaderInterceptor扩展了AbstractInDatabindingInterceptor。

我花了好几个小时试图搞清楚这一点,我绝对难过。我多次清理/构建我的工作区。我添加依赖项的模块实际上已经有了几个以前的依赖项,所以它不像是没有为Maven配置的。我看到导入包的行没有错误,所以显然它是在某处找到jar(构建路径或m2 repo)。我正在使用jar的2.5.2版本,并且我知道有人以完全相同的方式使用此jar用于完全相同的目的,成功。

我唯一可以想到的可能是一个问题(有人会证实吗?)是我的本地m2 repo有这个jar的多个版本,一个更旧,两个更新。这会引起某种冲突吗?

编辑:在进一步检查时,我看到org.apache.cxf.interceptor.AbstractInDatabindingInterceptor实际上并不在我的仓库中的任何地方。我在cxf-api-2.5.2.jar中有cxf.interceptor包但它没有这个类。有解决方案吗我是否必须使用不同版本的jar?

2 个答案:

答案 0 :(得分:1)

如果在Eclipse中打开POM并选择&#34; Dependency Hierarchy&#34;你应该能够看到另一个(直接)依赖是否干扰或省略了你需要的jar文件。

我只是试图用这个POM回溯你的步骤:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>art1</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-bindings-soap</artifactId>
        <version>2.5.2</version>
    </dependency>
  </dependencies>
</project>

并创建了一个类:

package art1;

import org.apache.cxf.binding.soap.interceptor.SoapHeaderInterceptor;

public class MyClass extends SoapHeaderInterceptor {

}

它编译得很好。 此外,类org.apache.cxf.binding.soap.interceptor.AbstractInDatabindingInterceptorSoapHeaderInterceptor存在于同一个jar和包中,因此您的环境中似乎还有其他内容。

我的依赖关系层次结构如下所示:

Dependency hierarchy

从相同的依赖关系开始,你的看起来一样吗?

答案 1 :(得分:0)

即使2.5.2被添加到maven依赖项中,我也经历了包结构,发现AbstractInDatabindingInterceptor类实际上并不存在于拦截器包中。我更新到两个罐子的更高版本(绑定为2.7.6,api为2.7.2),一切顺利。