2016-07-29 11 views
2

私はcheckstyleをAndroidプロジェクトと統合しようとしています - 私のbuild.gradleは以下のとおりです。私は基本的にビルドに関する文書がないというコードを識別する警告を表示したいと思います。この設定では、手動で実行できるcheckstyleというグラデルタスクがありますが、プロジェクトを再ビルドしたときに呼び出されません。(タスクを右クリックして再ビルド時に実行しても)Androidアプリケーションをビルドするときにcheckstyleを実行するにはどうすればいいですか?

それは他の人たちがまったく反対の問題を抱えており、ビルド時に実行されないようにしようとしているように思われるからです。私は間違って何をしていますか?

// Top-level build file where you can add configuration options common to all sub-projects/modules. 
 

 
buildscript { 
 
    repositories { 
 
     jcenter() 
 
    } 
 
    dependencies { 
 
     classpath 'com.android.tools.build:gradle:2.1.2' 
 

 
     // NOTE: Do not place your application dependencies here; they belong 
 
     // in the individual module build.gradle files 
 
    } 
 
} 
 

 
allprojects { 
 
    repositories { 
 
     jcenter() 
 
    } 
 
    apply plugin: 'checkstyle' 
 

 
    task checkstyle(type: Checkstyle) { 
 
     configFile file("${project.rootDir}/config/checkstyle/checkstyle.xml") 
 
     source 'src' 
 
     include '**/*.java' 
 
     exclude '**/gen/**' 
 

 
     reports { 
 
      xml.enabled = true 
 
     } 
 

 
     classpath = files() 
 
    } 
 
} 
 

 
task clean(type: Delete) { 
 
    delete rootProject.buildDir 
 
}

+0

アーカイブを作成しますか?すべてのビルドでcheckstyleを実行しますか? – Divers

答えて

3

からhere

は、まずタスクを作成ルートレベルで

allprojects { 
    repositories { 
     jcenter() 
    } 

    task checkstyle(type: Checkstyle) { 
     showViolations = true 
     configFile file("../settings/checkstyle.xml") 

     source 'src/main/java' 
     include '**/*.java' 
     exclude '**/gen/**' 
     exclude '**/R.java' 
     exclude '**/BuildConfig.java' 

     // empty classpath 
     classpath = files() 
    } 
} 

次に、モジュールレベルで依存関係を追加します。これらは、プロジェクトの既存のbuild.gradleファイルの最後に追加されたばかりです。

apply plugin: 'checkstyle' 

preBuild.dependsOn('checkstyle') 
assemble.dependsOn('lint') 
check.dependsOn('checkstyle') 
1

私は数ヶ月前にこれを行うために...研究と見ている多くの後に持っていました。

apply plugin: 'checkstyle' 

task checkstyle(type: Checkstyle) { 
    // Cleaning the old log because of the creation of the new ones (not sure if totaly needed) 
    delete fileTree(dir: "${project.rootDir}/app/build/reports") 
    source 'src' 
    include '**/*.java' 
    exclude '**/gen/**' 
    // empty classpath 
    classpath = files() 
    //Failing the build 
    ignoreFailures = false 
} 

checkstyle { 
    toolVersion = '6.18' 
} 

project.afterEvaluate { 
    preBuild.dependsOn 'checkstyle' 
} 

この無駄な部分は重要です。 preBuildはビルドがあるたびに実行される最初のタスクですが、gradleが実行されるまで表示されないので、.afterEvaluateが必要です。このチェックスタイルは、実行する最初のものです。上記のコードでは、ignorefailuresをtrueに設定することができます。チェックの重大度がErrorに設定されている場合はビルドに失敗し、致命的な場合のみビルドに失敗します。

ところで、これは例のbuild.gradle(モジュール:アプリ)のモジュールGradleのファイルにする必要がありますそれは私が自分の質問への答えがわかりました表示されます

+0

私は、afterEvaluateを示すいくつかの解決策を見ましたが、それは未定義のように別のエラーを投げていました。私が上に投稿した解決策は、私のために最終的に働いた。 –

+0

私には、表示されている 'preBuild'というシンボルは解決できませんが、動作しています。あなたはあなた自身の解決策を見つけました。 – STARGATEBG

関連する問題