Sonarqube 将 AOP Throwable 视为一个问题
Sonarqube treat AOP Throwable as an issue
Sonarqube 定义了一条规则,说 永远不应抛出通用异常 (即抛出专用异常而不是使用通用异常。)
但是 AOP ProceedingJoinPoint 总是抛出泛型 Throwable 并且通常我对异常根本不感兴趣,只是从这样的方法中抛出它:
@Around(...)
public void someMethod(ProceedingJoinPoint point) throws Throwable {
// do something...
point.proceed();
// do something else...
}
显然这违反了上述Sonarqube规则。我真的必须用 try catch 包装它并记录可抛出的东西吗?这方面的最佳做法是什么?
的确,您无法避免使用自己抛出 Throwable
或普通 Exception
的库。因此,当您处理此异常时,总是会违反该规则形成 sonarqube。
但是您绝对应该捕获此异常并对其进行处理。您究竟用它做什么取决于捕获它的应用程序层。如果它较低,那么您可能希望将其包装到您自己的适当异常中。考虑到所有其他更高层都不想知道您使用了哪些依赖项。如果您自己是高层,那么您可以记录它或 return 为用户提供适当的消息。希望对您有所帮助。
您可以安全地将此违规标记为误报并输入描述性评论。这种误报应该很少见,足以让您单独对待它们,并采取相应的行动——AoP API 是一个很好的例子,遗留 and/or 写得不好的库是另一个例子。但不要将文件添加到排除项中,因为您会从 Sonar 分析中丢失其他规则
Sonarqube 定义了一条规则,说 永远不应抛出通用异常 (即抛出专用异常而不是使用通用异常。) 但是 AOP ProceedingJoinPoint 总是抛出泛型 Throwable 并且通常我对异常根本不感兴趣,只是从这样的方法中抛出它:
@Around(...)
public void someMethod(ProceedingJoinPoint point) throws Throwable {
// do something...
point.proceed();
// do something else...
}
显然这违反了上述Sonarqube规则。我真的必须用 try catch 包装它并记录可抛出的东西吗?这方面的最佳做法是什么?
的确,您无法避免使用自己抛出 Throwable
或普通 Exception
的库。因此,当您处理此异常时,总是会违反该规则形成 sonarqube。
但是您绝对应该捕获此异常并对其进行处理。您究竟用它做什么取决于捕获它的应用程序层。如果它较低,那么您可能希望将其包装到您自己的适当异常中。考虑到所有其他更高层都不想知道您使用了哪些依赖项。如果您自己是高层,那么您可以记录它或 return 为用户提供适当的消息。希望对您有所帮助。
您可以安全地将此违规标记为误报并输入描述性评论。这种误报应该很少见,足以让您单独对待它们,并采取相应的行动——AoP API 是一个很好的例子,遗留 and/or 写得不好的库是另一个例子。但不要将文件添加到排除项中,因为您会从 Sonar 分析中丢失其他规则