ASM jar - 为什么我的Java项目依赖它?

11

我有一个Java项目,内部依赖于 asm jar。奇怪的是,我甚至不知道为什么我的项目会依赖于这个库(可能是由Maven作为传递依赖项引入的)?

有人能帮我知道为什么需要 asm jar吗?

提前感谢!

编辑: 您能否还提及一下使用 asm jar 的目的/用例?


1
这就是 ASM:asm.ow2.org - 可用于操纵类文件以测量代码质量。 - Andreas Dolk
安德烈亚斯,如果我没错的话,我们是说asm有助于在JVM中已经加载的字节码中进行一些操纵操作吗? - peakit
4个回答

15

ASM是一个字节码操作框架(参见此页面进行简要介绍),被许多执行字节码操作的工具所使用:使用代理生成和反射的框架(Spring,Hibernate等),模拟框架(EasyMock,JMock等),代码分析工具(PMDFindbugs等)。事实上,ASM项目维护着一个按类别组织的用户列表,可以查看一下。

正如Vincent所提到的,如果你在传递依赖项上依赖ASM,则dependency:tree目标或依赖报告(参见上面的PMD和Findbugs链接)可以帮助分析情况,并找出从哪里来。但这不会考虑你正在使用的maven插件的依赖关系,而只考虑你项目的依赖关系。


4
Maven-2需要asm.jar来编译和运行应用程序。在这里获取更多信息。
由于编程分析、生成和转换技术的多种可能用途,许多针对各种语言(包括Java)的工具已被实现。ASM是Java语言中的其中一种运行时类生成和转换工具,也可以离线使用。因此,ASM1库被设计为可用于编译后的Java类。同时,它还被设计得尽可能快速和精简。快速响应至关重要,这样才不会使动态类生成或转换时使用ASM的应用程序变慢。而尽可能小的尺寸则很重要,这样可以在内存受限的环境中使用,并避免增加使用ASM的小应用程序或库的大小。ASM并非生成和转换编译后Java类的唯一工具,但它是最近也是最有效的工具之一。你可以从http://asm.objectweb.org下载它。其主要优点如下: 1)它具有简单、设计良好且模块化的API,易于使用。 2)它文档完备,并配有Eclipse插件。 3)它提供对最新Java版本(Java 6)的支持。 4)它很小、快速且非常健壮。 5)其庞大的用户社区可以为新用户提供支持。 6)其开源许可证允许你以几乎任何方式使用它。
这个pdf文件中发现。我认为随着Java EE 6的推出,还带来了内置工具ASM用于类生成和转换。该PDF文件详细介绍了ASM。希望这能有所帮助。

@aforloney,那是Maven-PMD插件的依赖项...我没有使用PMD...那么我们为什么需要ASM呢? - peakit
我在网上找到了一份PDF文件,我将其添加到我的帖子中并附上了简介,希望这能有所帮助。 - Anthony Forloney
啊..根据@Andreas_D的说法,汇编语言可以用于检测类文件。@aforloney,这可能就是为什么Maven的PMD插件需要使用它的原因..你怎么看? - peakit
那很有可能是这样,我对Maven非常不熟悉,所以不能确定。 - Anthony Forloney

2

你的项目还有哪些依赖项?我怀疑你决定需要的其中一个jar(例如Spring或Hibernate)本身需要asm.jar吗?


1
Brian,我在我的项目中大量使用Spring.. 但是为什么Spring需要asm呢?只是好奇... - peakit
1
我不知道,我承认。它可能会为方面执行字节码注入,但我会检查一下。 - Brian Agnew

2
可以使用Maven的依赖插件来查看哪些库将asm作为依赖项。 依赖插件

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接