【问题标题】:Android Robolectric packages not found. Unknown packaging: apk未找到 Android Robolectric 软件包。未知包装:apk
【发布时间】:2011-11-11 21:55:59
【问题描述】:

您好,我正在尝试使用 maven android 插件和 robolectric 来进行测试。现在我只有一个在 src/test 下的测试类。我已经按照这里的说明来尝试让它工作:http://pivotal.github.com/robolectric/maven-quick-start.html

更新:我已经听从了在这里发帖的人的建议,这里是我最新的 Pom.xml 和编译输出。

这是我的 Pom.xml:

    <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.mozilla.android.sync</groupId>
    <artifactId>android-sync</artifactId>
    <version>1</version>
    <packaging>apk</packaging>
    <name>sync</name>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.5</version>
        </dependency>
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <!--
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android-test</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        -->
        <dependency>
            <groupId>com.pivotallabs</groupId>
            <artifactId>robolectric</artifactId>
            <version>1.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <!-- try 4.10 once we get this working -->
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>${project.artifactId}</finalName>
        <sourceDirectory>src</sourceDirectory>
        <!--<pluginManagement>-->
        <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <!-- version 2.3 defaults to java 1.5, so no further configuration needed-->
            <version>2.3.2</version>
            <configuration>
            <source>1.6</source>
            <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <!--
            <artifactId>maven-android-plugin</artifactId>
            <version>2.8.4</version>-->
            <artifactId>android-maven-plugin</artifactId>
            <version>3.0.0-alpha-13</version>
            <configuration>
            <sdk>
                <!-- platform or api level (api level 4 = platform 1.6)-->
                <platform>10</platform>
            </sdk>
            <emulator>
                <!-- the name of the avd device to use for starting the emulator -->
                <avd>android-14</avd>
            </emulator>
            <undeployBeforeDeploy>true</undeployBeforeDeploy>
            </configuration>
            <extensions>true</extensions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.6</version>
            <configuration>
            <excludes>
                <exclude>**/Test*.java</exclude>
            </excludes>
            </configuration>
        </plugin>
        </plugins>
        <!--</pluginManagement>-->
    </build>
   </project>

mvn clean install 的输出:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building sync 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ android-sync ---
[INFO] Deleting /Users/jason/dev/work/android-sync/target
[INFO] 
[INFO] --- android-maven-plugin:3.0.0-alpha-13:generate-sources (default-generate-sources) @ android-sync ---
[INFO] ANDROID-904-002: Found aidl files: Count = 0
[INFO] ANDROID-904-002: Found aidl files: Count = 0
[INFO] /Users/jason/dev/android-sdk-mac_x86/platform-tools/aapt [package, -m, -J, /Users/jason/dev/work/android-sync/target/generated-sources/r, -M, /Users/jason/dev/work/android-sync/AndroidManifest.xml, -S, /Users/jason/dev/work/android-sync/res, --auto-add-overlay, -I, /Users/jason/dev/android-sdk-mac_x86/platforms/android-10/android.jar]
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ android-sync ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/jason/dev/work/android-sync/src/main/resources
[INFO] skip non existing resourceDirectory /Users/jason/dev/work/android-sync/target/generated-sources/extracted-dependencies/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ android-sync ---
[INFO] Compiling 21 source files to /Users/jason/dev/work/android-sync/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[6,33] package com.xtremelabs.robolectric does not exist
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[7,16] package org.junit does not exist
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[8,23] package org.junit.runner does not exist
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[10,26] package org.hamcrest does not exist
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[10,0] static import only from classes and interfaces
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[11,23] package org.junit does not exist
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[11,0] static import only from classes and interfaces
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[13,1] cannot find symbol
symbol: class RunWith
@RunWith(RobolectricTestRunner.class)
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[16,5] cannot find symbol
symbol  : class Test
location: class org.mozilla.android.sync.test.MyActivityTest
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[19,28] cannot find symbol
symbol  : method equalTo(java.lang.String)
location: class org.mozilla.android.sync.test.MyActivityTest
[INFO] 10 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.019s
[INFO] Finished at: Sat Nov 12 13:02:42 PST 2011
[INFO] Final Memory: 12M/81M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project android-sync: Compilation failure: Compilation failure:
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[6,33] package com.xtremelabs.robolectric does not exist
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[7,16] package org.junit does not exist
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[8,23] package org.junit.runner does not exist
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[10,26] package org.hamcrest does not exist
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[10,0] static import only from classes and interfaces
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[11,23] package org.junit does not exist
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[11,0] static import only from classes and interfaces
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[13,1] cannot find symbol
[ERROR] symbol: class RunWith
[ERROR] @RunWith(RobolectricTestRunner.class)
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[16,5] cannot find symbol
[ERROR] symbol  : class Test
[ERROR] location: class org.mozilla.android.sync.test.MyActivityTest
[ERROR] /Users/jason/dev/work/android-sync/src/test/java/org/mozilla/android/sync/test/MyActivityTest.java:[19,28] cannot find symbol
[ERROR] symbol  : method equalTo(java.lang.String)
[ERROR] location: class org.mozilla.android.sync.test.MyActivityTest
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

