Подтвердить что ты не робот

Android Maven build дает проблемы с обработкой "javax/xml/namespace/QName.class":

Следующая ошибка отображается в консоли Maven каждый раз, когда я выполняю Project → Clean. В целевой папке встроен только файл jar, файл apk не создается. Может ли кто-нибудь помочь мне решить эту проблему?

Привет,

Сэм.

Моя среда разработки;

  • Eclipse Helios
  • Уровень SDK для Android SDK
  • Eclipse ADT 10.0.1
  • Интеграция Maven для инструментов разработки Android 0.2.5

4/30/11 9:54:07 PM IST: [INFO] пропустить не существующий ресурсDirectory D:\my\workspace\android\android-test-app\src\test\resources 30.04.11 9:54:07 PM IST: [INFO] Не скомпилировать тестовые источники 30.04.11 21:54:07 IST: [INFO] Тесты пропущены. 30.04.11 9:54:07 PM IST: [INFO] D:\my\android-sdk-my\android-sdk-windows/platform-tools/dx.bat [--dex, --output = D:\my\workspace\android\android-test-app\target\classes.dex, D:\my\workspace\android\android-test-app\target\android-classes] 30.04.11 9:54:17 PM IST: [INFO] 30.04.11 9:54:17 PM IST: [INFO] обработка ошибок "javax/xml/namespace/QName.class": 30.04.11 9:54:17 PM IST: [INFO] 30.04.11 9:54:17 PM IST: [INFO] Неисправное или ошибочное использование основного класса (java. * Или javax. *) 30.04.11 9:54:17 PM IST: [INFO], когда не строят основную библиотеку. 30.04.11 9:54:17 PM IST: [INFO] 30.04.11 9:54:17 PM IST: [INFO] Это часто происходит из-за непреднамеренного включения файла основной библиотеки 30.04.11 9:54:17 PM IST: [INFO] в вашем прикладном проекте при использовании IDE (например, 30.04.11 21:54:17 IST: [INFO] Eclipse). Если вы уверены, что не намеренно определяете 30.04.11 9:54:17 PM IST: основной класс [INFO], то это наиболее вероятное объяснение того, что 30.04.11 9:54:17 PM IST: [INFO] продолжается. 30.04.11 9:54:17 PM IST: [INFO] 30/30/11 9:54:17 PM IST: [INFO] Однако вы можете попытаться определить класс в ядре 30.04.11 9:54:17 PM IST: пространство имен [INFO], источник которого вы, возможно, взяли, например, 30.04.11 9:54:17 PM IST: [INFO] из проекта виртуальной машины, отличного от Android. Это будет больше всего 30.04.11 21:54:17 IST: [INFO] уверенно не работает. Как минимум, это ставит под угрозу 30.04.11 9:54:17 PM IST: [INFO] совместимость вашего приложения с будущими версиями платформы. 30.04.11 9:54:17 PM IST: [INFO] Это также часто вызывает сомнительную законность. 30.04.11 9:54:17 PM IST: [INFO] 30.04.11 9:54:17 PM IST: [INFO] Если вы действительно собираетесь создать основную библиотеку, которая только 30.04.11 9:54:17 PM IST: [INFO] подходит как часть создания полной виртуальной машины 30.04.11 9:54:17 PM IST: [INFO] распространение, в отличие от компиляции приложения - затем используйте 30.04.11 9:54:17 PM IST: [INFO] опция "--core-library" для подавления этого сообщения об ошибке. 30.04.11 9:54:17 PM IST: [INFO] 30/30/11 9:54:17 PM IST: [INFO] Если вы продолжаете использовать "--core-library", но на самом деле 30.04.11 9:54:17 PM IST: [INFO] создание приложения, а затем предупредить, что ваша заявка 30.04.11 9:54:17 PM IST: [INFO] все равно не сможет построить или запустить в какой-то момент. Пожалуйста, будьте 30.04.11 9:54:17 PM IST: [INFO] подготовлен для гневных клиентов, которые находят, например, что ваши 30.04.11 9:54:17 PM IST: приложение [INFO] перестает функционировать после обновления своих рабочих 30.04.11 9:54:17 PM IST: система [INFO]. Вы будете виноваты в этой проблеме. 30.04.11 9:54:17 PM IST: [INFO] 30/30/11 9:54:17 PM IST: [INFO] Если вы законно используете какой-то код, который находится в 30.04.11 9:54:17 PM IST: [INFO] основной пакет, тогда самая простая безопасная альтернатива у вас есть: 30.04.11 9:54:17 PM IST: [INFO] переупаковка этого кода. То есть, переместите рассматриваемые классы в 30.04.11 9:54:17 PM IST: [INFO] ваше собственное пространство имен пакетов. Это означает, что они никогда не будут 30.04.11 9:54:17 PM IST: [INFO] конфликт с основными системными классами. JarJar - это инструмент, который может помочь 30.04.11 9:54:17 PM IST: [INFO] вы в этом начинании. Если вы обнаружите, что не можете этого сделать, 30.04.11 9:54:17 PM IST: [INFO], что является признаком того, что путь, на котором вы находитесь, в конечном итоге 30.04.11 9:54:17 PM IST: [INFO] приводят к боли, страданиям, печали и плачам. 30.04.11 9:54:17 PM IST: [INFO] 30.04.11 9:54:17 PM IST: [INFO] 1 ошибка; прерывание

4b9b3361

Ответ 1

Если вы используете интеграцию android maven, вы должны добавить "предоставленную" область в свою зависимость sdk от android.

<dependency>        
<groupId>com.google.android</groupId>        
<artifactId>android</artifactId>        
<version>2.3.3</version>        
<scope>provided</scope>        
</dependency>

Ответ 2

Вы можете исключить неявные зависимости, используя тег exclude. QName, похоже, находится в, например, пакет xpp3. Я решил эту проблему, добавив следующие исключения в мой pom (который уже содержал зависимость от google-api-client-googleapis):

<dependency>
  <groupId>com.google.api.client</groupId>
  <artifactId>google-api-client-googleapis</artifactId>
  <version>1.4.1-beta</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
    <exclusion>
      <groupId>xpp3</groupId>
      <artifactId>xpp3</artifactId>
    </exclusion>
</exclusions>
</dependency>

Если вам нужно найти, откуда возникают конфликтующие файлы классов, запустите, например:

for x in `find ~/.m2/repository/ -name \*.jar`; do jar tf $x|grep QName.class && echo "Found in: $x"; done`