浏览代码

修改代码质量检测规则说明

aokunsang 1 月之前
父节点
当前提交
4a8057fcb0
共有 3 个文件被更改,包括 50 次插入21 次删除
  1. 25 0
      platomix-docker/doc/ali-pmd.xml
  2. 21 4
      platomix-docker/doc/sonar.md
  3. 4 17
      platomix-pom/pom.xml

+ 25 - 0
platomix-docker/doc/ali-pmd.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="alibaba-pmd"
+         xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
+         xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
+    <rule ref="rulesets/java/ali-concurrent.xml"/>
+    <rule ref="rulesets/java/ali-comment.xml"/>
+    <rule ref="rulesets/java/ali-naming.xml">
+        <exclude name="ArrayNamingShouldHaveBracketRule"/>
+    </rule>
+    <rule ref="rulesets/java/ali-constant.xml">
+        <exclude name="UpperEllRule"/>
+        <exclude name="UndefineMagicConstantRule"/>
+    </rule>
+    <rule ref="rulesets/java/ali-other.xml"/>
+    <rule ref="rulesets/java/ali-orm.xml"/>
+    <rule ref="rulesets/java/ali-exception.xml"/>
+    <rule ref="rulesets/java/ali-oop.xml">
+        <exclude name="EqualsAvoidNullRule"/>
+        <exclude name="WrapperTypeEqualityRule"/>
+    </rule>
+    <rule ref="rulesets/java/ali-set.xml"/>
+    <rule ref="rulesets/java/ali-flowcontrol.xml">
+        <exclude name="NeedBraceRule"/>
+    </rule>
+</ruleset>

+ 21 - 4
platomix-docker/doc/sonar.md

@@ -102,7 +102,7 @@ node {
 }
 ```
 
-### 4. 【后端开发】idea添加sonar插件
+### 4. ~~【后端开发】idea添加sonar插件~~
 1. 插件市场名字:SonarQube for IDE, 别名:SonarLint  
    [插件官网地址](https://plugins.jetbrains.com/plugin/7973-sonarqube-for-ide)  
    配置了远程SonarQube的hostUrl和token以后可以使用。  
@@ -112,7 +112,10 @@ node {
 - git提交代码之前sonarLint会提示代码commit的代码有哪些问题。  
 【目的】:做到提前修复,避免在jenkins部署时候出现一堆需要修改的代码耽误部署时间。
 
-### 5. 【后端开发】sonar-maven-plugin插件安装使用
+> (1)该插件只能检测sonarqube默认的规则,不能检测阿里巴巴的基于pmd的p3c规则, 原因:https://blog.csdn.net/weixin_42617348/article/details/81170166;  
+> (2)开发过程中,要通过maven的sonar插件规则校验。
+
+### ~~5. 【后端开发】sonar-maven-plugin插件安装使用~~
 maven配置参考官网
 [8.9版本](https://docs.sonarsource.com/sonarqube-server/8.9/analyzing-source-code/scanners/sonarscanner-for-maven/)
 [最新版本](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/scanners/sonarscanner-for-maven/)  
@@ -120,12 +123,26 @@ maven配置参考官网
 * pom.xml升级parent依赖,com.platomix:platomix-pom:1.2.2;
 * 执行命令`mvn clean package sonar:sonar` 或者 直接使用sonar-scanner软件扫描。
 
-### 6. 【前端开发】vscode添加sonar插件
+### 6. 【后端开发】maven-pmd-plugin插件安装使用
+1. 每个项目的根目录下放置[ali-pmd.xml](ali-pmd.xml)文件;
+2. pom.xml升级parent依赖,com.platomix:platomix-pom:1.2.4;
+3. 开发过程中,通过idea的Alibaba Java Code Guidelines插件扫描,然后通过clean package时,会通过maven-pmd-plugin插件检测代码(检测规则与插件差不多,比插件会少一些)。
+
+> 问:为什么JAVA后端不使用sonar插件结合SonarQube服务做静态代码检测?  
+> 答:主要原因是想使用ali-p3c代码校验规则,导致在开发过程中无法快捷方便的检测,详细情况如下:  
+> (1) SonarQube支持基于pmd的p3c代码规则,但是IDEA插件SonarLint不支持【仅支持SonarQube的默认规则,原因:https://blog.csdn.net/weixin_42617348/article/details/81170166】,导致开发过程中不能便捷检测;    
+> (2) maven-sonar-plugin支持检测p3c代码规则,不过每次都需要执行sonar:sonar命令,返回一个报告地址,需要去SonarQube服务页面上查看检测结果;  
+> (3) jenkins通过maven-sonar-plugin插件可以集成sonar静态代码检测,并且可以阻塞获取检测结果,成功:进入下一个节点;失败:停止部署发版;  
+> (4) IDEA的Alibaba Java Code Guidelines插件是专门检测p3c代码规则的,检测规则在ali-pmd.xml文件中(做了一些修改,去掉了一些规则,比如:UndefineMagicConstantRule);  
+> (5) maven-pmd-plugin通过ali-pmd.xml可以与IDEA的Alibaba Java Code Guidelines插件保持相对一致的代码检测规则,这样在开发和发版过程都可以方便快捷的解决代码质量问题。  
+> ==========综上:最后选择使用maven-pmd-plugin插件配合自定义的代码检测规则ali-pmd.xml来做静态代码检测。==========
+
+### 7. 【前端开发】vscode添加sonar插件
 1. 插件市场名字:SonarQube for IDE: Visual Studio Code (formerly SonarLint)  
 [插件官网地址](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarlint-vscode)  
 **注意:** 下载sonarLint的版本要与sonarQube服务端版本(版本号:8.9)匹配,否则使用不了,插件作用参考4。
 
-### 7. 【前端开发】sonar-scanner扫描
+### 8. 【前端开发】sonar-scanner扫描
 1. 安装sonnar-scanner软件包 [下载地址](https://docs.sonarsource.com/sonarqube-server/8.9/analyzing-source-code/scanners/sonarscanner/)  
 2. 配置环境变量  
 ```

