2012-12-05 21 views
12

मैं कुछ समय के लिए मैवेन, रोबोलेक्ट्रिक, एक्शनबार शेरलॉक, और इंटेलिज प्राप्त करने की कोशिश कर रहा हूं, सभी अच्छी तरह से खेलने के लिए दीवार के खिलाफ अपने सिर को टक्कर लगी है। मैंने अभी इंटेलिज के साथ इमारत पर छोड़ दिया है और मैवेन पर ध्यान केंद्रित कर रहा हूं।आप एंड्रॉइड प्रोजेक्ट में Robolectric, Maven, ActionBarSherlock (और अधिमानतः + IntelliJ) को कैसे एकीकृत करते हैं?

मेरे पास मैवेन बिल्ड में परीक्षण छोड़ने पर एक एप बार है (जो मुझे बताता है कि मैं एक्शनबार एकीकरण मोर्चे पर जाने के लिए अच्छा हूं)। IntelliJ बिल्ड ManifestParsingTest.java पर शिकायत करता है कि शिकायत है कि यह नहीं जानता कि जूनिट कहाँ है (अन्य मुद्दों के बीच)।

Robolectric एकीकरण

मैं पहले से ही Robolectric परियोजना में सफलतापूर्वक चल रहा था। मैं (ShadowSherlockFragmentActivity.java जो src/test/java/com/blah/blah/support/shadows/ में रहती है को छोड़कर) src/test/java/com/blah/blah/support/ में Jake Wharton's gist से फाइल की नकल की और अपने कस्टम परीक्षण धावक के लिए निर्माता में इस लाइन डाल (support फ़ोल्डर में जीवन):

ActionBarSherlock.registerImplementation(ActionBarSherlockRobolectric.class); 

mvn त्रुटियों

मैं इन निर्माण त्रुटियों में चल रहा हूँ (इंटेलीजे भी एक ही सामान के लिए लाल squigglies है):

[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> 

वहाँ कुछ परियोजना config मैं याद कर रहा हूँ है?

+0

आप robolectric के 1.2-SNAPSHOT संस्करण के साथ एक ही त्रुटि मिलती है? – redwoolf

+0

@redwoolf: संस्करण को पर सेट करना 1.2-SNAPSHOT पोम में यह त्रुटि दी गई: "com.pivotallabs के लिए POM: robolectric: jar: 1.2-SNAPSHOT गुम है, कोई निर्भरता जानकारी उपलब्ध नहीं है।" वहाँ एक और तरीका है मैं स्नैपशॉट प्राप्त कर सकते है? – colabug

+0

हां आपको अपने पोम में या अपनी सेटिंग्स में स्नैपशॉट रेपो जोड़ने की जरूरत है। http://stackoverflow.com/a/7717234/112263 – redwoolf

उत्तर

10

स्क्वायर पर, इस उपयोग के मामले का समर्थन करने के लिए हम a modified version of Robolectric का उपयोग करते हैं। हम मुख्य संग्रह में अपस्ट्रीम के लिए एक कांटा और आवश्यक परिवर्तनों को बंद करने के लिए हमें निकालने के लिए पिवोटेल के साथ काम कर रहे हैं। आवश्यक परिवर्तन संसाधन लोडिंग सिस्टम में हुक हैं। ये विधियां वर्तमान में निजी हैं जो संकलन विफलताओं का कारण है जिसे आप देख रहे हैं।

पिवोटल लगातार किसी भी तरह की समानता में रिलीज़ नहीं करता है, इसलिए यदि परिवर्तन इसे अपस्ट्रीम बनाते हैं तो आपको थोड़ी देर के लिए SNAPSHOT संस्करण का उपयोग करना होगा।

+0

त्वरित उत्तर के लिए धन्यवाद! ऐसा लगता है कि मेरे विकल्प मुख्य रेखा के बजाय वर्ग की शाखा का उपयोग करना है या मैन्युअल रूप से मेनलाइन रोबोलेक्ट्रिक के स्थानीय रूप से फोर्क किए गए संस्करण को पैच करना है। – colabug

+1

मुझे अभी बताया गया था कि अब हम 99.9% अपस्ट्रीम रोबोलेक्ट्रिक के साथ सिंक्रनाइज़ हैं और अगले सप्ताह या दो में अपने संस्करण ('मास्टर' शाखा) पर स्विच करने में सक्षम होना चाहिए। तो उम्मीद है कि हम इसे पूरा होने के बाद रिलीज करने के लिए दबा सकते हैं। –

+0

@ जेकवार्टन क्या आप ग्रहण या इंटेलिजे को एक आदर्श के रूप में उपयोग करते हैं? मैं आपसे पूछता हूं कि रिलीज 4.2.0 के रूप में एक्लिप्स के तहत समर्थन लाइब्रेरी से संबंधित कुछ परेशानी हैं। यह दोनों पोम और libs फ़ोल्डर में शामिल है और ग्रहण द्वारा दो बार dexed है। – Snicolas

2

मैं इसे काम कर सकता हूं।

इस प्रयास करें:

  • कदम robolectric और JUnit अंत करने के लिए निर्भरता।

  • निर्माण टैग में src और परीक्षण पथ से संकेत मिलता है, finalname के बाद और प्लग इन से पहले।

  • पुनर्निर्माण और मेवेन टूलबार से परीक्षण चलाएं।

    <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>