我需要为JDK 1.9下载什么泽西版?

我使用的是jdk 1.9。 我想提出一个简单的ReST服务。 使用maven原型创建项目: jersey-quickstart-webapp 。 然后我继续修改了pom.xml和web.xml。 我的maven配置如下所示:

  4.0.0 restWebService restWebService war 1.0-SNAPSHOT restWebService  restWebService   org.apache.maven.plugins maven-compiler-plugin 3.7.0 true  9 9        org.glassfish.jersey jersey-bom ${jersey.version} pom import       org.springframework spring-core 5.0.0.RELEASE    com.sun.jersey jersey-client 1.19.4    com.sun.jersey jersey-bundle 1.19.4    com.sun.jersey jersey-server 1.19.4    com.sun.jersey jersey-core 1.19.4    org.ow2.asm asm 6.0_BETA    org.json json 20170516    com.sun.xml.bind jaxb-impl 2.3.0    javax.xml jaxb-api 2.1    javax.activation activation 1.1.1   com.sun.jersey jersey-json 1.19.4    com.sun.xml.bind jaxb-core 2.3.0    2.16 UTF-8   

web.xml看起来像这样:

     Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer  com.sun.jersey.config.property.packages restWebService  1   Jersey REST Service /webapi/*   

当我尝试点击此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.(ClassReader.java:170) jersey.repackaged.org.objectweb.asm.ClassReader.(ClassReader.java:153) jersey.repackaged.org.objectweb.asm.ClassReader.(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.9更改为1.8

  1.8 1.8  

服务出现没有任何问题,我在浏览器上看到预期的结果。

我正在使用Intellij,Project SDK – 9,Project Language Level – 9

我应该导入哪些jar子以使其与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] ------------------------------------------------------------------------ 

您可能需要更新很多工件。 首先,您应检查模块的mvn dependency:tree以查找带有版本< 6.0.x任何asm源,因为它与Java9不兼容。 从当前的pom.xml ,从执行日志中推断,您可以更新

   asm asm 3.3.1  

  org.ow2.asm asm 6.0  

重要的是,使用Java 9兼容的maven插件 ,如 -

  org.apache.maven.plugins maven-compiler-plugin 3.7.0 true  9 9   

在旁注中,您可能最终仍然面临一些其他挑战(我可以看到冲突的jaxb依赖关系,即使asm可能是从jersey传递的)来解决你将要运行的

 mvn dependency:analyze 

并确保在这种情况下排除冲突的依赖关系以使用其更新版本。

当前Jersey有一个阴影asm 5依赖的问题,它不适用于Java 9字节码。 看起来Jersey 1.x并未被Java 9采用,目前还不清楚这种支持是否会出现。 作为一个临时解决方案,我创建了一个分支 ,删除了着色的asm,在代码中迁移了包以使用常规的asm依赖关系并将asm 6.0放在maven依赖项中。

您只能在此分支中构建jersey-server和jersey-servlet模块,因为只有这两个模块依赖于asm并在项目中使用这两个自定义工件。

我的项目可以通过这样的替代工作得很好,但我无法保证它是100%可行的解决方案,我无法在没有失败的情况下构建整个发行版,也无法投入时间进行全面采用并立即进行检查。 与此同时,主要的泽西部分建造没有问题。

所以,你的最终pom看起来像:

   com.sun.jersey jersey-server ${custom-jersey-with-asm6.version}   com.sun.jersey jersey-servlet ${custom-jersey-with-asm6.version}   org.ow2.asm asm 6.0