如果您将 AspectJ 编译器与 Aspect 库(例如 Springs)一起使用,并且您没有任何与特定 Aspect 匹配的类,则会得到:
[WARNING] advice defined in org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect has not been applied [Xlint:adviceDidNotMatch]
但是对于这个特定的项目,我不需要这个方面以及其他一些方面。
似乎您可以使用 -Xlint 配置警告,但看起来您只能关闭所有不匹配建议的警告(
adviceDidNotMatch=ignore
)。我真正想做的是排除某些方面,例如org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect
。我似乎找不到排除某个方面的示例。
如果您准备列出要在某种白名单中使用的每个方面,则可以使用
ajc -xmlConfigured myConfig.xml ...
或相应的AspectJ Maven插件参数。为什么这没有在 ajc 使用帮助中列出,我不知道。我以前从未使用过此选项,但现在刚刚测试它并可以确认它是否有效。从 1.6.9 开始它应该在 ajc 中,从 1.5 开始应该在 AspectJ Maven 中。
另请参阅此答案以获取更多信息和示例 XML 文件。 此处还列出了最小样本。
请注意: 必须明确指定选项和 XML 文件名。与 LTW 模式中的 aop.xml 不同,CTW 不会自动选取具有神奇名称的文件。 AspectJ 维护者 Andy Clement here 提到了这一事实。
更新: AJC 选项
-xmlConfigured
现已记录在此处。
补充一下,可以更改aspectj-maven-plugin的adviceDidNotMatch的日志级别
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<artifactId>1.5</artifactId>
<configuration>
<Xlint>adviceDidNotMatch=error,noGuardForLazyTjp=ignore</Xlint>
</configuration>
</plugin>
可能的值:忽略/警告/错误
更新
AFAIK,您只能使用 -
ajc
将外部方面添加到 aspectpath
,这将包括 jar 中的所有方面,因此无法添加包含方面但排除某些方面的 jar,除非您解压缩、删除并创建一个新罐子。