阿里云效平台java代码扫描问题的修复

本文涉及的产品
云效 DevOps 流水线,基础版人数 不受限
云效 DevOps 代码管理,基础版人数 不受限
云效 DevOps 项目协作,基础版人数 不受限
简介: 关于在阿里云效平台进行java代码扫描后 遇到问题的解释以及如何修复。
最近有代码扫描的需求,这里整理以下各种代码扫描规则的解释和如何修复。

扫描出来的结果大概如下图

image.png

image.png

image.png

一:基本说明:

第一部分 summery -摘要部分:

Files Total Blocker/Critical/Major/Minor/Info
文件数量 代码问题数量 从严重到轻微的各代码问题(阻塞/严重/一般/轻微/提示)

这一部分描述整体代码问题的摘要。


第二部分 Rules -问题规则部分:

Rule Violations Severity
具体规则 问题出现数量 严重程度

这部分描述代码具体触发的问题规则和数量。


第三部分 Files -问题具体文件部分:

Files 5/4/3/2/1
具体的文件(带有跳转连接) 从轻到重的问题数量

这部分描述具体的文件和问题级别并带有跳转连接,可以点击文件路径直接跳转到问题详情。


第四部分 Files(detail) -文件具体问题部分:**

violation Error Description Line
问题级别 错误描述 文件中错误位置(行位置)

这部分具体描述了文件触发的代码问题描述和问题在文件中的位置。


二:规则和如何修复:

[AlibabaJavaNaming] 阿里java命名规则

ConstantFieldShouldBeUpperCaseRule

# ConstantFieldShouldBeUpperCaseRule
# Severity: Critical (级别:2级)
# 解释:常量命名应该全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长

# Examples-例子
   
public class ConstantNameDemo {

    /**
    * max stock count
    */
    public static final Long MAX_STOCK_COUNT = 50000L;   

AI 代码解读

PackageNamingRule

# PackageNamingRule
# Severity: Major (级别:3级)
# 解释: 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式

# Examples-例子
com.alibaba.mpp.util / com.taobao.tddl.domain.dto
AI 代码解读

LowerCamelCaseVariableNamingRule

# LowerCamelCaseVariableNamingRule
# Severity: Critical (级别:2级)
#  解释: 方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase,必须遵从驼峰形式
AI 代码解读

ClassNamingShouldBeCamelRule

# ClassNamingShouldBeCamelRule
# Severity: Major (级别:3级)
 
# 解释:类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO / DAO
AI 代码解读

[AlibabaJavaSets] 阿里java集合规则

CollectionInitShouldAssignCapacityRule

# CollectionInitShouldAssignCapacityRule
# Severity: Major (级别:3级)
# 解释:集合初始化时,指定集合初始值大小。

# 说明:HashMap使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可。

# Examples-例子
# 反面教材
Negative example:   
   Map<String, String> map = new HashMap<String, String>();   
# 正面教材
Positive example: 
   Map<String, String> map = new HashMap<String, String>(16); 
AI 代码解读

[AlibabaJavaOop] 阿里java面向对象规则

PojoMustOverrideToStringRule

# PojoMustOverrideToStringRule
# Severity:Major (级别:3级)
# 解释:POJO类必须写toString方法。使用工具类source> generate toString时,如果继承了另一个POJO类,注意在前面加一下super.toString。

# 说明:在方法执行抛出异常时,可以直接调用POJO的toString()方法打印其属性值,便于排查问题。

# Examples-例子
public class ToStringDemo extends Super{
        private String secondName;

        @Override
        public String toString() {
            return super.toString() + "ToStringDemo{" + "secondName='" + secondName + '\'' + '}';
        }
    }

    class Super {
        private String firstName;

