2013-12-11 6 views
7

मैं एंड्रॉइड बिल्ड के साथ ग्रैडल के लिए FindBugs प्लगइन का उपयोग करने का प्रयास कर रहा हूं।FindBugs एंड्रॉइड ग्रैडल कोई वर्ग कॉन्फ़िगर नहीं किया गया त्रुटि

build.gradle फ़ाइल

buildscript { 
    repositories { 
    mavenCentral()   
    } 
    dependencies { 
    classpath 'com.android.tools.build:gradle:0.6.+' 
    } 
} 
apply plugin: 'android' 
apply plugin: 'findbugs' 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.0" 
    defaultConfig { 
    minSdkVersion 8 
    targetSdkVersion 19   
    } 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
} 

लेकिन जब मैं check कार्य निष्पादित यह कहता है

 
No classes configured for FindBugs analysis. 

मैं FindBugs विश्लेषण के लिए कक्षाएं कैसे कॉन्फ़िगर करूँ?

उत्तर

12

इस समय यह संभव नहीं है क्योंकि findbugs Gradle के सामान्य जावा स्रोतसेट की अपेक्षा करता है लेकिन एंड्रॉइड प्लगइन कस्टम का उपयोग करता है।

डिफ़ॉल्ट स्रोतसेट्स का उपयोग करने की अनुमति देने के लिए ग्रैडल और एंड्रॉइड प्लगइन दोनों में योजना बनाई गई है जो FindBugs को सक्षम करेगी।

इस समस्या यहां ट्रैक: https://code.google.com/p/android/issues/detail?id=55839

2

मैं अलग कार्य के रूप में खोजने बग जोड़कर समस्या

को सुलझाने में सक्षम था

task findbugs(type: FindBugs) { 
    ignoreFailures = true 
    classes = fileTree('build/classes/debug/') 
    source = fileTree('src/main/java/') 
    classpath = files() 
    effort = 'max' 
} 

इस कार्य का उपयोग कर चला सकते हैं

gradle findbugs 

यदि आप एंड्रॉइड-टेस्ट प्लगइन का उपयोग कर रहे हैं तो आपको बाहर करना होगा निर्माण करते समय findbugsTestDebug कार्य।

gradle build -x findbugsTestDebug 
+1

ध्यान दें कि यदि आप किसी अन्य स्रोत फ़ोल्डर, या स्वाद, या प्रकार के प्रकार का उपयोग नहीं करते हैं तो यह ठीक काम करता है।एकीकरण की कमी के बारे में मेरा उत्तर एक वास्तविक एकीकरण के बारे में है जो इससे कोई फर्क नहीं पड़ता कि आप अपने एंड्रॉइड प्रोजेक्ट को कैसे कॉन्फ़िगर करते हैं और इससे कोई फर्क नहीं पड़ता कि आपका कोड कहां रहता है (मुख्य स्रोत सेट में, स्वाद स्रोतों में, आदि ...) –

3

एंड्रॉयड स्टूडियो के नए संस्करण में इस समस्या तथ्य यह है कि classes निर्देशिका का स्थान बदल दिया गया है के लिए जिम्मेदार ठहराया जा सकता है।

(0.8.2) के रूप में नए स्थान है:

build/intermediates/classes/{build_variant_name}/ 

उदाहरण

के लिए
build/intermediates/classes/debug/ 
task findbugs(type: FindBugs) { 
    excludeFilter = file('config/findbugs/findbugs.xml') 
    ignoreFailures = true 
    classes = fileTree('build/intermediates/classes/preproduction/') 
    source = fileTree('src/main/java/') 
    classpath = files() 
    effort = 'max' 
    reports { 
     xml { 
      destination "reports/findbugs.xml" 
     } 
    } 
} 
4

यह निश्चित रूप से संभव है। कम से कम अब। उत्तर नीचे https://gist.github.com/rciovati/8461832 पर देखा जा सकता है। assembleDebug:

apply plugin: 'findbugs' 

// android configuration 

findbugs { 
    sourceSets = [] 
    ignoreFailures = true 
} 

task findbugs(type: FindBugs, dependsOn: assembleDebug) { 

    description 'Run findbugs' 
    group 'verification' 

    classes = fileTree('build/intermediates/classes/debug/') 
    source = fileTree('src/main/java') 
    classpath = files() 

    effort = 'max' 

    excludeFilter = file("../config/findbugs/exclude.xml") 

    reports { 
     xml.enabled = true 
     html.enabled = false 
    } 
} 

check.doLast { 
    project.tasks.getByName("findbugs").execute() 
} 

यहाँ महत्वपूर्ण हिस्सा dependsOn है। इसके बिना आपको कोई भी कक्षाएं FindBugs विश्लेषण त्रुटि संदेश के लिए कॉन्फ़िगर नहीं किया जाएगा।

फ़ाइल को बाहर करने के लिए इस https://stackoverflow.com/a/7743935/1159930 का संदर्भ लें।

+0

मुझे याद आया निर्भर करता है और जब मैंने पहली बार साफ किया तो वही समस्या मिली। धन्यवाद! –

0

मुझे findbugs के लिए डिफ़ॉल्ट स्रोतसेट निर्दिष्ट करना होगा। शुरुआत में यह वहां नहीं था इसलिए मुझे त्रुटि मिल रही थी।

findbugs { 
    sourceSets = [] //Default sourceSet 
    toolVersion = "3.0.1"  
    ignoreFailures = true  
    reportsDir = file("$project.buildDir/findbugsReports") 
    effort = "max" 
    reportLevel = "low" 
} 
संबंधित मुद्दे