Spring Jersey - java.lang.NoSuchMethodError: javax.ws.rs.cor



UPDATE:所以我只是想指出,在我提交这个问题之前,我尝试了我在类似的stackoverflow问题上看到的解决方案,比如这个问题。它仍然给我运行时错误,所以我决定写这个问题。mvn dependency:tree是我一直在寻找的,所以谢谢@dunni。使用mvn dependency:tree,我能够找到破坏应用程序的jersey依赖项的实际名称,并通过将其更改为

来更新排除:
<exclusions>
    <exclusion>
        <groupId>javax.ws.rs</groupId>
        <artifactId>jsr311-api</artifactId>
    </exclusion>
</exclusions>

:

<exclusions>
    <exclusion>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
    </exclusion>
</exclusions>

可以运行了


很长一段时间以来,我一直在使用一个内部公司存储库开发这个Spring Jersey REST应用程序。现在,我发现我需要使用的库只存在于公司的第二个内部存储库中。我更新了我的.m2 -> settings.xml配置,将引用添加到新的repo中,如下所示:

<settings>
    <mirrors>
        <mirror>
            <id>internal-repository1</id>
            <name>name</name>
            <url>http://repo1.company.com/repositories/</url>
            <mirrorOf>*, !repo2</mirrorOf>
        </mirror>
    </mirrors>  
    <profiles>
        <profile>
            <id>profile</id>
            <repositories>
                <repository>
                    <id>repo1</id>
                    <name>repo1</name>
                    <url>http://repo1.company.com/repositories/</url>
                </repository>
                <repository>
                    <id>repo2</id>
                    <name>repo2</name>
                    <url>http://repo2.company.com/respositories/</url>
                </repository>
            </repositories>
        </profile>                
    </profiles>
    <activeProfiles>
        <activeProfile>profile</activeProfile>
    </activeProfiles>
</settings>

这工作。我可以在系统中看到。它试图从repo1.company.com/repositories/下载repo2独占依赖项。它失败了,然后它尝试从repo2.company.com/repositories下载它并成功了。继续构建,最终tomcat在localhost:8080上启动,一切正常。

问题是,每当我试图访问我设置的任何Jersey REST端点时,我都会得到问题标题中提到的运行时错误:

ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[my.package.name] 
- Allocate exception for servlet my.package.name.JerseyConfig
java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;

我知道一个事实,问题出在我试图使用的这个新依赖的某个地方。当我在pom.xml中注释掉依赖项并重新运行应用程序时,一切正常。所有REST端点都是功能性的。取消对依赖项的注释,重新运行应用程序,并尝试访问我的REST端点,我得到了上面的错误。

我如何去发现为什么这个依赖在运行时破坏了我的Jersey应用程序?

通过看到错误,我可以猜测jar文件中有一些冲突,请检查类路径上是否有JAX-RS 1和JAX-RS 2 jar。Jersey 2使用JAX-RS 2 (javax.ws.rs-api-2.0.1.jar),但如果您也有jsr311-api.jar,即JAX-RS 1,则每个jar中都有一个javax.ws.rs.core.Application。但是jsr311-api应用程序没有getProperties()方法。

我得到了相同的异常,尽管它是在不同的依赖:

我要改变我的sql驱动程序版本:

<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>mssql-jdbc</artifactId>
  <version>6.2.2.jre8</version>
</dependency>

之前,我使用的是6.1.0.jre8版本。我明白了。

最新更新