2012-12-05 17 views
12

私はMaven、Robolectric、Actionbar Sherlock、Intellijを手に入れようとしばらく、壁に頭をぶつけていました。私は今intellijでビルドすることをあきらめて、mavenに集中しています。Robolectric、Maven、ActionBarSherlock(と+ IntelliJ)をAndroidプロジェクトにどのように統合しますか?

私は、Mavenビルドのテストをスキップするとアクションバーが表示されます(これはActionBar統合のフロントに行くのがよいと言います)。 ManifestParsingTest.javaでIntelliJビルドが失敗し、junitが(他の問題の中でも)どこにあるのかわからないという不満があります。

Robolectric統合

私はすでにRobolectricは、プロジェクトで正常に動作していました。

ActionBarSherlock.registerImplementation(ActionBarSherlockRobolectric.class); 

MVNエラー

:私は(supportフォルダ内の生活を)(src/test/java/com/blah/blah/support/shadows/に住んでいるShadowSherlockFragmentActivity.javaを除く)src/test/java/com/blah/blah/support/Jake Wharton's gistからファイルをコピーして、私のカスタムのテストランナーのためのコンストラクタで、このラインを置きます私はこれらのビルドエラーに遭遇しています(IntelliJにも同じものに赤い塊があります):

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:testCompile (default-testCompile) on project Blah: Compilation failure: Compilation failure: 
[ERROR] /Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/SherlockResourceLoader.java:[29,9] cannot find symbol 
[ERROR] symbol : constructor ResourceLoader(int,java.lang.Class,java.util.List<java.io.File>,java.io.File) 
[ERROR] location: class com.xtremelabs.robolectric.res.ResourceLoader 
[ERROR] /Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/SherlockResourceLoader.java:[45,5] method does not override or implement a method from a supertype 
[ERROR] /Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/ActionBarSherlockTestRunner.java:[39,37] resourceLoaderForRootAndDirectory has private access in com.xtremelabs.robolectric.RobolectricTestRunner 
[ERROR] /Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/ActionBarSherlockTestRunner.java:[47,30] cannot find symbol 
[ERROR] symbol : method getResourcePath() 
[ERROR] location: class com.xtremelabs.robolectric.RobolectricConfig 
[ERROR] /Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/ActionBarSherlockTestRunner.java:[48,9] resourceLoaderForRootAndDirectory has private access in com.xtremelabs.robolectric.RobolectricTestRunner 
[ERROR] /Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/ActionBarSherlockTestRunner.java:[38,3] method does not override or implement a method from a supertype 

のpom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.blah.blah</groupId> 
    <artifactId>projectName</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>apk</packaging> 
    <name>Project Name App</name> 

    <dependencies> 
     <dependency> 
      <groupId>com.google.android</groupId> 
      <artifactId>android</artifactId> 
      <version>4.0.1.2</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.pivotallabs</groupId> 
      <artifactId>robolectric</artifactId> 
      <version>1.1</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.8.2</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.google.android</groupId> 
      <artifactId>support-v4</artifactId> 
      <version>r6</version> 
     </dependency> 

     <dependency> 
      <groupId>com.actionbarsherlock</groupId> 
      <artifactId>library</artifactId> 
      <version>4.1.0</version> 
      <type>apklib</type> 
     </dependency> 
    <build> 
     <finalName>${project.artifactId}</finalName> 

     <plugins> 
      <plugin> 
       <!-- See http://code.google.com/p/maven-android-plugin/ --> 
       <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
       <artifactId>android-maven-plugin</artifactId> 
       <version>3.2.0</version> 
       <configuration> 
        <sdk> 
         <platform>15</platform> 
        </sdk> 
       </configuration> 
       <extensions>true</extensions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

は私が欠けているいくつかのプロジェクトの設定はありますか?

+0

あなたがrobolectricの1.2-SNAPSHOTバージョンと同じエラーを取得していますか? – redwoolf

+0

@redwoolf:バージョンをに設定すると、pomの1.2-SNAPSHOTに「このPOM for com.pivotallabs:robolectric:jar:1.2-SNAPSHOTがありません。依存関係の情報はありません。スナップショットを取得する別の方法はありますか? – colabug

+0

