2013-08-21 31 views
1

我的Java应用程序需要org.objectweb.asm库。我在pom中指定了'asm'依赖项。将图书馆与应用程序一起部署。应用程序仍会抛出异常NoClassDefFoundError:org/objectweb/asm/ClassVisitor。NoClassDefFoundError。如何设置依赖关系并部署一个Java应用程序?

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。该应用需要运动衫1.1.4,运动衫需要运动员3.1。我认为1.1.4版本是2.1.1的GlassFish

要求如果我运行的Glassfish updatetool并在服务器上安装泽西然后我的应用程序加载并没有问题运行。我的客户没有在他们的服务器上安装Jersey,他们不能使用updatetool。

Glassfish的2.1.1 updatetool安装球衣1.1.4和ASM-3.1.jar在GlassFish中/ lib目录下。 卸载运动衫时,updatetool也会删除asm。

如果我包括球衣和ASM的依赖和部署我的war文件然后球衣和ASM罐子进入本地位置,例如的glassfish /域/域1 /应用/ J2EE模块/ 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> 
+0

由于某些原因POM文件的部分内容从最初的文章中丢失。这包括'asm'依赖。我再次将POM标记为代码并重新保存该帖子。 – dmitri

回答

2

我曾与存储在GlassFish的/ lib文件夹中的旧球衣库发生冲突:

glassfish/lib/jersey-bundle-1.0.3.1.jar 

它被加载和使用,而不是放置在应用程序本地文件夹中的jar:从“LIB”文件夹

glassfish/domains/domain1/applications/j2ee-modules/MYAPPNAME/WEB-INF/lib/ 

新泽西罐子一直在寻找相同的“LIB”文件夹“汇编”库,因此我的地方放置ASM-3.1.jar从未发现。

我预计,“本地”罐子第一次加载。显示搜索顺序不同。 这是真的吗?请告诉我,如果我错了。

我通过验证该库使用下面的代码中发现的问题:

logger.debug(PackagesResourceConfig.class.getResource("PackagesResourceConfig.class")); 

注意,在抛出的异常上市PackagesResourceConfig类。

希望这个答案可以帮助别人节省时间。

0

尝试类似的东西在你的POM:

<dependency> 
    <groupId>asm</groupId> 
    <artifactId>asm</artifactId> 
    <version>3.3.1</version> 
    </dependency> 
+0

我试过了,版本3.1除外。没有帮助。 – dmitri

+1

检查是否: - 已部署的lib文件夹包含与target/app.war/WEB-INF/lib相同的jar文件。 - 您的maven中没有两个版本的asm.jar和一些冲突版本。 (这是我的错误) – LePeruvien

+0

检查。他们是一样的。 – dmitri

相关问题