2017-10-15 2 views
4

jdk 1.9를 사용하고 있습니다. 간단한 ReST 서비스를 제공하려고합니다. 메이븐 아키타 입을 사용하여 프로젝트를 만들었습니다 : jersey-quickstart-webapp. 그런 다음 pom.xml 및 web.xml을 수정했습니다. 내 받는다는 설정은 다음과 같습니다JDK 1.9의 경우 어떤 저지 버전을 다운로드해야합니까?

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>restWebService</groupId> 
    <artifactId>restWebService</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>restWebService</name> 

    <build> 
     <finalName>restWebService</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.7.0</version> 
       <inherited>true</inherited> 
       <configuration> 
        <source>9</source> 
        <target>9</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <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> 
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>5.0.0.RELEASE</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client --> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-client</artifactId> 
      <version>1.19.4</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-bundle --> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-bundle</artifactId> 
      <version>1.19.4</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-server --> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-server</artifactId> 
      <version>1.19.4</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-core --> 
     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-core</artifactId> 
      <version>1.19.4</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/asm/asm --> 
     <dependency> 
      <groupId>org.ow2.asm</groupId> 
      <artifactId>asm</artifactId> 
      <version>6.0_BETA</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.json/json --> 
     <dependency> 
      <groupId>org.json</groupId> 
      <artifactId>json</artifactId> 
      <version>20170516</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl --> 
     <dependency> 
      <groupId>com.sun.xml.bind</groupId> 
      <artifactId>jaxb-impl</artifactId> 
      <version>2.3.0</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/javax.xml/jaxb-api --> 
     <dependency> 
      <groupId>javax.xml</groupId> 
      <artifactId>jaxb-api</artifactId> 
      <version>2.1</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/javax.activation/activation --> 
     <dependency> 
      <groupId>javax.activation</groupId> 
      <artifactId>activation</artifactId> 
      <version>1.1.1</version> 
     </dependency> 

     <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-json</artifactId> 
      <version>1.19.4</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core --> 
     <dependency> 
      <groupId>com.sun.xml.bind</groupId> 
      <artifactId>jaxb-core</artifactId> 
      <version>2.3.0</version> 
     </dependency> 

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

그리고 web.xml 파일은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This web.xml file is not required when using Servlet 3.0 container, 
    see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html --> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>restWebService</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/webapi/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

내가 URL을 공격하려고 : http://localhost:8080/webapi/myresource를 - 나는 다음과 같은 오류를 참조하십시오

HTTP Status 500 – Internal Server Error 

Type Exception Report 

Message Servlet.init() for servlet [Jersey REST Service] threw exception 

Description The server encountered an unexpected condition that prevented it from fulfilling the request. 

Exception 

javax.servlet.ServletException: Servlet.init() for servlet [Jersey REST Service] threw exception 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) 
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:500) 
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754) 
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376) 
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.base/java.lang.Thread.run(Thread.java:844) 
Root Cause 

java.lang.IllegalArgumentException 
    jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:170) 
    jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:153) 
    jersey.repackaged.org.objectweb.asm.ClassReader.<init>(ClassReader.java:424) 
    com.sun.jersey.spi.scanning.AnnotationScannerListener.onProcess(AnnotationScannerListener.java:138) 
    com.sun.jersey.core.spi.scanning.uri.FileSchemeScanner$1.f(FileSchemeScanner.java:86) 
    com.sun.jersey.core.util.Closing.f(Closing.java:71) 

나는 1.8

<configuration> 
    <source>1.8</source> 
    <target>1.8</target> 
</configuration> 
,691 1.9에서 빌드 구성을 변경하는 경우

서비스가 아무런 문제없이 실행되고 브라우저에 예상되는 결과가 표시됩니다. 내가 IntelliJ에, 프로젝트 SDK 사용하고

-9는 프로젝트 언어 레벨 - 9

나는이 1.9와 함께 작동하도록하기 위해 어떤 항아리를 가져올 것인가? 또는 작동하도록 maven 구성을 변경해야합니까?

편집 : 종속성 트리

