该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的文件将在其标题中注意到。