如何检查 jar 中是否包含建议

how to check if a jar has advice woven into it

我们有一个 jar 文件,我们希望其中包含交易建议。但是,当我们部署这个 jar 并在运行时期间,我们不断得到 "Unable to locate current JTA transaction"。表明该建议不正确可用。

我找不到任何文章或博客或 material 讨论 verifying/checking 如果方面实际上被编织到一个 jar 文件中。

如果已经有任何页面讨论这个,请指出它。

提前致谢。

使用 javap 工具,您可以验证 class 是否已由 AspectJ 编织。为了快速检查 class 是否在任何地方编织,请检查 class 是否具有 WeaverVersion 属性:

javap -private -verbose com.foo.SomeClass

...
org.aspectj.weaver.WeaverVersion: length = 0xC
 00 07 00 00 00 00 01 4F B3 FA 4E D0 
...

要验证 class 文件中的各个位置是否已编织,请重复 javap 命令,但在输出中查找您希望编织的方法 - 这些方法是否调用 ajc$ 名称前缀方法?这些将代表对 AspectJ 建议的调用。

虽然最简单的判断方法可能是使用 -showWeaveInfo 在首先编译系统并生成编织罐时,出现的编织信息消息是否指示您希望编织的位置?

另一种选择是从 .jar/.war 中提取实体 .class 文件,预计将被编织并使用 IntelliJ 打开它。 IDE 使用 Java 字节码反编译器将 class 文件显示为可读 .java 文件。

接下来查看是否织入,只看实现的接口。您将得到如下内容:

public class MyEntity implements Cloneable, PersistenceWeaved, PersistenceEntity, PersistenceObject, FetchGroupTracker, PersistenceWeavedFetchGroups, PersistenceWeavedLazy, ChangeTracker, PersistenceWeavedChangeTracking, PersistenceWeavedRest {
    ...
}