У меня есть проект Google App Engine, который я создаю с помощью Maven.Я добавил к нему jax-rs, добавив в свой pom следующую бомбу:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bom</artifactId>
<version>0.73.0-alpha</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>2.27</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Также мне были нужны эти три зависимости:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<exclusions>
<exclusion><!-- Exclude this repackaged javax.inject. -->
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<exclusions>
<exclusion><!-- Exclude this repackaged javax.inject. -->
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-binding</artifactId>
</dependency>
Как видите, я исключил некоторые изперепакованный, чтобы избавиться от некоторых предупреждений во время выполнения о найденных дубликатах классов.Чтобы быть ясным, каждый остальной вызов с использованием jax-rs API работает нормально, и я не вижу предупреждений на самом движке приложений Google, только локально.(полный код на https://github.com/Leejjon/blindpool) При запуске в локальной среде выполнения Jetty с использованием mvn appengine: run, он по-прежнему жалуется на каждый связанный с json класс в javax.json-1.1.jar и javax.json-api-1.1.jar.
Пример
[INFO] GCLOUD: 2018-12-11 22:01:13.495:WARN:oeja.AnnotationParser:main: Unknown asm implementation version, assuming version 393216
[INFO] GCLOUD: 2018-12-11 22:01:13.780:WARN:oeja.AnnotationParser:qtp551734240-15: javax.json.Json scanned from multiple locations: jar:file:///C:/Users/Leejjon/IdeaProjects/Blindpool/backend/target/blindpool-1.0-SNAPSHOT/WEB-INF/lib/javax.json-api-1.1.jar!/javax/json/Json.class, jar:file:///C:/Users/Leejjon/IdeaProjects/Blindpool/backend/target/blindpool-1.0-SNAPSHOT/WEB-INF/lib/javax.json-1.1.jar!/javax/json/Json.class
Когда я смотрю на мой вывод 'mvn dependency: tree', я вижу, что моя зависимость 'jersey-media-json-binding' имеет оба javax.json-1.1 и javax.json-api-1.1 в нем. И у них есть классы с одинаковыми именами.
[INFO] +- org.glassfish.jersey.media:jersey-media-json-binding:jar:2.27:compile
[INFO] | +- org.glassfish:javax.json:jar:1.1:compile
[INFO] | +- org.eclipse:yasson:jar:1.0:compile
[INFO] | | +- javax.json:javax.json-api:jar:1.1:compile
[INFO] | | \- javax.enterprise:cdi-api:jar:2.0:compile
[INFO] | | +- javax.el:javax.el-api:jar:3.0.0:compile
[INFO] | | \- javax.interceptor:javax.interceptor-api:jar:1.2:compile
[INFO] | \- javax.json.bind:javax.json.bind-api:jar:1.0:compile
Полное дерево зависимостей (https://pastebin.com/JfwzavDX).
Я пыталсяисключить их, но не смог сделать это таким образом, чтобы я не сломал свое веб-приложение и не получил таких ошибок, как: javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.ExceptionInInitializerError
TLDR: Какую зависимость я исключаю здесь, чтобы избавиться от дублированного предупреждения о местоположении, выдаваемого командой 'mvn appengine: run', не прерывая приложение jax-rs.
Надеясь на этот jax-rs / maven / jetty / jersey / google app eБоже мой, чтобы пройти и указать мне в правильном направлении:)