2017-04-26 13 views
0

저는이 문제를 조금 전에 디버깅하려했는데 SO와 다른 웹 사이트를 검색하면서 해결책을 찾지 못했습니다. 내 pom.xml에있는 모든 종속성 버전을 검사하고 grizzly2와 호환되는지 확인하고 가져 오는 중임을 확인했습니다. 그러나, 자바는 여전히 실행에이 오류를 인쇄한다 : 어떤 도움을 이해할 수있을 것이다 4.0.0java.lang.NoSuchMethodError : org.glassfish.jersey.server.ApplicationHandler. <init>

<groupId>com.kyrapanel.daemon</groupId> 
<packaging>jar</packaging> 
<name>KyraPanel Daemon</name> 
<artifactId>KyraDaemon</artifactId> 
<version>1.0-SNAPSHOT</version> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey</groupId> 
      <artifactId>jersey-bom</artifactId> 
      <version>${jersey.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-grizzly2-http</artifactId> 
     <version>2.9.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.grizzly</groupId> 
     <artifactId>grizzly-http-all</artifactId> 
     <version>2.3.30</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>2.25.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet-core</artifactId> 
     <version>2.25.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
     <version>3.3.1</version> 
    </dependency> 
</dependencies> 

<build> 
    <finalName>${project.artifactId}</finalName> 
    <plugins> 
     <!-- any other plugins --> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <inherited>true</inherited> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.2.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>com.kyrahosting.daemon.Main</mainClass> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<properties> 
    <jersey.version>2.17</jersey.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

:

여기
Exception in thread "main" java.lang.NoSuchMethodError: org.glassfish.jersey.server.ApplicationHandler.<init>(Ljavax/ws/rs/core/Application;Lorg/glassfish/hk2/utilities/Binder;)V 
at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.<init>(GrizzlyHttpContainer.java:334) 
at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory.createHttpServer(GrizzlyHttpServerFactory.java:122) 
at com.kyrahosting.daemon.Main.startServer(Main.java:30) 
at com.kyrahosting.daemon.Main.main(Main.java:34) 

내 pom.xml 파일입니다!

답변

1

는 뉴저지 버전 하나가 다른

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-grizzly2-http</artifactId> 
    <version>2.9.1</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.core</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>2.25.1</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet-core</artifactId> 
    <version>2.25.1</version> 
</dependency> 

를 혼합하지 마십시오? 고쳐.

그리고

은 이미 당신이 그리 즐에 필요한 모든 것을에서 끌어이

<dependency> 
    <groupId>org.glassfish.grizzly</groupId> 
    <artifactId>grizzly-http-all</artifactId> 
    <version>2.3.30</version> 
</dependency> 

jersey-container-grizzly2-http 제거.

"GrizzlyHttpServerFactory가 존재하지 않습니다."라는 오류는 무시됩니다. 당신이 뉴저지에서 일부 클래스를 말할 때문에 버전입니다 혼합 할 때이 오류를 얻을 것이

java.lang.NoSuchMethodError: org.glassfish.jersey.server.ApplicationHandler.<init>(Ljavax/ws/rs/core/Application;Lorg/glassfish/hk2/utilities/Binder;)V 

이유를 읽을 방법은 그 (이 경우 생성자에서) 그런 방법

public ApplicationHandler(Application application, Binder binder) {} 

이 없다는 것을 말하는 2.25.1에서 위에서 언급 한 생성자를 호출하려고합니다. 그러나 버전 2.9.1에서는이 생성자가 존재하지 않습니다. 그것이 더 나중 버전까지 추가되지 않았다는 것을 밝힌다. 그러나 클래스를로드 할 때 2.25.1의 클래스 대신에 2.9.1의 ApplicationHandler이로드됩니다. 이제 잘못된 ApplicationHandler 버전이로드되었습니다. 따라서 오류; 그런 생성자가 없습니다.

+0

매우 유익한 답변을 보내 주셔서 감사합니다. 나는 그 버전을 잡지 못했다고 믿을 수 없다! – DarkestCodes

1

12 월 17 일에,이 Maven 의존성 세트는 RS를 사용하여 Jetty를 시작하는 데 적합했습니다.

<dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-server</artifactId> 
     <version>9.4.8.v20171121</version> 
    </dependency> 

    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-servlet</artifactId> 
     <version>9.4.8.v20171121</version> 
    </dependency> 

    <dependency> 
     <groupId>org.eclipse.jetty</groupId> 
     <artifactId>jetty-webapp</artifactId> 
     <version>9.4.8.v20171121</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>javax.ws.rs-api</artifactId> 
     <version>2.1</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.bundles.repackaged</groupId> 
     <artifactId>jersey-guava</artifactId> 
     <version>2.26-b03</version> 
    </dependency>