Зависимость =[com.google.android.gms:google-play-services:apklib:7:compile] не найдена в рабочей области

Извините за добавление еще одного вопроса "android maven google maps зависимость не найдена", но я думаю, что я прочитал большинство постов об этом и применил все предложенные решения безуспешно.

У меня есть Android-проект maven, работающий нормально с зависимостью Google Maps V2, на которую не ссылаются с помощью maven, а через проект google-play-services_lib, импортированный в рабочую область, и зависимость библиотеки путей компоновки eclipse.

Сейчас я пытаюсь настроить зависимость google-play-services через pom, так как я внедряю автоматизированные тесты maven с Robolectric, но я застрял с этой ошибкой, отображаемой в первой строке pom, без быстрого исправления:

Зависимость =[com.google.android.gms:google-play-services:apklib:7:compile] не найдена в рабочей области

Что я пробовал до сих пор, после множества поисков в Google и проверки результатов после каждого шага безуспешно:

  • Первоначально установил компоненты служб Google Play в мой локальный репозиторий.m2 с помощью android-maven-sdk-helper (следуя этим инструкциям) и добавьте в проект pom две зависимости к jar и apklib версии 7, которая является моей локальной установленной версией (как здесь), После этого он должен был работать, но появилась ошибка зависимости.

  • Удалите из пути сборки eclipse ссылку на библиотеку google-play-services_lib (в проекте / Предпочтения / Android / Библиотеки). В любом случае, проект google-play-services_lib все еще находится в рабочей области.

  • Скопируйте apklib из моего локального репозитория m2 в какое-то место в рабочей области: я попробовал google-play-services_lib/bin, google-play-services_lib/libs, MyProject/libs. Протестировано с использованием имени google-play-services-7.apklib (как в файле репозитория) и google-play-services.apklib.

  • "Mavenise" проект google-play-services_lib, включенный в рабочую область, запустив eclipse Configure / Convert to Maven project. Я отредактировал сгенерированный pom, чтобы обновить тип упаковки до apklib: <packaging>apklib</packaging>и добавил Android-Maven-плагин с <extensions>true</extensions> чтобы распознать тип пакета apklib. Я скомпилировал проект с maven goal compile, но с успехом, но нигде не могу найти сгенерированный файл apklib.

После каждого из этих изменений я делаю Maven / Update проект, очищаю проект, даже перезапускаю Eclipse. Безуспешно: зависимость, не найденная в пробеле, все еще существует.

Я не знаю, что еще попробовать. Может ли это быть что-то с именем библиотеки? Имя проекта библиотеки - google.play-services_lib с суффиксом _lib, а jar, на который ссылается путь сборки библиотеки android eclipse, - _lib.jar, но артефакты maven не имеют суффикса _lib. Я также попытался переименовать компоненты и артефакты, но безуспешно, но, думаю, проблема могла быть. Может кто-нибудь опубликовать пример pom.xml для проекта mavenised google-play-services_lib?

Еще одно предположение: когда я собираю mvn-проект проекта библиотеки mavenised, почему я не могу найти сгенерированный файл.apklib, где он находится? Я проверил трассировку с помощью mvn -X compile и не нашел никаких подсказок.

Окружение и версии:

Eclipse Indigo
External maven 3.0.5 (embedded Maven 3.0.3 not used)
android-maven-plugin 3.6.0
maven-eclipse-plugin 2.8
m2e-android plugin (m2eclipse android integration) 0.4.2
Android API level 13

Pom.xml, который я добавил в проект google-play-services_lib:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>google-play-services_lib</groupId>
<artifactId>google-play-services_lib</artifactId>
<version>7</version>
<packaging>apklib</packaging>

<properties>
    <android-platform>13</android-platform>
    <android-emulator>13</android-emulator>
    <android-maven-plugin-version>3.6.0</android-maven-plugin-version>
    <maven-compiler-plugin-version>3.0</maven-compiler-plugin-version>
    <java-version>1.6</java-version>
    <local-sdk-path>C:\NoProgramFiles\Android\android-sdk</local-sdk-path>
</properties>

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>${android-maven-plugin-version}</version>
            <configuration>
                <sdk>
                    <path>${local-sdk-path}</path>
                    <platform>${android-platform}</platform>
                </sdk>
                <emulator>
                    <avd>${android-emulator}</avd>
                </emulator>
                <deleteConflictingFiles>true</deleteConflictingFiles>
                <undeployBeforeDeploy>true</undeployBeforeDeploy>
            </configuration>
            <extensions>true</extensions>
        </plugin>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin-version}</version>
            <configuration>
                <source>${java-version}</source>
                <target>${java-version}</target>
            </configuration>
        </plugin>
    </plugins>
</build>

2 ответа

Решение

Наконец, проблема заключалась в том, что в проекте библиотеки apk не были сгенерированы артефакты и не был создан apklib. Вот что было не так:

  • GroupId и artifactId в библиотеке pom были неправильными: они должны соответствовать имени, указанному в сообщении об ошибке (я должен был прочитать его более внимательно).

Правильные значения:

<groupId>com.google.android.gms</groupId>
<artifactId>google-play-services</artifactId>

Вместо тех, которые были сгенерированы Eclipse при преобразовании проекта в Maven и основаны на имени проекта:

<groupId>google-play-services_lib</groupId>
<artifactId>google-play-services_lib</artifactId>
  • Apklib не генерируется с mvn compileправильная инструкция для этого mvn package, Таким образом, файл apklib генерируется в целевой папке библиотеки проекта.

Поэтому m2e-android 0.4.2 поддерживает зависимость apklib с помощью mavenised google-play-services apklib, хотя проект библиотеки все еще должен быть включен в рабочую область.

Последнее замечание: я получил ошибки времени выполнения при работе с картами на реальном устройстве:

07-08 09:42:45.170: W/dalvikvm(27953): VFY: unable to resolve virtual method 4296: Lcom/google/android/gms/maps/GoogleMap;.setMapType (I)V
07-08 09:42:45.180: E/dalvikvm(27953): Could not find class 'com.google.android.gms.maps.SupportMapFragment', referenced from method mypackage.MyMapActivity.setUpMapIfNeeded
07-08 09:42:45.180: W/dalvikvm(27953): VFY: unable to resolve check-cast 801 (Lcom/google/android/gms/maps/SupportMapFragment;) in Lmyapp/MyMapActivity;
07-08 09:42:45.180: E/dalvikvm(27953): Could not find class 'com.google.android.gms.maps.SupportMapFragment', referenced from method mypackage.MyMapActivity.onCreate
07-08 09:42:45.200: E/AndroidRuntime(27953): java.lang.RuntimeException: Unable to start activity ComponentInfo{mypackage/mypackage.MyMapActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class fragment

Похоже, что библиотека карт не была включена в приложение apk. Мое исправление: в google-play_services_lib Свойства затмения проекта / Путь сборки Java / Вкладка "Порядок и экспорт" Я установил флажок "Частные библиотеки Android", чтобы на работающем устройстве был установлен оригинальный jar google maps.

Если проблема не исчезла с устранением несоответствия имен (одно и то же имя в pom библиотеки и pom проекта), после обновления проекта maven (проводник проекта, щелкните правой кнопкой мыши любой проект->maven->update maven project)попробуйте просто удалить это сообщение (!!).

На вкладке "Проблемы" щелкните правой кнопкой мыши сообщение об ошибке и выберите "Удалить". Работал для меня и для Кевина Пека - зависимость Eclipse не найдена в исправлении рабочей области

Другие вопросы по тегам