【问题讨论】:

    标签: java android eclipse maven robolectric


    【解决方案1】:

    我认为由于 pom 文件中测试依赖项的顺序,您可能会遇到这个问题。将 junit 移动到最后一个或至少在 robolectric 后面。那应该可以解决它。

    查看有效的robolectric sample app 以进行更多比较。

    【讨论】:

    • 这似乎没有任何帮助。但是,当我添加包含 部分的标签 时,这似乎有所帮助。但是现在我收到一个新错误:未知包装:apk @ line 7, column 13
    • 如果您将其他插件添加到插件管理中,您仍然必须在构建/插件部分中引用 android maven 插件。只需尝试采用示例中的 pom。它有效。
    • 我已经尝试采用该格式并在上面重新发布了我的文件。你有没有看到我可能仍然缺少的东西?
    【解决方案2】:

    我确实确保所有依赖项都列在 android 依赖项之前

    实际上依赖的顺序确实很重要,在您自己提供的链接中,请参阅示例 pom.xml 中的重要 cmets:

        <!-- Make sure this is below the android dependencies -->
        <dependency>
            <groupId>com.pivotallabs</groupId>
            <artifactId>robolectric</artifactId>
            <version>X.X.X</version>
            <scope>test</scope>
        </dependency>
    
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
    

    根据我自己的经验,我认为这个库仍处于开发阶段,它们的 API 不稳定,并且在不同版本之间变化很大,在旧版本中工作的代码例如 0.9.4 可能无法在 1.0 中工作- XX 或以后。尝试从那里下载/使用最新版本sonatype repository

    【讨论】:

    • 这可能是真的......但我目前的问题现在与 maven 认识到上述“apk”的包类型有关。我现在可以注释掉依赖项,但仍然有这个问题,不知道如何构建 apk。您可以在我的帖子的编辑中看到这是我当前的问题:未知包装:apk @ line 7, column 13
    • 尝试降级android-maven-plugin api级别10,不确定,值得一试。或者附上详细的错误堆栈跟踪。
    • 所以插件需要在 之外......但现在我又回到了原来的问题。有什么想法吗?
    • 从你的 pom.xml 中删除 src,通过定义这个,你告诉 maven-compiler-plugin 只在 src 文件夹中寻找编译源,所有的 java 文件都在 test文件夹被忽略。
    • 但是我的测试也在 src 下。我的目录结构有一个 src 文件夹,里面有“main”和“tests”。
    【解决方案3】:

    所以我也遇到了同样的问题。值得一提的是,我没有使用 maven 或 gradle,这就是我解决此问题的方法。

    在您的测试类中:

    1. 确保 Roboelectric 库位于依赖项列表的首位(在 IntelliJ 中,在导航窗格中单击您的项目并点击 F4)。

    2. import org.junit.runner.RunWith;

    3. import org.roboelectric.RoboeletricTestRunner;

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-23
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多