Spring Jersey - java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map
Spring Jersey - java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map
更新: 所以我只想指出,在我提交这个问题之前,我尝试了我在类似的 Whosebug 问题上看到的解决方案,例如 .它仍然给我 运行 时间错误,所以我决定写这个问题。 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>
现在有效。
很长一段时间以来,我一直在使用 1 个公司内部存储库开发这个 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>
这行得通。我可以在 System.out 中看到它试图从 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 端点均正常运行。取消注释依赖项,re-run 应用程序,并尝试访问我的 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 版本。 Here我明白了。
更新: 所以我只想指出,在我提交这个问题之前,我尝试了我在类似的 Whosebug 问题上看到的解决方案,例如 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>
现在有效。
很长一段时间以来,我一直在使用 1 个公司内部存储库开发这个 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>
这行得通。我可以在 System.out 中看到它试图从 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 端点均正常运行。取消注释依赖项,re-run 应用程序,并尝试访问我的 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 版本。 Here我明白了。