我的 Java 应用程序需要 org.objectweb.asm 库。我在 pom.xml 中指定了“asm”依赖项。这会将库与应用程序一起部署。应用程序仍然抛出异常 NoClassDefFoundError: org/objectweb/asm/ClassVisitor。
java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor
at com.sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.java:112)
at com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:78)
... many more
我该如何解决这个问题?
详细信息:我使用的是 Glassfish 2.1.1。该应用程序需要 jersey 1.1.4,jersey 需要 asm 3.1。我假设 glassfish 2.1.1 需要 1.1.4 版本
如果我运行 Glassfish updatetool 并在服务器上安装 Jersey,那么我的应用程序加载并运行没有问题。我的客户没有在他们的服务器上安装 Jersey,他们不能使用 updatetool。
Glassfish 2.1.1 updatetool 在 glassfish/lib 目录中安装 jersey 1.1.4 和 asm-3.1.jar。当 jersey 被卸载时,updatetool 也会删除 asm。
如果我将 jersey 和 asm 作为依赖项并部署我的 war 文件,那么 jersey 和 asm jar 将进入本地位置,例如 glassfish/domains/domain1/applications/j2ee-modules/MYAPPNAME/WEB-INF/lib/asm-3.1.jar。
Glassfish updatetool 将 asm 放入 lib 文件夹: glassfish/lib 目录,应用程序开始部署并正常工作。
这是我的 maven pom 文件依赖部分:
<dependencies>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.1.4</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.jersey-test-framework</groupId>
<artifactId>jersey-test-framework-grizzly2</artifactId>
<version>1.17.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
<version>1.0.0.Final</version>
<scope>provided</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>