2016-08-29 3 views
0

UPDATE: So möchte ich nur darauf hinweisen, dass, bevor ich diese Frage gestellt, ich versucht die Lösung, die ich auf ähnlichen Stackoverflow-Fragen wie this one gesehen habe. Es gab mir immer noch Laufzeitfehler, also entschied ich mich, diese Frage zu schreiben. mvn dependency:tree ist was ich gesucht habe, danke @dunni. Mit mvn dependency:tree konnte ich die tatsächlichen Namen der Trikots Abhängigkeit finden, der meine Anwendung wurde zu brechen und den Ausschluß aktualisiert, indem sie den Wechsel von:Frühling Jersey - java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties() Ljava/util/Karte

<exclusions> 
    <exclusion> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>jsr311-api</artifactId> 
    </exclusion> 
</exclusions> 

An:

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

Das funktioniert jetzt.


Seit langer Zeit arbeite ich an dieser Spring Jersey REST-Anwendung mit 1 internen Unternehmens-Repository. Jetzt habe ich herausgefunden, dass eine Bibliothek, die ich benutzen muss, nur in einem zweiten internen Unternehmens-Repository existiert. Ich meine .m2 aktualisiert -> settings.xml Konfiguration des Verweis auf die neuen Repo wie so hinzuzufügen:

<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> 

Dies funktioniert. Ich kann in der System.out sehen, dass es versucht, die Repo2 exklusive Abhängigkeit von repo1.company.com/repositories/ herunterzuladen. Es schlägt fehl, dann versucht es, es von repo2.company.com/repositories herunterzuladen, und es ist erfolgreich. Der Build wird fortgesetzt, und Tomcat wird schließlich auf localhost: 8080 gestartet und alles ist in Ordnung.

Das Problem ist, wenn ich versuche, jede meiner Jersey REST-Endpunkte für den Zugriff auf I eingerichtet habe, erhalte ich den Laufzeitfehler in der Frage Titel erwähnt:

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; 

Ich weiß für eine Tatsache, dass die Problem liegt irgendwo in dieser neuen Abhängigkeit, die ich versuche zu verwenden. Wenn ich die Abhängigkeit in meiner pom.xml auskommentiere und die Anwendung erneut ausführen, funktioniert alles einwandfrei. Alle REST-Endpunkte sind funktionsfähig. Kommentieren Sie die Abhängigkeit, führen Sie die Anwendung erneut aus, und versuchen Sie, auf meine REST-Endpunkte zuzugreifen, und ich erhalte den obigen Fehler.

Wie finde ich heraus, warum diese Abhängigkeit meine Jersey-Anwendung zur Laufzeit bricht?

+0

Sie haben höchstwahrscheinlich einen Konflikt in Ihren Abhängigkeitsversionen. Führe 'mvn dependency: tree' aus und poste die Ausgabe hier. – dunni

+0

Danke @dunni. Meine Frage war ** wie ** Ich finde heraus, warum es mir Laufzeitfehler gab, und 'mvn dependency: tree' war genau das, wonach ich suchte. Die '' wurde aktualisiert und jetzt scheint meine Anwendung gut zu funktionieren. Außerdem habe ich meine Frage aktualisiert, um zu zeigen, wie ich das Problem behoben habe. – bscott

Antwort

0

Durch den Fehler kann ich erraten, dass es einige Konflikte in JAR-Dateien gibt Bitte überprüfen Sie, ob Sie ein JAX-RS 1 und JAX-RS 2 Glas auf dem Klassenpfad haben. Jersey 2 verwendet JAX-RS 2 (javax.ws.rs-api-2.0.1.jar), aber wenn Sie auch die jsr311-api.jar haben, die JAX-RS 1 ist, gibt es eine javax.ws.rs .core.Application in jedem Glas. Die Anwendung jsr311-api verfügt jedoch nicht über die Methode getProperties().

+0

Also ging ich zurück und überprüfte (indem ich mvn Abhängigkeit: Baum pro @ Dunnis Vorschlag). Ich habe 'jsr311-api' nicht genau gefunden, aber was ich gefunden habe, war, dass es eine Abhängigkeit mit' com.sun.jersey: jersey-client' hatte. Also habe ich das als Ausschluss für die Abhängigkeit in meiner pom.xml hinzugefügt und es scheint jetzt gut zu funktionieren. – bscott

+0

Obwohl dies meine Frage nicht genau beantwortete, werde ich es immer noch als die richtige Antwort markieren, da es mir geholfen hat, zu der Antwort zu kommen. – bscott

Verwandte Themen