我尝试使用grizzly2将hello-world风格的球衣调用集成到现有应用程序中。
我已将此依赖项添加到我的maven pom:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
<version>2.22.1</version>
</dependency>
生成此依赖关系树:
[INFO] +- org.glassfish.jersey.containers:jersey-container-grizzly2-http:jar:2.22.1:compile
[INFO] | +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b31:compile
[INFO] | +- org.glassfish.grizzly:grizzly-http-server:jar:2.3.23:compile
[INFO] | | \- org.glassfish.grizzly:grizzly-http:jar:2.3.23:compile
[INFO] | | \- org.glassfish.grizzly:grizzly-framework:jar:2.3.23:compile
[INFO] | +- org.glassfish.jersey.core:jersey-common:jar:2.22.1:compile
[INFO] | | +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO] | | +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.22.1:compile
[INFO] | | +- org.glassfish.hk2:hk2-api:jar:2.4.0-b31:compile
[INFO] | | | +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b31:compile
[INFO] | | | \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b31:compile
[INFO] | | +- org.glassfish.hk2:hk2-locator:jar:2.4.0-b31:compile
[INFO] | | | \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO] | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
[INFO] | +- org.glassfish.jersey.core:jersey-server:jar:2.22.1:compile
[INFO] | | +- org.glassfish.jersey.core:jersey-client:jar:2.22.1:compile
[INFO] | | +- org.glassfish.jersey.media:jersey-media-jaxb:jar:2.22.1:compile
[INFO] | | \- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] | \- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile
[INFO] \- junit:junit:jar:4.12:test
[INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test
我试图按照以下方式提出灰熊:
private static final URI BASE_URI = URI.create("http://localhost:8080/base/");
public static final String ROOT_PATH = "helloworld";
public static void main(String[] args) throws IOException, InterruptedException
{
System.out.println("\"Hello World\" Jersey Example App");
final ResourceConfig resourceConfig = new ResourceConfig(RestTest.class);
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, resourceConfig, false);
但是它会导致错误,表明一组不匹配的jar文件:
Exception in thread "main" java.lang.NoSuchMethodError: org.glassfish.jersey.internal.util.PropertiesHelper.getValue(Ljava/util/Map;Ljavax/ws/rs/RuntimeType;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
at org.glassfish.jersey.moxy.json.MoxyJsonFeature.configure(MoxyJsonFeature.java:60)
at org.glassfish.jersey.model.internal.CommonConfig.configureFeatures(CommonConfig.java:714)
at org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:644)
at org.glassfish.jersey.server.ResourceConfig.configureMetaProviders(ResourceConfig.java:829)
at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:453)
at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350)
at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:347)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:311)
at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.<init>(GrizzlyHttpContainer.java:337)
at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory.createHttpServer(GrizzlyHttpServerFactory.java:140)
at gov.vha.isaac.demo.RestMain.main(RestMain.java:20)
我已经尝试将违规的jar(jersey-common)强制用于各种不同的版本,但它们都以同样的方式失败(或者更糟糕的是,如果我回到远方)
我尝试过不同版本的灰熊 - 但我唯一可以开始使用的版本 - 已经很久了,我现在遇到的问题是我的其他代码之间的HK2版本不匹配。
灰熊的问候世界如何难以执行?
或者,有人能指出我做错的傻事吗?
答案 0 :(得分:0)
事实证明,这是导致类不兼容的依赖链:
[INFO] | \- au.csiro:snorocket-core:jar:2.7.5:compile
[INFO] | \- au.csiro:ontology-model:jar:2.8.2:compile
[INFO] | \- org.glassfish.jersey.media:jersey-media-moxy:jar:2.2:compile
[INFO] | +- org.eclipse.persistence:org.eclipse.persistence.moxy:jar:2.5.0:compile
[INFO] | | \- org.eclipse.persistence:org.eclipse.persistence.core:jar:2.5.0:compile
[INFO] | | \- org.eclipse.persistence:org.eclipse.persistence.asm:jar:2.5.0:compile
[INFO] | \- org.eclipse.persistence:org.eclipse.persistence.antlr:jar:2.5.0:compile
不幸的是,来自mvn依赖:tree的输出不正确 - 因为看起来maven依赖树插件被破坏或者只是设计非常愚蠢。
因为org.glassfish.jersey.core:jersey-common库在以后的项目中也是一个依赖项,所以它不会在这里打印出来。
实际上,org.glassfish.jersey.media:jersey-media-moxy:jar:2.2取决于 org.glassfish.jersey.core:Jersey的共同:罐:2.2
我的灰熊依赖性是org.glassfish.jersey.core:jersey-common:jar:2.22.1
这两个版本不兼容。
现在,如果我只是用Maven包装项目,它(可能)工作正常 - 因为我认为maven正在调整2.22.1版本。但是,我试图在日食中测试。 Eclipse的m2e插件 NOT 似乎正确设置了类路径 - 而不是 - 它最终同时包含类路径上jar的 BOTH 版本。
到目前为止,我无法找到让它在eclipse中运行的原因,因为m2e坚持在类路径中包含两个jar - 即使我添加了一个排除试图保留旧版本的jar。
- 编辑 -
我终于通过转到依赖于snorocket-core的eclipse中的项目并排除了jersey-media-moxy,接着推出了更新版本的jersey-media-moxy来实现它。< / p>
这让我最终得到m2e在eclipse中构建一个合适的类路径。似乎m2e在类路径中包含其他本地项目时没有正确设置类路径 - 它只是盲目地引入项目的所有依赖项 - 而不考虑该项目是否具有与其他项目不同的jar版本 - 它没有像maven那样选择使用jar的单个版本。