当试图在灰熊里面推出球衣时,级别不兼容?

时间:2015-11-12 07:30:39

标签: java jersey grizzly

我尝试使用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版本不匹配。

灰熊的问候世界如何难以执行?

或者,有人能指出我做错的傻事吗?

1 个答案:

答案 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的单个版本。