        @Override
        public String toString() {
            return "Super{" + "firstName=" + firstName + '\'' + '}';
        }
    } 

AI 代码解读

PojoMustUsePrimitiveFieldRule

# PojoMustUsePrimitiveFieldRule
# Severity: Major (级别:3级)
# 解释:
#   关于基本数据类型与包装数据类型的使用标准如下:
# 1) 所有的POJO类属性必须使用包装数据类型。
# 2) RPC方法的返回值和参数必须使用包装数据类型。
# 3) 所有的局部变量推荐使用基本数据类型。

# 说明:POJO类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值,任何NPE问题,或者入库检查,都由使用者来保证。

#Examples-例子
 
public class DemoDO {
        String str;
        Integer a;
}   
AI 代码解读

[AlibabaJavaFlowControl] 阿里java流控制规则

NeedBraceRule

# NeedBraceRule
# Severity: Blocker (级别:1级)
# 解释: 在if/else/for/while/do语句中必须使用大括号,
#   即使只有一行代码,避免使用下面的形式:if (condition) statements;

# Examples-例子
if (flag) {
            System.out.println("hello world");
}  
AI 代码解读

AvoidComplexConditionRule

# AvoidComplexConditionRule
# Severity: Major (级别:3级)
# 解释:除常用方法(如getXxx/isXxx)等外,不要在条件判断中执行复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量,以提高可读性。

# 说明:很多if语句内的逻辑相当复杂,阅读者需要分析条件表达式的最终结果,才能明确什么样的条件执行什么样的语句,那么,如果阅读者分析逻辑表达式错误呢?

# Examples-例子
# 反面教材
Negative example:
    if ((file.open(fileName, "w") != null) && (...) || (...)) {
        // ...
    }   
#正面教材
Positive example:
    boolean existed = (file.open(fileName, "w") != null) && (...) || (...);
    if (existed) {
        //...
    }   
AI 代码解读

[AlibabaJavaConstants] 阿里java常量规则

UndefineMagicConstantRule

# UndefineMagicConstantRule
# Severity:Major (级别:3级)
# 解释:不允许任何魔法值(即未经定义的常量)直接出现在代码中。

# Examples-例子
# 反面教材
Negative example:
    //Magic values, except for predefined, are forbidden in coding.
    if (key.equals("Id#taobao_1")) {
            //...
    }
# 正面教材:先创建一个常量并赋值给它,再用这个常量进行比较。
Positive example:
    String KEY_PRE = "Id#taobao_1";  
    if (KEY_PRE.equals(key)) {
            //...
    }  
AI 代码解读

[AlibabaJavaComments] 阿里java注释规则

EnumConstantsMustHaveCommentRule

# EnumConstantsMustHaveCommentRule
# Severity: Critical (级别:2级)
# 解释:所有的枚举类型字段必须要有注释,说明每个数据项的用途。

# Examples-例子
public enum TestEnum {
        /**
         * agree
         */
        agree("agree"),
        /**
         * reject
         */
        reject("reject");
        
        private String action;
    
        TestEnum(String action) {
            this.action = action;
        }
    
        public String getAction() {
            return action;
        }
    }   
AI 代码解读

AvoidCommentBehindStatementRule

# AvoidCommentBehindStatementRule

# Severity:Major (级别:3级)

# 解释:方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释。注意与代码对齐。

# Examples-例子
public void method() {
        // Put single line comment above code. (Note: align '//' comment with code)
        int a = 3;
    
        /**
        * Some description about follow code. (Note: align '/**' comment with code)
        */
        int b = 4;
    }   
AI 代码解读

CommentsMustBeJavadocFormatRule

# CommentsMustBeJavadocFormatRule

# Severity:Major (级别:3级)

# 解释:类、类属性、类方法的注释必须使用javadoc规范,使用/**内容*/格式,不得使用//xxx方式和/*xxx*/方式。

# 说明:在IDE编辑窗口中,javadoc方式会提示相关注释,生成javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。

# Examples-例子
    /**
     * 
     * XXX class function description.
     *
     */
    public class XxClass implements Serializable {
        private static final long serialVersionUID = 113323427779853001L;
        /**
         * id
         */
        private Long id;
        /**
         * title
         */
        private String title;
    
