我有一個多模塊的Java代碼庫,是我建立的gradle使用的多項目支持的類。使用的gradle版本是1.6。該代碼用於構建Oracle ATG應用程序,並使用gradle java插件和自定義解析器來管理模塊/項目和外部ATG模塊之間的依賴關係。在多項目的Java代碼庫使用sonarRunner使用gradle這個,跳過只有一個項目
構建工作正常,我可以編譯沒有問題創造罐子。
我也使用gradle eclipse插件,並且可以將gradle multi-project導入到eclipse中,這導致所有的子項目都被導入到Eclipse中,而java build-path很好地被管理。
我使用的聲納亞軍插件附帶gradle這個,和聲納的版本是3.4.1。我使用Sonar附帶的H2數據庫。
這是我用在build.gradle
配置sonarRunner根項目:
apply plugin: "sonar-runner"
sonarRunner {
sonarProperties {
property "sonar.host.url", "http://localhost:9000"
property "sonar.jdbc.url", "jdbc:h2:tcp://localhost:9092/sonar"
property "sonar.jdbc.driverClassName", "org.h2.Driver"
property "sonar.jdbc.username", "sonar"
property "sonar.jdbc.password", "sonar"
}
}
對於每個子項目,我這樣做:
sonarRunner {
sonarProperties {
property "sonar.projectName", pathToAtgModuleName(path)
property "sonar.sourceEncoding", "UTF-8"
property "sonar.language", "java"
}
}
我設置sonar.projectName屬性,使Sonar儀表板可以正確顯示嵌套模塊。 sonar.projectName的值如下所示:ParentModule.ChildModule.SubChildModule
。
聲納報告適用於大多數模塊,只有一個除外。它似乎忽略了全部這個模塊中的類。
我的項目結構是這樣的(Java類包括內部類的數量爲向右):
RootProj/core 356
RootProj/MyMod 343
RootProj/MyMod/versioned 0
RootProj/MyMod/versioned/catalog 33
RootProj/integration/int1 9
RootProj/integration/int2 7
RootProj/integration/int3 5
RootProj/integration/int4 2
RootProj/integration/int5 17
RootProj/integration/int6 44
RootProj/perf 0
RootProj/REST 12
RootProj/Store 11
RootProj/TestRest 92
RootProj/TestStore 141
RootProj/TestVersioned 1
RootProj/webservices 14
即不能顯示的任何類的模塊,是RootProj/MyMod。
對於其中檢測類項目,輸出看起來是這樣的:
18:58:34.016 INFO .s.b.b.ProjectModule - ------------- Analyzing RootProj.MyMod.versioned.catalog
18:58:34.019 INFO .b.b.ProjectSettings - Load module settings
18:58:34.859 INFO .s.b.ProfileProvider - Quality profile : [name=RCS_way,language=java]
18:58:34.883 INFO nPluginsConfigurator - Configure maven plugins...
18:58:34.977 INFO org.sonar.INFO - Compare to previous analysis (2013-06-12)
18:58:35.026 INFO org.sonar.INFO - Compare over 5 days (2013-06-07, analysis of 2013-06-05 12:16:12.963)
18:58:35.066 INFO org.sonar.INFO - Compare over 30 days (2013-05-13, analysis of 2013-06-03 15:12:37.359)
18:58:35.133 INFO .b.p.SensorsExecutor - Initializer ProjectFileSystemLogger...
18:58:35.135 INFO jectFileSystemLogger - Excluded tests: [**/package-info.java]
18:58:35.139 INFO jectFileSystemLogger - Source directories:
18:58:35.140 INFO jectFileSystemLogger - D:\eCommerce\code\R0_3\RootProj\MyMod\versioned\catalog\src
18:58:35.140 INFO .b.p.SensorsExecutor - Initializer ProjectFileSystemLogger done: 7 ms
18:58:35.185 INFO p.PhasesTimeProfiler - Sensor JavaSourceImporter...
18:58:35.441 INFO p.PhasesTimeProfiler - Sensor JavaSourceImporter done: 256 ms
這是該項目的輸出SonarRunner:
18:59:24.747 INFO .s.b.b.ProjectModule - ------------- Analyzing RootProj.MyMod
18:59:24.748 INFO .b.b.ProjectSettings - Load module settings
18:59:25.164 INFO .s.b.ProfileProvider - Quality profile : [name=RCS_way,language=java]
18:59:25.175 INFO nPluginsConfigurator - Configure maven plugins...
18:59:25.186 INFO org.sonar.INFO - Compare to previous analysis (2013-06-12)
18:59:25.194 INFO org.sonar.INFO - Compare over 5 days (2013-06-07, analysis of 2013-06-05 12:16:12.957)
18:59:25.203 INFO org.sonar.INFO - Compare over 30 days (2013-05-13, analysis of 2013-06-03 15:12:37.355)
18:59:25.211 INFO .b.p.SensorsExecutor - Initializer ProjectFileSystemLogger...
18:59:25.212 INFO jectFileSystemLogger - Excluded tests: [**/package-info.java]
18:59:25.212 INFO .b.p.SensorsExecutor - Initializer ProjectFileSystemLogger done: 1 ms
18:59:25.213 INFO p.PhasesTimeProfiler - Sensor JavaSourceImporter...
18:59:25.224 INFO p.PhasesTimeProfiler - Sensor JavaSourceImporter done: 11 ms
正如你所看到的,有問題的模塊沒有按不顯示找到源目錄的行。
我接通gradle這個調試日誌和我看到正在打印這些值:
RootProj.MyMod.sonar.modules: versioned
RootProj.MyMod.sonar.sources: D:\eCommerce\code\R0_3\RootProj\MyMod\src
RootProj.MyMod.versioned.catalog.sonar.sources: D:\eCommerce\code\R0_3\RootProj\MyMod\versioned\catalog\src
RootProj.MyMod.versioned.sonar.modules: catalog
RootProj.MyMod.versioned.sonar.sources: D:\eCommerce\code\R0_3\RootProj\MyMod\versioned\src
上面系是不是所有在一起。我剛貼上了我覺得有趣的價值觀。
我的猜測是,由於RootProj.MyMod.versioned
沒有任何java類,Gradle插件或sonar-runner本身的錯誤導致它跳過父目錄中的類爲true。
所以我用skipProject =真正的RootProj.MyMod.versioned
。這解決了問題,我看到被報告了RootProj.MyMod類,但聲納不再嘗試運行RootProj.MyMod.versioned.catalog一個報告,裏面確實有文件。
所以我堅持要麼失去Sonar 343班的報告,要麼33班。我寧願不選擇。
因此,最後,我的問題: 有沒有一種方法可以禁止只有ZERO類的項目運行報告,而不是它的父項或子項?
僅供參考,如果有任何意義,我只安裝編譯使用語法,如時間依賴性:
compile group:'ATG_MODULE', name:'mymodule', version:'10.1.1'
的依賴是由自定義解析器解析。
自定義解析器由我維護,但由於編譯和eclipse插件工作正常,我假設它不是問題的根源。
編輯
正如彼得Niederwieser提到,聲納亞軍僅適用於葉片項目。但是,必須有一種方法來配置Gradle聲納轉輪插件,將層次結構視爲一個平面結構,以便所有項目都是葉項目。在sonar-runner中,您可以在根項目中將sonar.modules設置爲要分析的每個項目的名稱。但是如何在Gradle中做到這一點?
我試圖在每個項目中設置sonar.modules
到null
但這似乎沒有任何影響。
謝謝,這是有道理的。在那種情況下,我如何防止Sonar將它們當作項目樹來對待,而僅僅是一個列表?與sonar.modules屬性有什麼關係?提高這一點是有幫助的,但它並沒有解決我的問題。 –