Android: ошибка включения / переупаковки зависимостей, которые ссылаются на классы ядра javax

#java #android #maven #simple-framework #jarjar

#java #Android #maven #simple-framework #jarjar

Вопрос:

Я работаю над приложением для Android, используя Maven в качестве инструмента сборки. Мне удалось правильно настроить evertyhing (зависимости maven экспортируются в apk и т.д.), Однако у меня осталась одна проблема, которая сводит меня с ума.

Я хочу включить зависимость от синтаксического анализатора xml от simpleframework, определенного следующим образом в моем POM-файле:

 <dependency>
    <groupId>org.simpleframework</groupId> 
    <artifactId>simple-xml</artifactId>
    <version>2.5.3</version>
</dependency>
  

При выпуске mvn install в проекте я получаю следующую ошибку (усеченную):

 trouble processing "javax/xml/namespace/NameSpaceContext.class" ...
  

Я знаю, что ошибка возникает из-за простого синтаксического анализатора xml, ссылающегося на эти классы javax, однако я еще не нашел решения (установка флага —core-library бесполезна).

В настоящее время я пытаюсь переупаковать зависимость с помощью maven-jarjar-pluging, но, похоже, это тоже не работает.

Кто-нибудь может мне помочь с этим? Заранее большое спасибо!

Ответ №1:

Определите свою зависимость от простого xml следующим образом :

 <dependency>
    <groupId>org.simpleframework</groupId>
    <artifactId>simple-xml</artifactId>
    <version>2.6.1</version>
    <exclusions>
        <!-- StAX is not available on Android -->
        <exclusion>
            <artifactId>stax</artifactId>
            <groupId>stax</groupId>
        </exclusion>
        <exclusion>
            <artifactId>stax-api</artifactId>
            <groupId>stax</groupId>
        </exclusion>
        <!-- Provided by Android -->
        <exclusion>
            <artifactId>xpp3</artifactId>
            <groupId>xpp3</groupId>
        </exclusion>
    </exclusions>
</dependency>
  

Комментарии:

1. Спасибо за ваш ответ. В настоящее время я не работаю над проектом, но я буду иметь это в виду для будущего использования. Если это сработает, я вернусь и обязательно приму этот ответ 🙂

2. Пытаюсь это решение, но у меня все еще есть org.simpleframwork.xml.core. Сохраняется ошибка «не найдено».

3. @Henryk Konsek Где вы размещаете подобную XML-зависимость? какая папка?

Ответ №2:

Я использую android-maven-plugin, и добавление <coreLibrary>true</coreLibrary> к <configuration> тегу плагина в POM работает для меня. Однако есть ошибка:https://github.com/jayway/maven-android-plugin/pull/34 , которую вам необходимо включить, чтобы исправить используемый вами плагин, поскольку ошибка не будет исправлена до версии 3.0. Вот как я заставил ее работать у меня с помощью 2.9.0-SNAPSHOT.

  1. добавьте pluginRepository, указывающий на http:// oss.sonatype.org/content/repositories/jayway-snapshots / чтобы получить 2.9.0-СНИМОК
  2. обновите версию вашего плагина, чтобы использовать 2.9.0-SNAPSHOT и добавьте <coreLibrary> true</coreLibrary> к pom.xml
  3. исправлено: git clonehttps://github.com/kevinpotgieter/maven-android-plugin.git
  4. удалите src / test / java / com: чтобы тест не провалился
  5. пакет mvn
  6. скопируйте его и перезапишите свой локальный кэш maven в .m2 (возможно, вам потребуется удалить репозиторий плагинов, ваш каждый раз перезаписывается.)

Шаг 3-6 не понадобится после того, как исправление попадет в 2.9.0-SNAPSHOT.


Обновление за июль 2010: в 2.9.0-beta-4 исправлено, поэтому вам не понадобится вышеупомянутое обходное решение, если вы используете 2.9.0-beta-4 или более позднюю версию. Я протестировал 2.9.0-beta-5, которая работала просто отлично.

Ответ №3:

Spring Android использует Maven для простой интеграции. Взгляните на следующий URL, он должен содержать указания на то, как заставить Maven работать с Simple.

http://static.springsource.org/spring-android/docs/1.0.x/reference/html/rest-template.html