2015-03-17 4 views
4

Моя проблема очень похожа на: Jersey exception only thrown when depencencies assembled into a single jarпроблемы Джерси с Maven - Shade Plugin

Я бегу мое приложение (молы встроенный + майка) и все работает. Когда я пытаюсь создать исполняемый файл JAR я получаю сообщение об ошибке:

org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo GRAVE: MessageBodyWriter not found for media type=application/json, type=class

Мой pom.xml:

<plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>2.3</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <transformers> 
           <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <mainClass>server.application.DeepDig</mainClass> 
           </transformer> 
          </transformers> 

          <filters> 
           <!-- filter to address "Invalid signature file" issue - see https://stackoverflow.com/a/6743609/589215 --> 
           <filter> 
            <artifact>*:*</artifact> 
            <excludes> 
             <exclude>META-INF/*.SF</exclude> 
             <exclude>META-INF/*.DSA</exclude> 
             <exclude>META-INF/*.RSA</exclude> 
            </excludes> 
           </filter> 
          </filters> 

         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
+0

Если я пытаюсь сделать это из затмения, используя экспорт в Runnable Jar, он работает! –

ответ

6

Я столкнулся с той же проблемой некоторое время назад. Проблема заключается в том, что файлы служб не объединяются. Следующие работы для меня:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <configuration> 
       <transformers> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
         <mainClass>Foo</mainClass> 
        </transformer> 
        <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> 
       </transformers> 
      </configuration> 
     </plugin> 

Основная причина проблемы заключается в том, что каждый из нескольких банок Джерси связанных содержит файл «услуги» в META-INF, который содержит метаданные для Джерси, чтобы работать должным образом. По умолчанию плагин-тень выбирает один из этих файлов и включает его в жирную банку. Поскольку метаданные из других файлов не включены, Джерси работает неправильно.

Это исправление включает дополнительный трансформатор при вызове плагина. Этот трансформатор объединяет данные в различные файлы, а не просто выбирает один из файлов. Таким образом, все необходимые метаданные включены в жирную банку, и Джерси работает правильно.

+0

Спасибо! Теперь это работает! –

+0

Может ли кто-нибудь объяснить, почему это происходит и как эта настройка заставляет ее работать? – Pawan

+1

@Pawan Я отредактировал ответ, чтобы включить более подробную информацию. – Rob

Смежные вопросы