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)atcom.google.inject.internal.util。$MapMaker $ StrategyImpl.compute(MapMaker.java:419)at com .google.inject.internal.util。$CustomConcurrentHashMap$ ComputingImpl.get(CustomConcurrentHashMap.java:2041)at com.google.inject.internal.FailableCache.get(FailableCache.java:50)atcom.google.inject.internal。 MembersInjectorStore.get(MembersInjectorStore.java:65)at com.google.inject.internal.InjectorImpl.getMembersInjector(InjectorImpl.java:950)at 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 に答える