4

很抱歉添加了另一个“找不到 android maven google maps 依赖项”问题,但我认为我已经阅读了大部分关于它的帖子并应用了所有建议的解决方案但没有成功。

我有一个使用 Google Maps V2 依赖项运行良好的 maven Android 项目,该项目没有使用 maven 引用,而是通过在工作区中导入的 google-play-services_lib 项目和 eclipse 构建路径库依赖项进行引用。

现在我正在尝试通过 pom 配置 google-play-services 依赖项,因为我正在使用 Robolectric 实现 maven 自动化测试,但是我遇到了这个错误显示在 pom 的第一行,没有快速修复:

在工作区中找不到依赖项=[com.google.android.gms:google-play-services:apklib:7:compile]

到目前为止,我已经尝试过,经过大量的谷歌搜索,并在每一步之后检查结果都没有成功:

  • 最初使用 android-maven-sdk-helper 将 google play services 组件安装到我的本地 .m2 存储库(按照这些说明),并将两个依赖项添加到项目 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 进行了测试。

  • 通过运行 eclipse 配置/转换为 Maven 项目,“Mavenise”包含在工作区中的 google-play-services_lib 项目。我编辑了生成的 pom 以将打包类型更新为 apklib: <packaging>apklib</packaging>,并添加了 android-maven-plugin<extensions>true</extensions>以识别 apklib 包类型。我用maven target compile编译了项目,成功了,但是我在任何地方都找不到生成的apklib文件。

在这些更改中的每一个之后,我都会执行 Maven / 更新项目、清理项目,甚至重新启动 Eclipse。没有成功:在空间错误中找不到依赖项仍然存在。

我不知道还能尝试什么。可能是图书馆名称的东西吗?库项目名称为google.play-services_lib,后缀为_lib,eclipse android库构建路径中引用的jar为_lib.jar,但maven工件没有_lib后缀。我也尝试在组件和工件中进行一些重命名,但没有成功,但我想问题可能就在那里。有人可以为 mavenised google-play-services_lib 项目发布示例 pom.xml 吗?

另一种猜测:我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

我添加到 google-play-services_lib 项目的 pom.xml:

<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>

4

2 回答 2

1

最后,问题是关于工件命名和 apklib 没有在 apk 库项目中生成。这是错误的:

  • 库 pom 中的 groupId 和 artifactId 是错误的:它们必须符合错误消息中指定的名称(我应该更仔细地阅读它)。

正确的价值观:

<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 支持带有 mavenised google-play-services apklib 的 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项目 eclipse Properties / Java Build Path / Order and Export 选项卡中,我选中了 Android Private Libraries 复选框,因此原始 google maps jar 安装在正在运行的设备中。

于 2013-07-08T07:51:48.170 回答
1

如果问题仍然存在,命名不匹配已解决(库 pom 和项目 pom 中的名称相同),在更新 maven 项目(项目资源管理器,右键单击任何项​​目->maven->更新 maven 项目)后 ,尝试删除该消息(!!)

我的问题选项卡,右键单击错误消息并选择“删除”。为我和Kevin Peck 工作 - 在工作区修复中找不到 Eclipse 依赖项

于 2014-10-06T12:15:58.460 回答