2013-06-12 45 views
6

我有一個多模塊的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.modulesnull但這似乎沒有任何影響。

回答

5

Sonar Runner(與Gradle集成)只能分析葉項目中的代碼。如果您希望看到支持分析非葉項目中的代碼,請ping Sonar人員。

+0

謝謝,這是有道理的。在那種情況下,我如何防止Sonar將它們當作項目樹來對待,而僅僅是一個列表?與sonar.modules屬性有什麼關係?提高這一點是有幫助的,但它並沒有解決我的問題。 –