在很高的层次上,我正在使用具有以下结构的AndroID项目.
git_repository|----- androID_project |--- app |--- SDK |- API
git_repository包含README.md和其他顶级文件,包括androID_project. androID_project包含应用程序,以及SDK中的git子模块.这个git子模块包含app需要运行的API代码.
问题是当我尝试运行sonarqube时,它似乎在寻找不存在的文件/目录.对于一个更简单的最小项目,我没有这个问题.我计划在星期一设置一个使用子模块的最小项目,但我想在离开周末前把这个问题拿出来.
$./gradlew clean sonarqube* snip *:sonarqubeInvalID value for sonar.java.test.librarIEs:sonarqube FailedFAILURE: 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 FailedTotal time: 9.897 secs$
此Gradle任务在MacOS / AndroID Studio命令行设置上失败,但最终目标是使配置与Jenkins一起使用.
我的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 }}解决方法 是的,对于具有多个模块的项目来说,它有点棘手,它使用适当的通配符实现.
跟着这些步骤:
>在包含所有子模块的主模块中放置
sonarqube.gradle文件
>在主模块的build.gradle文件中添加maven插件和
类依赖
这是上面提到的两个文件的示例:
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() }}
然后从sonarqube.gradle应用于单独模块的build.gradle
这是一个子模块的build.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"}
只需将此行与所有其他应用行一起放置,如上面的文件所示
apply from: '../sonarqube.gradle'
将sonarqube.gradle应用于子模块中的所有build.gradle文件后.
只需运行命令
./gradlew sonarqube
相信我,项目将成功构建并被推入sonarqube服务器,并将显示错误结果
如果你正在使用findBUGs在推送之前制作项目,否则构建将失败,因为findBUGs需要字节码来分析.
不要使用该属性
//noinspection GroovyAssignabilityCheck property "sonar.projectKey","appar_app"
这个sonar.projectKey属性. SonarQube使用它来识别声纳数据库中的每个项目(或模块).因此,如果所有模块都具有相同的projectKey值,SonarQube将更新其数据库中的单个项目.不用担心,此属性会自动设置为每个模块的文件夹名称.
总结以上是内存溢出为你收集整理的配置带有子模块的Android项目与sonarqube gradle插件一起使用的正确方法是什么?全部内容,希望文章能够帮你解决配置带有子模块的Android项目与sonarqube gradle插件一起使用的正确方法是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)