Клиент JAX-RS работает, когда я запускаю его в IntelliJ, но бросает MessageBodyProviderNotFoundException при создании jar, а затем запускает java -jar project.jar [duplicate]

Это просто информационное сообщение. Ваша проблема может быть ошибкой между версиями chromedriver и selenium-server-standalone.

Попробуйте использовать последнюю версию selenium версии 3.0, она работает для меня.

Пожалуйста, не для selenium 3.0 вам нужно указать драйвер сначала и после сервера selenium.

С новым селеном, который является 3.0, вы должны использовать:

java -Dwebdriver.chrome.driver = path_to_chrome_driver -jar selenium-server-standalone-3.0.0-beta2.jar Если вы используете версию селена ниже 3.0, вам нужно отменить порядок селена с драйвером, например:

java -Dwebdriver.chrome.driver=path_to_chrome_driver -jar selenium_server.jar

Когда вы начиная с сервера selenium, откройте консоль в каталоге с сервером хромированных и селеновых серверов и выполните приведенную выше команду.

4
задан Paul Samsotha 11 June 2016 в 09:21
поделиться

1 ответ

Если вы заглянете внутрь флага jersey-media-json-jackson, вы увидите файл

META-INF/services/org.glassfish.jersey.internal.spi.AutoDiscoverable

. Содержимое этого файла должно быть единственным полным именем класса, который реализует имя файла, а именно

org.glassfish.jersey.jackson.internal.JacksonAutoDiscoverable

Этот файл используется механизмом автообнаружения для Джерси для автоматической регистрации функций без необходимости их явного их регистрации. Вкратце, как это работает, все модули / банки Джерси, у которых есть компоненты, которые должны быть автоматически зарегистрированы, должны иметь вышеупомянутый файл, расположенный в банке, причем содержимое является именем (именами) компонента с возможностью автоматического обнаружения. Затем Джерси будет использовать шаблон загрузчика Service Loader , чтобы загрузить классы, указанные в файле, и зарегистрировать их.

Проблема, которая возникает при создании uber-банок, заключается в том, что вы можете иметь только один копия файла, у вас не может быть дубликатов. Итак, что, если у нас есть несколько банок с вышеупомянутым файлом? Ну, только один из этих файлов будет включен в банку uber. Который из? Кто знает, но есть только один счастливый победитель. Таким образом, для остальных банок их механизм автоматического обнаружения никогда не срабатывает. Это относится к вашей функции Джексона, где автообнаружение регистрирует JacksonFeature. Вы можете попытаться явно зарегистрировать свое приложение, и вы увидите, что он теперь работает.

Но как насчет других банок / модулей, которые могут иметь этот файл? Именно по этой причине при создании uber jars вы должны использовать maven-shade-plugin . Что этот плагин позволяет вам сделать, объединить содержимое файлов, чтобы все обнаруживаемые объекты включались в этот один файл. Ниже приведен пример использования

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <createDependencyReducedPom>true</createDependencyReducedPom>
        <filters>
            <filter>
                <artifact>*:*</artifact>
                <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                </excludes>
            </filter>
        </filters>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.example.YourApp</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

. Этот пример был фактически взят из Начало работы Dropwizard . Вы можете проверить это для дальнейшего объяснения. Основная часть проблемы - ServicesResorceTransformer, которая объединяет файлы служб.

9
ответ дан Paul Samsotha 17 August 2018 в 22:30
поделиться
  • 1
    Джерси + Гризли + Мокси, и это отлично работает! – Alexandre 7 February 2017 в 18:47
Другие вопросы по тегам:

Похожие вопросы: