![](/img/trans.png)
[英]Jersey Startup Issue : java.lang.NoSuchMethodError: com.google.common.collect.Sets.newIdentityHashSet()
[英]NoSuchMethodError on startup in Java Jersey app
嘗試在 Tomcat 上啟動 Jersey 應用程序時,我遇到了一個非常奇怪的錯誤。 相同的代碼適用於其他計算機。 我嘗試重新安裝 tomcat,我所有的 maven 依賴項,甚至 Eclipse 和 Java 本身,但沒有運氣。 似乎正在加載一個糟糕的 Jersey 版本,我想?
任何指向正確方向的指針將不勝感激。
這是有效的 pom: http : //pastebin.com/NacsWTjz
和實際的 pom: http : //pastebin.com/H6sHe4ce
2015-02-13 13:43:40,870 [localhost-startStop-1] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/middleware-server] - StandardWrapper.Throwable
java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:304)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:285)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1031)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4901)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5188)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
注意:請參閱上述評論以獲得進一步的討論和提示。
這個錯誤通常意味着你在類路徑上有一個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,那么就有一個javax.ws.rs.core.Application
在每個jar中。 但是jsr311-api
Application
沒有方法getProperties()
(因此NoSuchMethodError
)。
我得出的結論是,您需要做的就是將上述排除添加到swagger依賴項中。 Jackson 2.0提供程序(依賴於JAX-RS 1)似乎被2.4.1提供程序(使用新版本)覆蓋。 所以我們不需要自己添加它。 當它被覆蓋時,它似乎留下了jsr311-api.jar
。 因此,如果我們排除它,沒有人可以嘗試使用它,這看起來是當前的問題
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-core_2.10</artifactId>
<version>1.3.11</version>
<exclusions>
<exclusion>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</exclusion>
</exclusions>
</dependency>
我們正在使用jersey-json
1.9,它依賴於jersey-core
,它也碰巧有一個javax.ws.rs.core.Application
類。
所以我們的解決方法是從jersey-json
排除jersey-core :
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.9</version>
<exclusions>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
</exclusion>
</exclusions>
</dependency>
問題與“com.sun.jersey:jersey-core:jar:1.18.3”(或任何1. *版本)有關,因為舊版本的Jersey沒有“public Map getProperties()”方法。
並且您的一個依賴項使用Jersey版本1(您可以檢查運行mvn依賴項:樹並搜索所有使用的jersey-core版本)
我已經解決了刪除所有com.sun.jersey dependancies(舊api)並使用新的org.glassfish.jersey API的問題
https://mvnrepository.com/artifact/org.glassfish.jersey.core
回復 Koshan Imanga 將 tomcat 版本更改為 7 的回答。我現在在進行 Tomcat 遷移工作時面臨同樣的問題,我們正在將基於 REST API 的應用程序從 Tomcat 7.x 遷移到 Tomcat 9.x。 看到這個錯誤發生在 TC-9 上而不是 TC-7 上,這很奇怪。 應用程序代碼在 Tomcat-7 中運行良好。 如果 jersey 1.x jar 是問題,那么它也應該在 Tomcat 7 中拋出這個錯誤。 誰能告訴我為什么它在 TC 7 中有效?
您可以將tomcat版本更改為7然后它將不需要更改pom.xml
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.