2013-12-11 4 views
7

Я пытаюсь использовать плагин FindBugs для Gradle с Android-сборкой.FindBugs Android Gradle Нет настроенных классов ошибок

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 ожидают нормальные Java SourceSets от Gradle, но плагин android использует собственные.

Планируется работа как в Gradle, так и в плагине Android, чтобы разрешить использование SourceSets по умолчанию, что позволит 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 

Если вы используете плагин для Android, вы должны исключить findbugsTestDebug задача при сборке.

gradle build -x findbugsTestDebug 
+1

Обратите внимание, что это работает отлично, если вы не используете какие-либо другие исходные папки или варианты или типы сборки.Мой ответ ниже об отсутствии интеграции - это настоящая интеграция, которая работает независимо от того, как вы настраиваете свой проект андроида и вне зависимости от того, где живет ваш код (в основных источниках, в источниках аромата и т. Д.) –

3

В новых версиях Android Studio, эта проблема может быть связана с тем, что местоположение каталога 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 внизу.

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: assembleDebug. Без этого вы получите Нет классов, настроенных для анализа FindBugs error message.

См. Это https://stackoverflow.com/a/7743935/1159930 для файла исключений.

+0

Я пропустил dependsOn и получил ту же проблему, когда я впервые очистился. Благодаря! –

0

Я должен указать источник SourceSet по умолчанию для findbugs. Первоначально оно не было поэтому я получал ошибку.

findbugs { 
    sourceSets = [] //Default sourceSet 
    toolVersion = "3.0.1"  
    ignoreFailures = true  
    reportsDir = file("$project.buildDir/findbugsReports") 
    effort = "max" 
    reportLevel = "low" 
} 
Смежные вопросы