        /**
         * find by id
         * 
         * @param ruleId rule id
         * @param page start from 1
         * @return Result<Xxxx>
         */
        public Result<Xxxx> funcA(Long ruleId, Integer page) {
            return null;
        }
    }   
AI 代码解读

AbstractMethodOrInterfaceMethodMustUseJavadocRule

# AbstractMethodOrInterfaceMethodMustUseJavadocRule
# Severity:Major  (级别:3级)
# 解释:全部的抽象方法(包括接口中的方法)必需要用javadoc注释、除了返回值、参数、异常说明外,还必须指出该方法作什么事情,实现什么功能。

# Examples - 例子
/** * fetch data by rule id * * @param ruleId rule id * @param page page number * @param jsonContext json format context * @return Result<XxxxDO> */
    Result<XxxxDO> fetchDataByRuleId(Long ruleId, Integer page, String jsonContext);
AI 代码解读

ClassMustHaveAuthorRule

# ClassMustHaveAuthorRule
# Severity:Major (级别:3级)
# 解释:所有的类都必须添加创建者信息。

# 说明:在设置模板时,注意IDEA的@author为${USER},而eclipse的@author为${user},大小写有区别,而日期的设置统一为yyyy/MM/dd的格式。

# Examples-例子
/**
     * Demo class
     * 
     * @author keriezhang
     * @date 2016/10/31
     */
    public class CodeNoteDemo {
    }   
AI 代码解读

RemoveCommentedCodeRule

Name
   RemoveCommentedCodeRule

Severity:Major (级别:3级)

# 解释:及时清理不再使用的代码段或配置信息。

# 说明:对于垃圾代码或过时配置,坚决清理干净,避免程序过度臃肿,代码冗余。

# Examples
# 正面教材:如果一些代码被注释,但可能还要启用,则在注释代码前加一行注释说明
Positive example: For codes which are temporarily removed and likely to be reused, use /// to add a reasonable note.
 public static void hello() {
    /// Business is stopped temporarily by the owner.
    // Business business = new Business();
    // business.active();
    System.out.println("it's finished");
}   
AI 代码解读

[AlibabaJavaOthers] 阿里java其他规则

AvoidApacheBeanUtilsCopyRule

# AvoidApacheBeanUtilsCopyRule
# Severity: Blocker (级别:1级)
# 解释:避免用Apache Beanutils进行属性的copy。

# 说明:Apache BeanUtils性能较差,可以使用其他方案比如Spring BeanUtils, Cglib BeanCopier。

# Examples-例子
   
TestObject a = new TestObject();
    TestObject b = new TestObject();
    a.setX(b.getX());
    a.setY(b.getY());   
AI 代码解读

AvoidNewDateGetTimeRule

# AvoidNewDateGetTimeRule
# Severity: Blocker (级别)
# 解释:获取当前毫秒数:System.currentTimeMillis(); 而不是new Date().getTime();

# 说明:如果想获取更加精确的纳秒级时间值,用System.nanoTime。在JDK8中,针对统计时间等场景,推荐使用Instant类。

# Examples-例子
   
public class TimeMillisDemo {
        public static void main(String args[]) {
            // Positive example-正面教材
            long a = System.currentTimeMillis();
            // Negative example-反面教材
            long b = new Date().getTime();
    
            System.out.println(a);
            System.out.println(b);
        }
    }   

AI 代码解读

MethodTooLongRule

# MethodTooLongRule
# Severity:Major (级别:3级)
# 解释:单个方法的总行数不超过80行。

# 说明:包括方法签名、结束右大括号、方法内代码、注释、
   空行、回车及任何不可见字符的总行数不超过80行。
AI 代码解读
以上规范不全,仅为遇到的规范,更多规范见下文
文中使用了以下资料
阿里巴巴代码规范: https://blog.csdn.net/WeiHao0240/article/details/88555558
相关实践学习
2分钟自动化部署2048小游戏到ECS
在短短2分钟内,即可实现2048小游戏的ECS自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
相关文章
快手小红书抖音留痕工具,自动留痕插件工具,java代码开源
这个框架包含三个核心模块:主操作类处理点赞评论、配置管理类和代理管理类。使用时需要配合
tiktok群控脚本,养号关注私信点赞脚本插件,java代码分享
这个代码模拟了一个社交机器人的基本行为模式,包括登录、关注、点赞、私信等操作。请注意
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
112 1
Java 面试资料中相关代码使用方法与组件封装方法解析
这是一份详尽的Java面试资料代码指南,涵盖使用方法与组件封装技巧。内容包括环境准备(JDK 8+、Maven/Gradle)、核心类示例(问题管理、学习进度跟踪)、Web应用部署(Spring Boot、前端框架)、单元测试及API封装。通过问题库管理、数据访问组件、学习进度服务和REST接口等模块化设计,帮助开发者高效组织与复用功能,同时支持扩展如用户认证、AI推荐等功能。适用于Java核心技术学习与面试备考,提升编程与设计能力。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
70 6
Java 面试资料中相关代码使用方法与组件封装方法解析
Java 期末考试救急必备涵盖绝大多数核心考点及五大类经典代码助你过关
本文为Java期末考试复习指南,涵盖基础语法、面向对象编程、异常处理、文件操作、数据库连接五大核心考点,提供详细解析与实用代码示例,助力快速掌握重点,高效备考,轻松应对考试。
26 0
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
294 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
阿里腾讯互联网公司校招 Java 面试题总结及答案解析
本文总结了阿里巴巴和腾讯等互联网大厂的Java校招面试题及答案,涵盖Java基础、多线程、集合框架、数据库、Spring与MyBatis框架等内容。从数据类型、面向对象特性到异常处理,从线程安全到SQL优化,再到IOC原理与MyBatis结果封装,全面梳理常见考点。通过详细解析,帮助求职者系统掌握Java核心知识,为校招做好充分准备。资源链接:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
53 2
基于Java 17 + Spring Boot 3.2 + Flink 1.18的智慧实验室管理系统核心代码
这是一套基于Java 17、Spring Boot 3.2和Flink 1.18开发的智慧实验室管理系统核心代码。系统涵盖多协议设备接入(支持OPC UA、MQTT等12种工业协议)、实时异常检测(Flink流处理引擎实现设备状态监控)、强化学习调度(Q-Learning算法优化资源分配)、三维可视化(JavaFX与WebGL渲染实验室空间)、微服务架构(Spring Cloud构建分布式体系)及数据湖建设(Spark构建实验室数据仓库)。实际应用中,该系统显著提升了设备调度效率(响应时间从46分钟降至9秒)、设备利用率(从41%提升至89%),并大幅减少实验准备时间和维护成本。
111 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问