+ 4 - 17
platomix-pom/pom.xml

@@ -7,7 +7,7 @@
 	<artifactId>platomix-pom</artifactId>
 	<packaging>pom</packaging>
 
-	<version>1.2.3</version>
+	<version>1.2.4</version>
 	<name>platomix-pom</name>
 
 	<url>http://www.platomix.net/</url>
@@ -65,11 +65,6 @@
 		<docker.plugin.version>0.40.3</docker.plugin.version>
 		<docker.registry>docker.platomix.net:10000</docker.registry>
 		<docker.namespace>platomix</docker.namespace>
-
-		<sonar.scanner.plugin.version>3.8.0.2131</sonar.scanner.plugin.version>
-		<sonar.login>8c31d6b3a1b0680b07eb009d68398bc8495c74f9</sonar.login>
-		<sonar.verbose>true</sonar.verbose>
-		<sonar.host.url>http://121.204.249.37:9100</sonar.host.url>
 	</properties>
 
 	<dependencies>
@@ -291,12 +286,13 @@
 					</compilerArgs>
 				</configuration>
 			</plugin>
-			<!-- sonar的代码质量检测,jenkins发版时候会校验 -->
+			<!-- sonar的代码质量检测,jenkins发版时候会校验
 			<plugin>
 				<groupId>org.sonarsource.scanner.maven</groupId>
 				<artifactId>sonar-maven-plugin</artifactId>
 				<version>${sonar.scanner.plugin.version}</version>
 			</plugin>
+			-->
 			<!-- 添加基于p3c的pmd静态代码质量检测 -->
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
@@ -306,16 +302,7 @@
 					<verbose>true</verbose>
 					<!-- 规范的配置 -->
 					<rulesets>
-						<ruleset>rulesets/java/ali-comment.xml</ruleset>
-						<ruleset>rulesets/java/ali-concurrent.xml</ruleset>
-						<ruleset>rulesets/java/ali-constant.xml</ruleset>
-						<ruleset>rulesets/java/ali-exception.xml</ruleset>
-						<ruleset>rulesets/java/ali-flowcontrol.xml</ruleset>
-						<ruleset>rulesets/java/ali-naming.xml</ruleset>
-						<ruleset>rulesets/java/ali-oop.xml</ruleset>
-						<ruleset>rulesets/java/ali-orm.xml</ruleset>
-						<ruleset>rulesets/java/ali-other.xml</ruleset>
-						<ruleset>rulesets/java/ali-set.xml</ruleset>
+						<ruleset>${project.basedir}/ali-pmd.xml</ruleset>
 					</rulesets>
 					<printFailingErrors>true</printFailingErrors>
 <!--					<excludes>-->