2017-09-09 1 views
0

Ich arbeite mit beiden Jersey-Kern: 1,8 und jrs311: 0,8. Beide Abhängigkeiten werden benötigt. Beim Ausführen des Komponententests IntellJ bekomme ich manchmal die Ausnahme unten. Durch die Anordnung der Abhängigkeiten wurde die Ausnahme gestoppt, aber beim Start in Tomcat 7.0.2 wird immer die Ausnahme angezeigt. Das Umordnen der Bibliotheken behebt das Problem nicht.Wie man in Konflikt stehende Path.class zwischen jsr311-api und Jersey-Core auflösen?

Graben weiter hinein, ich fand die Klasse "javax.ws.rs.Path" ist in beiden Abhängigkeiten. Es wurde aufgenommen, aber nicht als Abhängigkeit. Die in jrs311 enthaltene enthält eine zusätzliche Methode namens limited(). Die Klasse URITemplate scheint immer die Path.class im Jersey-Kern Lib daher die Ausnahme zu finden.

Ich habe versucht, zu verschiedenen Versionen der Bibliotheken, aber nicht erfolgreich. Aufgrund des Codes, mit dem ich arbeite, werden beide Bibliotheken benötigt.

Hat jemand irgendwelche Ideen, wie man dieses Problem löst?

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.apache.cxf.jaxrs.JAXRSServerFactoryBean com.emailvision.nsapi.conf.NsApiSpringConf.restServerFactory(com.emailvision.nsapi.service.impl.NotificationServiceREST)] threw exception; nested exception is java.lang.NoSuchMethodError: javax.ws.rs.Path.limited()Z 
* at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:181) 
* at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:592) 
* ... 27 more 
* Caused by: java.lang.NoSuchMethodError: javax.ws.rs.Path.limited()Z 
* at org.apache.cxf.jaxrs.model.URITemplate.createTemplate(URITemplate.java:167) 
* at org.apache.cxf.jaxrs.JAXRSServiceFactoryBean.createClassResourceInfo(JAXRSServiceFactoryBean.java:198) 
* at org.apache.cxf.jaxrs.JAXRSServiceFactoryBean.setResourceClassesFromBeans(JAXRSServiceFactoryBean.java:139) 
* at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.setServiceBeans(JAXRSServerFactoryBean.java:272) 
+0

Wenn dies das einzige Problem ist, können Sie die Klasse von jsr311 jar in das Jersey-Kernglas kopieren und sehen, dass es funktioniert. – Oleg

+0

Dies funktioniert nicht, da diese Abhängigkeiten von Maven verwaltet werden. Sicherlich entfernt man die von Path.class funktioniert aber immer wenn ich eine Neuerstellung mache wird die Abhängigkeit überschrieben. Es muss eine Art Kontrolle haben, um zu verhindern, dass ein anderes Mitglied meines Teams es ersetzt. –

+0

Sie können Ihre eigene Version erstellen und sie dann in Ihrem Team-Repository bereitstellen, wenn Sie eines haben, oder es zu git oder dem von Ihnen verwendeten VCS hinzufügen. Beginnen Sie mit dem Kauf und prüfen Sie, ob Ihr Problem dadurch tatsächlich gelöst wird. – Oleg

Antwort

0

Ich konnte eine Lösung finden, die in einer vorhersagbaren Weise funktioniert. Was ich getan habe, war die Quelle für javax.ws.rs.Path aus der jrs311:0.8 Abhängigkeit herunterladen, die die limited() Methode enthält. Ich fügte dann meinem src als Teil meines Projektes hinzu. Da der SRC meines Projekts eine höhere Präzedenz als alle Abhängigkeiten hat, greift Java immer auf diese Klasse zurück.

Ich mag die Lösung selbst nicht. Ich musste einen großen Bericht schreiben, um meine Aktion an meinen Chef zu richten. Denken Sie darüber nach, die Leute, die das jrs311:0.8 Glas verpacken, müssen das gleiche Problem gehabt haben, wie Sie einen Open-source Java-Code einschließen würden, den Sie nicht selbst geschrieben haben.

+0

Die obige Lösung funktionierte nicht für alle Cenarios. Code, der jrs311-Klassen initialisiert, aber Code, der Jersey-Core verwendet, ist fehlgeschlagen. Am Ende musste ich Jersey-Kern entfernen und stattdessen mit Jackson neu implementieren. Hofft, dass dies denjenigen hilft, die nach einer Lösung suchen. –

Verwandte Themen