2017-02-24 22 views
3

sonarqube gradleプラグインで使用するサブモジュールでAndroidプロジェクトを設定する正しい方法は何ですか? Googleは私の友人ではありませんでしたが、私は何か基本的なものを見逃しているかもしれません。 (私はアンドロイドビルドのディレクトリとサブモジュールに関連するソナーレベルの問題を検索します。有用な結果はありません)sonarqube gradleプラグインで使用するサブモジュールでAndroidプロジェクトを設定する正しい方法は何ですか?

非常に高いレベルで、私は次の構造のAndroidプロジェクトで作業しています。

git_repository 
|----- android_project 
    |--- app 
    |--- SDK 
    |- api 

git_repositoryには、README.mdとその他の最上位ファイル(android_projectを含む)が含まれています。 android_projectには、SDKのgitサブモジュールだけでなく、このアプリケーションも含まれています。このgitサブモジュールには、アプリが実行する必要があるAPIコードが含まれています。

問題は、sonarqubeを実行しようとすると、存在しないファイル/ディレクトリを探しているようです。私は単純な最小限のプロジェクトでこの問題はありません。私は月曜日にサブモジュールを使用する最小限のプロジェクトを立ち上げる予定ですが、私は週末に出発する前にこの質問に答えてください。

$ ./gradlew clean sonarqube 
* snip * 
:sonarqube 
Invalid value for sonar.java.test.libraries 
:sonarqube FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':sonarqube'. 
> No files nor directories matching '/Users/my_username/git_repository/android_project/app/build/intermediates/dependency-cache/debug' 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or -- debug option to get more log output. 

BUILD FAILED 

Total time: 9.897 secs 
$ 

このGradleのタスクは、MacOSの/ Androidのメーカー、コマンドラインの設定に失敗しているが、究極の目標は、ジェンキンスで動作する構成となっていることです。 settings.gradleファイルとbuild.gradleファイルが続きます。明らかに私は間違ったことをしています。

git_repository/android_project/settings.gradle完全なリスト

include ':app', ':api' 
project(':api').projectDir = new File('SDK/api') 

git_repository/android_project/build.gradle完全なリスト

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

buildscript { 
    repositories { 
     jcenter() 
     maven { 
      url "https://plugins.gradle.org/m2/" 
     } 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:2.2.3' 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
     classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.2' 
     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

apply plugin: 'org.sonarqube' 

allprojects { 
    repositories { 
     jcenter() 
    } 
    tasks.withType(JavaCompile) { 
     options.encoding = 'UTF-8' 
    } 
} 

//subprojects { 
// sonarqube { 
//  properties { 
// //   property "sonar.sources", "src" 
//  } 
// } 
//} 

//sonarqube { 
// properties { 
////  property "sonar.exclusions", "file:**/SDK/**" 
// } 
//} 

subprojects { 
    sonarqube { 
     properties { 
      property "sonar.sourceEncoding","UTF-8" 
      property "sonar.sources","src/main/java" 
      property "sonar.java.binaries", "./build/" 
      property "sonar.tests","src/androidTest" 
//   property "sonar.exclusions","build,build/**,**/*.png" 

      property "sonar.import_unknown_files", true 

      property "sonar.android.lint.report", "./build/outputs/lint-results.xml" 
     } 
    } 
} 

project(":api") { 
    sonarqube { 
     skipProject = true 
    } 
} 
+0

なぜ特定のマシンのソフトウェアとしてsonarqubeを使用していないのですか?それをgradle pluginとして使用してください – dhams

答えて

1

はいその倍数とのプロジェクトのためのトリッキーなビット適切なワイルドカードを使用して達成されます。

は、次の手順を実行します。すべてのサブモジュールを含むマスターモジュールで

  1. はのbuild.gradleファイル内 sonarqube.gradleファイル enter image description here

  2. を置きますマスターモジュールは、Mavenプラグインを追加し、 クラスの依存関係を追加します。 enter image description here

  3. ここ

2つの上記のファイルの例です。その後、中sonarqube.gradleから適用

sonarqube.gradle

apply plugin: "org.sonarqube" 

sonarqube { 
//noinspection GroovyAssignabilityCheck 
    properties { 
//noinspection GroovyAssignabilityCheck 
     property "sonar.projectName", "appar" 
//noinspection GroovyAssignabilityCheck 
     property "sonar.projectVersion", "1.0" 
//noinspection GroovyAssignabilityCheck 
     property "sonar.analysis.mode", "publish" 
//noinspection GroovyAssignabilityCheck 
     property "sonar.language", "java" 
//noinspection GroovyAssignabilityCheck 
     property 'sonar.sourceEncoding', "UTF-8" 
//noinspection GroovyAssignabilityCheck 
     property "sonar.sources", "./src/main" 
    // noinspection GroovyAssignabilityCheck 
     property "sonar.exclusions", "src/main/java/com/appar/model/**, **/*Entity.java" 
//noinspection GroovyAssignabilityCheck 
     property "sonar.host.url", "http://192.168.21.33:9000" 
//noinspection GroovyAssignabilityCheck 
     property "sonar.login", "admin" 
//noinspection GroovyAssignabilityCheck 
     property "sonar.profile", "fulllint" 
//noinspection GroovyAssignabilityCheck 
     property 'sonar.import_unknown_files', true 
//noinspection GroovyAssignabilityCheck 
     property "sonar.android.lint.report", "./build/outputs/lint-results-debug.xml" 
//noinspection GroovyAssignabilityCheck 
     property "sonar.password", "admin" 
//noinspection GroovyAssignabilityCheck 
     property "sonar.java.binaries", "build/" 

    } 
} 

build.gradle

buildscript { 
    repositories { 
     jcenter() 
     maven { 
      url "https://plugins.gradle.org/m2/" 
     } 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.2.2' 
     classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.0.1" 
     classpath 'com.dicedmelon.gradle:jacoco-android:0.1.1' 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
} 

ビルド。別々のモジュールののGradle

ここでは、サブモジュールの一方のbuild.gradleの例である:上記のファイルに

apply from: '../sonarqube.gradle' 
に示すよう

apply plugin: 'com.android.library' 
apply from: '../sonarqube.gradle' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 

    defaultConfig { 
     minSdkVersion 21 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 

     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     debug { 
      testCoverageEnabled = true 
     } 
    } 
} 

dependencies { 
    compile project(':java-library') 

    testCompile 'junit:junit:4.12' 
    testCompile "org.robolectric:robolectric:3.1.4" 
} 

はちょうど他のすべての適用の行と一緒にこのラインを置きます

enter image description here

あなたは、サブモジュール内のすべてのbuild.gradleファイルにsonarqube.gradleを適用した後。

だけでプロジェクトがプッシュする前に、プロジェクトを作る正常にビルドを取得し、sonarqubeサーバーにプッシュされます、あなたはFindBugsのを使用している場合は、エラー結果が

を示してしまいます私を信じ

./gradlew sonarqube 

のコマンドを実行しますあるいは、findbugsが解析するためにバイトコードを必要とするため、ビルドが失敗します。

とプロパティ

//noinspection GroovyAssignabilityCheck 
      property "sonar.projectKey", "appar_app" 

このsonar.projectKeyプロパティを使用していけません。これはSonarQubeによってソナーデータベース内の各プロジェクト(またはモジュール)を識別するために使用されます。 したがって、すべてのモジュールが同じprojectKey値を持つ場合、SonarQubeはデータベース内の1つのプロジェクトを更新します。 このプロパティは、各モジュールのフォルダ名で自動的に設定されるため、心配しないでください。

関連する問題