2012-09-05 99 views
1

我將ViewPagerIndicator添加到我的項目(它是一個Android庫項目),我的測試在IntelliJ上運行良好,但是在從ANT運行它時失敗。要清楚的是,只有引用此Android庫項目的類的測試失敗,其餘的都沒有任何問題。我猜我的build.xml中有些東西是不正確的?其他人遇到這個?NoClassDefFoundError僅適用於運行ANT測試時的庫項目類

這裏的堆棧跟蹤:

java.lang.NoClassDefFoundError: Lcom/viewpagerindicator/CirclePageIndicator; com.google.inject.internal.util.$ComputationException: java.lang.NoClassDefFoundError: Lcom/viewpagerindicator/CirclePageIndicator; at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:553) at com.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) at com.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:957) at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:943) at roboguice.inject.ContextScopedRoboInjector.injectMembersWithoutViews(ContextScopedRoboInjector.java:243) at roboguice.activity.RoboActivity.onCreate(RoboActivity.java:78) at com.mycompany.myproduct.activities.TutorialActivity.onCreate(TutorialActivity.java:36) at com.mycompany.myproduct.activities.TutorialActivityTest.setup(TutorialActivityTest.java:37) at com.xtremelabs.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:292)

+0

添加'android.library.reference.1 =「路徑lib文件夾」在' ant.properties文件。 – Tarun

+0

@Tarun我已經在我的project.properties文件中定義了它。 –

+0

@Tarun如果你沒有進行自動構建,那麼工作正常。而且你不應該自己添加庫引用,這就是'android update project'的用處。 –

回答

0

我想通了這一點。

的build.xmltest目標下junit任務(我把從片段在Github上AndroidIntellijStarter項目),你需要一個classpath參考指向添加到classes.jar是被內置文件對於您已包含在項目中的每個圖書館項目。

有可能是一個更優雅的方式來實現這一點,但它是我想出了在短時間內:

<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> 
相關問題