Java Sonarqube将AOP丢弃视为一个问题

Java Sonarqube将AOP丢弃视为一个问题,java,sonarqube,aop,Java,Sonarqube,Aop,Sonarqube定义了一条规则,规定永远不应抛出一般异常(即抛出专用异常,而不是使用一般异常) 然而,AOPProceedingJoinPoint总是抛出genericThrowable,通常我对异常一点也不感兴趣,只是像这样从方法中抛出它: @Around(...) public void someMethod(ProceedingJoinPoint point) throws Throwable { // do something... point.proceed();

Sonarqube定义了一条规则,规定永远不应抛出一般异常(即抛出专用异常,而不是使用一般异常) 然而,AOPProceedingJoinPoint总是抛出genericThrowable,通常我对异常一点也不感兴趣,只是像这样从方法中抛出它:

@Around(...)
public void someMethod(ProceedingJoinPoint point) throws Throwable {
    // do something...
    point.proceed();
    // do something else...
}

显然,这是违反上述规则的。我真的需要用try-catch和log-the-throwable之类的东西来包装它吗?这方面的最佳实践是什么?

确实,您无法避免使用抛出可抛出的
或普通
异常的库。所以,当你处理这个异常时,总是会违反规则


但是你一定要抓住这个异常,并对它做点什么。具体如何处理它取决于捕获它的应用程序的层。如果它是一个较低的值,那么您可能希望将它封装到您自己的适当异常中。考虑所有其他更高的层不想知道你使用的依赖关系。如果您自己是一个高层,那么您可以记录它或为用户返回正确的消息。我希望这会有所帮助。

您可以安全地将此违规标记为假阳性,并输入描述性注释。这种误报应该非常罕见,可以让您单独对待它们,并采取相应的行动-AoP API是一个很好的例子,遗留和/或编写糟糕的库是另一个例子。但不要将文件添加到排除项中,因为您可能会从Sonar分析中丢失其他规则

作为替代,您可以尝试将排除项添加到pom.xml文件中:*/aspects/**,其中aspects是目标包的名称exclusions是邪恶的,它会使Sonar跳过整个文件,不仅是一个特别的违规行为,谢谢你的回答,但是我现在更倾向于@spi将其标记为假阳性。谢谢你的快速回复。在someMethod()中,我们实现了正确的异常处理。这个AOP更多的是关于收集一些度量标准,应该是一次性的。我们不希望它有任何涉及方法本身的业务逻辑,即使是日志记录。我将接受@spi关于将其标记为假阳性的建议。是的,这是你无论如何都要做的,以满足sonarqube的要求。