SonarQube 规则不应使用“com.sun.*”和“sun.*”包中的类

问题描述 投票:0回答:2

我有一个具有以下特征的 J2EE 项目:

CDI 1.0
Dynamic Web Module 3.0
Java 1.7 (it's being changed to 1.8)
JSF 2.0
JPA 2.0

我正在运行 SonarQube 5.6.6 规则,它感觉符合规则

不应使用“com.sun.”和“sun.”包中的类
鱿鱼:S1191

com.sun.* 和 sun.* 包中的类被视为实现细节,而不是 Java API 的一部分。当迁移到新版本的 Java 时,它们可能会导致问题,因为没有向后兼容性保证。此类类几乎总是由应该使用的 Java API 类包装。

因为我正在使用类 com.sun.faces.application.ApplicationAssociatecom.sun.faces.application.ApplicationResourceBundle.

我已经搜索了有关此问题的其他线程,其中大多数人说我应该更改规则以排除特定的包或类。

我认为简单地规避规则是没有意义的,所以我想知道这些 sun 类是否实际上有 java API(1.7 或 1.8)类。

如果没有,我相信最好保持警惕,直到 Java API 类可用于这些 sun 类。

对此有什么提示/建议吗?

java jsf jakarta-ee sonarqube
2个回答
19
投票

这是 SonarQube 中的一个错误。正如

Why Developers Should Not Write Programs That Calls 'sun' Packages
中提到的那样,它过度概括了 sun.* 包到
com.sun.*
包。这是不正确的。 Oracle 在上面链接的文章中并不是有意这么说的。 SonarQube 实际上应该只惩罚使用
sun.*
包或任意 JRE/JDK 实现内部使用的任何内容。
com.sun.*
包与 JRE/JDK API/impl 完全无关。

关闭 S1191 规则,或将

com.sun.*
上的所有命中标记为误报。

另请参阅:


0
投票

至少从 2021 年开始,您可以包含要从规则中排除的软件包列表。 (参见https://community.sonarsource.com/t/java-s1191-false-positive-for-com-sun-jersey/42060/3

可以转到 Sonarqube 中的规则页面 (java:S1191) 并在适当的质量配置文件中修改它来更改此排除列表。

© www.soinside.com 2019 - 2024. All rights reserved.