1

我添加ViewPagerIndicator到我的项目(它是一个 Android 库项目)中,我的测试在 IntelliJ 上运行良好,但是当我从 ANT 运行它们时失败。需要明确的是,只有从这个 Android 库项目中引用类的测试失败了,其余的都通过了,没有任何问题。我猜我的 build.xml 中有些地方不对劲?还有其他人遇到这个吗?

这是堆栈跟踪:

java.lang.NoClassDefFoundError: Lcom/viewpagerindicator/CirclePageIndicator; com.google.inject.internal.util.$ComputationException: java.lang.NoClassDefFoundError: Lcom/viewpagerindicator/CirclePageIndicator; 在 com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:553) 在 com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:419) 在 com .google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041) 在 com.google.inject.internal.FailableCache.get(FailableCache.java:50) 在 com.google.inject.internal。 com.google.inject.internal.InjectorImpl.getMembersInjector(InjectorImpl.java:950) 上的 MembersInjectorStore.get(MembersInjectorStore.java:65) com.google.inject.internal.InjectorImpl.getMembersInjector(InjectorImpl.java:

4

1 回答 1

0

我想通了。

build.xml中目标junit下的任务中(我从 Github 上的AndroidIntellijStarter项目中获取了片段),您需要添加一个指向classes.jar文件的引用,该文件是为您包含在项目中的每个库项目构建的。testclasspath

可能有一种更优雅的方式来实现这一点,但这是我在短时间内想出的:

<target name="test" depends="compile.tests" description="test all">
        <mkdir dir="${out.dir}/out/reports/tests"/>
        <junit showoutput="true" failureproperty="junit.failure">
            <formatter type="plain" usefile="false" if="junit.console.out"/>
            <formatter type="plain"/>
            <formatter type="xml"/>
            <batchtest todir="${out.dir}/out/reports/tests">
                <fileset dir="${tested.project.test.absolute.dir}">
                    <include name="**/*Test.java"/>
                </fileset>
            </batchtest>
            <classpath>
                <!-- Project -->
                <pathelement path="${out.classes.absolute.dir}"/>
                <pathelement path="${out.test.classes.absolute.dir}"/>
                <fileset dir="${extensible.libs.classpath}" includes="**/*.jar"/>

                <!-- Library Project Here -->
                <fileset dir="path/to/classes/jar" includes="*.jar"/>

                <!-- Robolectric -->
                <fileset dir="submodules/robolectric/lib/main" includes="*.jar"/>
                <pathelement path="submodules/robolectric/bin/mainClasses"/>

                <!-- Android -->
                <path refid="android.target.classpath"/>
            </classpath>
        </junit>
        <fail if="junit.failure" message="Unit test(s) failed.  See reports!"/>
</target>
于 2012-09-06T03:01:51.117 回答