업데이트해야 할 수도 꽤 많은 유물이 있습니다
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building restWebService 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[WARNING] The artifact javax.xml:jaxb-api:jar:2.1 has been relocated to javax.xml.bind:jaxb-api:jar:2.1 
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ restWebService --- 
[WARNING] The artifact javax.xml:jaxb-api:jar:2.1 has been relocated to javax.xml.bind:jaxb-api:jar:2.1 
[INFO] restWebService:restWebService:war:1.0-SNAPSHOT 
[INFO] +- org.springframework:spring-core:jar:5.0.0.RELEASE:compile 
[INFO] | \- org.springframework:spring-jcl:jar:5.0.0.RELEASE:compile 
[INFO] +- com.sun.jersey:jersey-client:jar:1.19.4:compile 
[INFO] +- com.sun.jersey:jersey-bundle:jar:1.19.4:compile 
[INFO] | \- javax.ws.rs:jsr311-api:jar:1.1.1:compile 
[INFO] +- com.sun.jersey:jersey-server:jar:1.19.4:compile 
[INFO] +- com.sun.jersey:jersey-core:jar:1.19.4:compile 
[INFO] +- org.ow2.asm:asm:jar:6.0_BETA:compile 
[INFO] +- org.json:json:jar:20170516:compile 
[INFO] +- com.sun.xml.bind:jaxb-impl:jar:2.3.0:compile 
[INFO] +- javax.xml.bind:jaxb-api:jar:2.1:compile 
[INFO] | \- javax.xml.stream:stax-api:jar:1.0-2:compile 
[INFO] +- javax.activation:activation:jar:1.1.1:compile 
[INFO] +- com.sun.jersey:jersey-json:jar:1.19.4:compile 
[INFO] | +- org.codehaus.jettison:jettison:jar:1.1:compile 
[INFO] | +- org.codehaus.jackson:jackson-core-asl:jar:1.9.2:compile 
[INFO] | +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.2:compile 
[INFO] | +- org.codehaus.jackson:jackson-jaxrs:jar:1.9.2:compile 
[INFO] | \- org.codehaus.jackson:jackson-xc:jar:1.9.2:compile 
[INFO] \- com.sun.xml.bind:jaxb-core:jar:2.3.0:compile 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1.910 s 
[INFO] Finished at: 2017-10-14T22:05:15-04:00 
[INFO] Final Memory: 13M/44M 
[INFO] ------------------------------------------------------------------------ 

답변

2

. 시작하려면 모듈 mvn dependency:tree에서 asm의 소스가 있는지 확인하고 Java9와 호환되지 않으므로 버전 < 6.0.x을 가져옵니다. 현재 pom.xml에서하고 실행 로그에서 추론, 당신은

<!-- https://mvnrepository.com/artifact/asm/asm --> 
<dependency> 
    <groupId>asm</groupId> 
    <artifactId>asm</artifactId> 
    <version>3.3.1</version> 
</dependency> 

<dependency> 
    <groupId>org.ow2.asm</groupId> 
    <artifactId>asm</artifactId> 
    <version>6.0</version> 
</dependency> 

이 중요한 사용할 업데이트 할 수 있습니다 Java 9 compatible maven plugins 등 -

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.7.0</version> 
    <inherited>true</inherited> 
    <configuration> 
     <source>9</source> 
     <target>9</target> 
    </configuration> 
</plugin> 

참고로, 당신은 여전히 다른 도전에 직면 끝낼 수 있습니다 당신이

mvn dependency:analyze 

을 실행하고 충돌하는 종속성 만들기 위해 이러한 경우에서 제외되어 있는지 확인해야하는 해결하기 위해 (내가 jaxb 종속성을 충돌 볼 수 있습니다, 심지어 asmjersey에서 이적 수 있습니다) 업데이트 된 버전 사용

+0

감사 :

그래서, 최종 치어과 같을 것이다. 하지만 변경 내용을 pom.xml에 통합 한 후에도 같은 오류가 발생합니다. –

+0

@RahulDevMishra 응답에서 언급 한 다른 소스에서 'asm'을 가져 오지 않는 종속성 트리를 찾으려고 시도 했습니까? – nullpointer

+0

지금 대답하게하십시오 –

1

Java 9 바이트 코드에서는 현재 저지의 음영 처리 된 asm 5 종속성 문제가 발생합니다. Jersey 1.x가 Java 9에 채택되지 않은 것처럼 보입니다.이 지원이 전혀 이루어지지 않으면 확실하지 않습니다. 임시 솔루션으로 나는 branch을 만들었고 음영 처리 된 asm을 삭제하고 코드에서 패키지를 마이그레이션하여 정규 asm 종속성을 사용하고 maven 종속성에 asm 6.0을 배치했습니다.

이 분기에서 jersey-server 및 jersey-servlet 모듈 만 빌드 할 수 있습니다.이 두 분기는 asm에 의존하며 프로젝트에서이 두 가지 사용자 정의 아티팩트를 사용하기 때문입니다.

내 프로젝트는 그런 교체로 잘 작동하지만 100 % 작동하는 솔루션이라고 보장 할 수는 없으며 전체 배포를 실패없이 구축 할 수 없었고 전체 채택 및 점검에 시간을 투자 할 수 없었습니다. 지금. 동시에, 주요 저지 부품은 문제없이 만들었습니다. 제안에 대한

<!--regular jersey dependencies with the last 1.19.4 version--> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>${custom-jersey-with-asm6.version}</version> 
</dependency> 

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-servlet</artifactId> 
    <version>${custom-jersey-with-asm6.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.ow2.asm</groupId> 
    <artifactId>asm</artifactId> 
    <version>6.0</version> 
</dependency> 
관련 문제