2015-12-15 95 views
0

我使用Spring-Boot构建我的应用程序,现在我的一些模块需要Jersey作为依赖项。然后我永远不能启动我的应用程序。这里是原来的POM文件:Jersey无法使用Spring-Boot

<?xml version="1.0" encoding="UTF-8"?> 
<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/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>GROUPID</groupId> 
<artifactId>ARTIFACTID</artifactId> 
<version>0.1.0-SNAPSHOT</version> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.0.RELEASE</version> 
</parent> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

<properties> 
    <ts.common.version>338.0.0</ts.common.version> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-tomcat</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jersey</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jetty</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.kafka</groupId> 
     <artifactId>kafka_2.10</artifactId> 
     <version>0.8.2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-java-sdk</artifactId> 
     <version>1.9.0</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>2.0.1</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>mail</artifactId> 
     <version>1.4</version> 
    </dependency> 
    <dependency> 
     <groupId>com.twilio.sdk</groupId> 
     <artifactId>twilio-java-sdk</artifactId> 
     <version>3.4.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.4-1201-jdbc41</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-dbcp2</artifactId> 
     <version>2.0.1</version> 
     <exclusions> 
      <exclusion> 
       <!-- Using jcl-over-slf4j --> 
       <groupId>commons-logging</groupId> 
       <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-pool2</artifactId> 
     <version>2.2</version> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.carbonfive</groupId> 
     <artifactId>db-migration</artifactId> 
     <version>0.9.7</version> 
    </dependency> 
    <dependency> 
     <groupId>com.carbonfive</groupId> 
     <artifactId>db-support</artifactId> 
     <version>0.9.7</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-collections</groupId> 
     <artifactId>commons-collections</artifactId> 
     <version>3.2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

这个POM文件工作得很好,直到我补充一点:

15:10:55.359 [main] ERROR o.s.boot.SpringApplication - Application startup failed 
java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map; 

<dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-core</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-client</artifactId> 
     <version>1.19</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey.contribs</groupId> 
     <artifactId>jersey-multipart</artifactId> 
     <version>1.19</version> 
    </dependency> 

那我永远不能与此错误启动

根据要求,以下是完整的堆栈错误信息:

15:10:55.359 [main] ERROR o.s.boot.SpringApplication - Application startup failed 
java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map; 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:331) ~[jersey-server-2.22.1.jar:na] 
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:390) ~[jersey-container-servlet-core-2.22.1.jar:na] 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:172) ~[jersey-container-servlet-core-2.22.1.jar:na] 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:364) ~[jersey-container-servlet-core-2.22.1.jar:na] 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) ~[tomcat-embed-core-8.0.28.jar:8.0.28] 
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:616) ~[jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 
    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:396) ~[jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871) ~[jetty-servlet-9.2.14.v20151106.jar:9.2.14.v20151106] 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedWebAppContext$JettyEmbeddedServletHandler.deferredInitialize(JettyEmbeddedWebAppContext.java:46) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedWebAppContext.deferredInitialize(JettyEmbeddedWebAppContext.java:36) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer.handleDeferredInitialize(JettyEmbeddedServletContainer.java:166) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer.start(JettyEmbeddedServletContainer.java:113) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:290) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:540) ~[spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:347) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:295) ~[spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at com.bwts.customer.BootStrap.main(BootStrap.java:21) [classes/:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_79] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_79] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_79] 
    at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_79] 
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:467) [spring-boot-maven-plugin-1.3.0.RELEASE.jar:1.3.0.RELEASE] 
    at java.lang.Thread.run(Thread.java:745) [na:1.7.0_79] 
[WARNING] 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:467) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map; 
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:331) 
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:390) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:172) 
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:364) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:616) 
    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:396) 
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:871) 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedWebAppContext$JettyEmbeddedServletHandler.deferredInitialize(JettyEmbeddedWebAppContext.java:46) 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedWebAppContext.deferredInitialize(JettyEmbeddedWebAppContext.java:36) 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer.handleDeferredInitialize(JettyEmbeddedServletContainer.java:166) 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer.start(JettyEmbeddedServletContainer.java:113) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:290) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:540) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) 
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:347) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:295) 
    at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134) 
    at com.bwts.customer.BootStrap.main(BootStrap.java:21) 
    ... 6 more 

任何人都可以帮忙吗?

+0

我的猜测是您需要使用Jersey 2.x(org.glassfish.jersey包)而不是Jersey 1.x(com.sun.jersey包)。 –

+0

引导支持Jersey 1和Jersey 2(并且两个版本都有样本)。 @Elderry错误的完整堆栈跟踪将会有所帮助。再现问题的最小例子会更好。 –

+0

@AndyWilkinson,添加了堆栈跟踪。我想使用mailgun,它需要Jersey 1. – Elderry

回答

0

随着新泽西1.x中不使用boot-starter-jersey依赖。这只适用于泽西2.x版本(它在&中与Jersey 1.x冲突;您当前的错误)。

对于Jersey 1.x,没有内置支持(用于自动创建球衣小服务程序),就像使用启动启动器的Jersey 2.x一样。对于1.x,您只需自己创建Jersey servlet作为servlet/filter注册bean。

有关Jersey 1.x和2.x的完整示例,请参阅dsyer's repo examples

顺便说一句,你为什么要使用Jersey 1.x来完成一个新的项目。如果是多部分支持,Jersey 2.x有多部分支持。见here。如果是客户端(因为您熟悉它,而不是2.x),学习2.x客户端并不需要很长时间。请参阅here

+0

我使用Jersey 1只是因为[mailgun的文档](https://documentation.mailgun.com/libraries.html#java)告诉我这么做。现在我也试着找到它是否能够与Jersey 2一起工作。 – Elderry

+0

我从来没有使用它,但是实际上是对Jersey 1.x的_tied_框架吗?或者它只是文档用于其示例的内容?如果是后者,将示例迁移到2.x应该不会太困难 –