該Sonarsource項目是Java項目的代碼分析儀,可幫助開發人員生產乾淨的代碼。有關Java功能分析的信息,請參見此處。
要提供反饋(請求功能,報告錯誤等)使用Sonar社區論壇。請不要忘記指定語言(Java!),插件版本和Sonarqube版本。
如果您對如何使用插件(並且文檔無濟於事)有一個疑問,我們也鼓勵您使用社區論壇。
要請求新功能,請在Sonarqube社區論壇中創建一個新線程。即使您打算自己實施並將其提交給社區,請首先啟動一個新線程,以確保我們可以使用它。
要提交貢獻,請為此存儲庫創建拉動請求。請確保您遵循我們的代碼樣式,並且所有測試都通過(所有檢查都必須是綠色的)。
如果您有規則的想法,但是您不確定每個人都需要它,您可以實現僅適用於您的自定義規則。請注意,為了幫助您,我們強烈建議您先遵循自定義規則101教程,然後直接從頭開始實施規則。
您想全職從事這個項目嗎?我們正在招聘!查看https://www.sonarsource.com/hiring
要在本地運行測試,請遵循以下說明。
您需要Java 22來構建項目, Java 17運行集成測試(ITS)。
Java 17可用於構建和測試所有模塊,除了需要Java 22 java-checks-test-sources 。Java 22可用於構建和測試所有模塊,但由於SQ不兼容its需要Java 17 。要構建插件並運行其單元測試,請從項目的根目錄中執行此命令:
mvn clean install
由於使用Maven構建項目的方式,IDE內的運行單元測試可能會在某些問題中產生。如果您看到這樣的東西:
java.lang.SecurityException: class ... signer information does not match signer information of other classes in the same package
嘗試刪除“ JDT”模塊的Maven性質。
要運行集成測試,您將需要創建一個如下所示的屬性文件,並將指向其位置的URL設置為名為ORCHESTRATOR_CONFIG_URL的環境變量。
# version of SonarQube Server
sonar.runtimeVersion=LATEST_RELEASE
orchestrator.updateCenterUrl=http://update.sonarsource.org/update-center-dev.properties
# The location of the Maven local repository is not automatically guessed. It can also be set with the env variable MAVEN_LOCAL_REPOSITORY.
maven.localRepository=/home/myName/.m2/repository
ORCHESTRATOR_CONFIG_URL
export ORCHESTRATOR_CONFIG_URL=file:///home/user/workspace/orchestrator.properties
在運行ITS之前,請確保設置您的Maven_home環境變量。
“理智測試”是一項測試,可以在所有測試源文件上運行所有檢查,而無需考慮分析的結果。它驗證規則不會在我們的測試源中的任何文件上崩潰。默認情況下,該測試被排除在構建中。啟動它:
mvn clean install -P sanity
“插件測試”是一個集成測試套件,可驗證插件功能,例如度量計算,覆蓋範圍等。啟動它:
mvn clean install -Pit-plugin -DcommunityEditionTestsOnly=true
註釋內部貢獻者:為了執行取決於Sonarqube Enterprise Edition的測試,請使用:
mvn clean install -Pit-plugin
“統治測試”是一個集成測試套件,該套件啟動了大型代碼基礎的分析,保存了插件在報告文件中創建的問題,然後將這些結果與預期問題集(存儲為JSON文件)進行比較。
要運行測試,請首先確保檢查子模型:
git submodule update --init --recursive
然後,確保為裁定測試執行設置JAVA_HOME環境變量,並指向您本地的JDK 17安裝。如果不這樣做會產生與預期結果的不一致之處。
從its/ruling文件夾中,啟動統治測試:
mvn clean install -Pit-ruling -DcommunityEditionTestsOnly=true
# Alternatively
JAVA_HOME=/my/local/java17/jdk/ mvn clean install -Pit-ruling -DcommunityEditionTestsOnly=true
註釋內部貢獻者:為了執行取決於Sonarqube Enterprise Edition的測試,請使用:
mvn clean install -Pit-ruling
該測試使您有機會檢查每個規則所造成的問題,並確保它們是您的期望。任何實施規則都很可能會在我們用作統治代碼基礎的多個項目上提出問題。
對於新實施的規則,這意味著首先構建很可能會失敗,這是由於預期結果(沒有新規則的任何值)和新結果之間的差異引起的。您可以通過在以下文件夾中搜索以您的規則( squid-SXXXX.json )命名的文件來檢查這些新問題:
/path/to/project/sonar-java/its/ruling/target/actual/...
對於經過修改的現有規則,您可能會期望“實際”(來自新的分析)和預期結果之間存在一些差異。仔細審查顯示的更改,並相應地更新預期資源。
所有json文件都包含一個線條列表,該線路列表由文件索引,解釋了特定規則提出的問題的位置。如果/當一切對您來說都不錯時,您可以將文件複製到以下位置的實際問題:
its/ruling/target/actual/
進入目錄的預期問題:
its/ruling/src/test/resources/
例如使用命令:
cp its/ruling/target/actual/* its/ruling/src/test/resources/
Autoscan模塊中的測試旨在檢測Java Analyzer可以在有或沒有字節碼的情況下發現的問題之間的差異。這裡的目的是發現並確定潛在的FPS,並驗證Sonarcloud的自動分析中顯示的預期FN。
運行此測試可以分2個步驟分解:
確保已編譯了java-checks-tests-sources模塊(即: java-checks-tests-sources/target/最新的.class文件是最新的)。
如有疑問,請使用java-checks-tests-sources模塊並運行:
# Use java 22!
mvn clean compile要運行測試,請移動到its/autoscan文件夾並運行:
# cd its/autoscan
# use Java 17!
mvn clean package --batch-mode --errors --show-version
--activate-profiles it-autoscan
-Dsonar.runtimeVersion=LATEST_RELEASE在測試執行過程中產生的工件將在its/autoscan/target/actual中找到。您將要比較在Autoscan-Diff-rules中產生的結果
有關更詳細的信息,您可以通過比較兩個相應的文件夾來比較使用字節面和無字節的結果之間的差異:
根據發現的結果,您可能需要更新地面真相。預期結果在SRC/測試/資源中列出。
您可以通過在運行測試時添加-Dmaven.binary=mvnDebug作為選項來調試其。這將導致分析儀JVM在繼續之前等待調試器。
版權2012-2024 Sonarsource。
Sonarqube Analyzers於2024年11月29日發布(包括先前版本的補丁修復程序)發佈在Sonar源可用許可證版本1(SSALV1)下。
有關指定適用於每個文件的許可的詳細信息,請參見各個文件。符合SSALV1的文件將在其標題中註意到。