はい、スナップショットレポをあなたの設定に追加する必要があります。 http://stackoverflow.com/a/7717234/112263 – redwoolf

答えて

10

Squareでは、このユースケースをサポートするためにa modified version of Robolectricを使用しています。私たちはPivotalと協力して、フォークと必要な変更をメインリポジトリの上流に使用するようにしています。必要な変更は、リソースローディングシステムへのフックです。これらのメソッドは現在、プライベートであり、あなたが見ているコンパイルの失敗の原因です。

Pivotalは頻繁にリリースされているわけではありませんので、変更を上流にするとしばらくの間SNAPSHOTバージョンを使用する必要があります。

+0

素早い答えをありがとう!私の選択肢は、メインラインではなく正方形のブランチを使用するか、ローカルフォークされたメインラインRobolectricのバージョンに手動でパッチを当てることです。 – colabug

+1

私は現在、上流のRobolectricと99.9%同期していると言われており、次の週または2週間でそのバージョン( 'master'ブランチ)に切り替えることができるはずです。だからうまくいけば、完了したらリリースをするためにそれらを押すことができます。 –

+0

@JakeWharton EclipseやIntelliJをideとして使用していますか?リリース4.2.0では、Eclipseの下でサポートライブラリに関連するいくつかの問題があると私はあなたに尋ねます。それはpomとlibsフォルダの両方に含まれており、eclipseによって2回デクシングされます。 – Snicolas

2

私はそれを動作させることができます。最後に

  • 移動robolectricとJUnitの依存関係:

    はこれを試してみてください。

  • ビルドタグのsrcとtestパス、finalnameの後、およびプラグインの前を示します。

  • mavenツールバーからテストを再構築して実行します。

    <dependencies> 
    <dependency> 
        <groupId>com.google.android</groupId> 
        <artifactId>android</artifactId> 
        <version>4.0.1.2</version> 
        <scope>provided</scope> 
    </dependency> 
    
    <dependency> 
        <groupId>com.google.android</groupId> 
        <artifactId>support-v4</artifactId> 
        <version>r6</version> 
    </dependency> 
    
    <dependency> 
        <groupId>org.roboguice</groupId> 
        <artifactId>roboguice</artifactId> 
        <version>2.0</version> 
    </dependency> 
    
    <dependency> 
        <groupId>com.octo.android.robospice</groupId> 
        <artifactId>robospice-spring-android</artifactId> 
        <version>1.2.0</version> 
    </dependency> 
    
    <dependency> 
        <groupId>org.codehaus.jackson</groupId> 
        <artifactId>jackson-mapper-asl</artifactId> 
        <version>1.9.9</version> 
    </dependency> 
    
    <dependency> 
        <groupId>com.google.code.gson</groupId> 
        <artifactId>gson</artifactId> 
        <version>2.2.2</version> 
    </dependency> 
    
    <dependency> 
        <groupId>com.actionbarsherlock</groupId> 
        <artifactId>actionbarsherlock</artifactId> 
        <version>4.2.0</version> 
        <type>apklib</type> 
    </dependency> 
    
    <dependency> 
        <groupId>com.actionbarsherlock</groupId> 
        <artifactId>actionbarsherlock</artifactId> 
        <version>4.2.0</version> 
    </dependency> 
    
    <dependency> 
        <groupId>com.pivotallabs</groupId> 
        <artifactId>robolectric</artifactId> 
        <version>1.1</version> 
        <scope>test</scope> 
    </dependency> 
    
    <dependency> 
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId> 
        <version>4.8.2</version> 
        <scope>test</scope> 
    </dependency> 
    
    </dependencies> 
    
    <build> 
    <finalName>${project.artifactId}</finalName> 
    
    <sourceDirectory>src</sourceDirectory> 
    <testSourceDirectory>test</testSourceDirectory> 
    
    <plugins> 
        <plugin> 
         <!-- See http://code.google.com/p/maven-android-plugin/ --> 
         <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
         <artifactId>android-maven-plugin</artifactId> 
         <version>3.2.0</version> 
         <configuration> 
          <sdk> 
           <platform>15</platform> 
          </sdk> 
         </configuration> 
         <extensions>true</extensions> 
        </plugin> 
    </plugins> 
    </build> 
    
関連する問題