Maven下java.lang.NoClassDefFoundError
本文转载自:http://blog.csdn.net/qqhjqs/article/details/51491516
使用maven管理web项目中jar包之间的依赖,非常的方便好用,但是有时也会出现问题
项目里用net.sf.json
使用maven配置了以下jar包
jakarta commons-lang 2.5
jakarta commons-beanutils 1.8.0
jakarta commons-collections 3.2.1
jakarta commons-logging 1.1.1
ezmorph 1.0.6
如果将以上的jar包放在非maven管理的项目里的lib下,不会出现任何问题
但是在maven下,当代码跑到
JSONObject.from(str)的时候,控制台报错,错误内容如下:
java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2496)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:860)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1302)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
at com.iquant.simulated.messaging.StrategyManageTopicListener.processMessage(StrategyManageTopicListener.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
刚开始我以为是包没有下载成功,或者是版本不对,当时按着这个思路,搞了大半天,确定jar包都下载了,版本也都对。
突然想到,将字符串抽出来,在main方法里跑一下,看是否成功,结果和我想的一样,是成功的,那也就是说在web运行的过程中
"找不到相关的包"
按照这个思路走了下去各种百度各种查。
然后我去tomcate发布目录下将项目的web-inf里的lib打开
查看里面有没有包含找不到的包---没有
然后看了看pom.xml配置文件commons-lang的配置语句
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
<scope>provided</scope>
</dependency></span>
<scope>provided</scope> 去掉之后成功!
总结了以下,关于maven下的项目,如果出现jar包的问题,应该这样查
是否下载完整---可以将该jar包坐在的文件,删除重新下载
是否版本一致---可以全局定义一个version,下载相关使用version
是否被打包---查看tomcat文件下对应项目中的webinf-lib下有没有对应的jar包,然后在看看pom.xml中是怎样配置的
maven对jar包使用的范围有一些规定
即在jar包配置的后面添加<scope>[compile ,provided,runtime,test,system ]</scope>
| 名称 | 解释 |
| compile (编译范围) | compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。 编译范围依赖在所有的classpath 中可用,同时它们也会被打包。 |
| provided (已提供范围) | provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。 例如, 如果你开发了一个web 应用,你可能在编译classpath 中需要 可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。 它们不是传递性的,也不会被打包。 |
| runtime (运行时范围) | runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。 比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现 |
| test (测试范围) | test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。 |
| system (系统范围) | system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库 的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。 如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。 |
Maven下java.lang.NoClassDefFoundError的更多相关文章
- Maven项目java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger报错
本文转载自:http://www.javaweb1024.com/info/894.jspx maven管理的项目,里面已经引入了log4j的包 maven引入如下: <dependency&g ...
- Android 编程下 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 报错
使用了极光推送的 jar 包项目在从 SVN 中检出后,假设不又一次对 jar 包和 Bulid Path 进行配置就会抛出 java.lang.NoClassDefFoundError: cn.jp ...
- Eclipse下执行main函数报java.lang.NoClassDefFoundError的解决
今天执行eclipse下的一个java类,无论run还是debug,都报java.lang.NoClassDefFoundError.而且把main中函数都注释掉,执行还是报一样的错. 检查了一下这个 ...
- idea创建maven项目报错,Error initializing: org.codehaus.plexus.velocity.DefaultVelocityComponent@56da52a7 java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
学着使用idea,想创建个maven项目,但是出师不利,立马报错,贼尴尬,错误信息如下: D:\Develop\JDK\bin\java.exe -Dmaven.multiModuleProjectD ...
- 报错:maven:java.lang.NoClassDefFoundError: org/apache/commons/io/Charsets
运行报错: maven:java.lang.NoClassDefFoundError: org/apache/commons/io/Charsets 找不到Charsets这个类 上网查了以后,是因为 ...
- maven命令行创建web项目报错:java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
早上一上班就想新建一个web项目玩玩,没想到一敲命令创建就失败了,真是出师不利.各种折腾无果,当然我也可以用eclipse直接创建的,就是不甘心被这破问题给耍了.刚刚才发现问题原因,这个结果我也是醉了 ...
- maven的坑: Exception in thread "pool-1-thread-1" java.lang.NoClassDefFoundError: org/eclipse/aether/spi/connector/Transfer$State
搭建ReboletricSample的环境: 搭建完成,执行的时候报错: Exception in thread "main" java.lang.NoClassDefFoundE ...
- 解决maven install报错:java.lang.NoClassDefFoundError: org/codehaus/plexus/compiler/util/scan/InclusionScanException
问题:maven install时,报错:java.lang.NoClassDefFoundError: org/codehaus/plexus/compiler/util/scan/Inclusio ...
- 使用JSONObject遇到的问题,java.lang.NoClassDefFoundError: net/sf/json/JSONObject
先是报 java.lang.NoClassDefFoundError: net/sf/json/JSONObject 这个错误, 打开项目属性找到java build path中的libaries,找 ...
随机推荐
- js-innerHTML
innerHTML的使用: 首先看一下这个单词的表面意思:inner是内部.内部的:HTML相信大家都懂. 那么,innerHTML的意思就是设置xxxx的内部内容,并且识别HTML的标签.用法格式: ...
- theano 实现图像局部对比度归一化
很多时候我们需要对图像进行局部对比度归一化,比如分块CNN的预处理阶段.theano对此提供了一些比较方便的操作. 局部归一化的一种简单形式为: 其中μ和σ分别为局部(例如3x3的小块)的均值和标准差 ...
- BASH 命令以及使用方法小结【转】
1,export VAR=... 这个命令在Shell下直接运行可以使之后运行的脚本也知道这个VAR.但是如果 这个命令在脚本中运行,那么不影响脚本以外的参数.举个例子,如果在一个脚本运行之前没有 V ...
- IE7下z-index混乱问题(转)
浏览器兼容性问题太让人蛋疼了,今天可是废在了IE7的z-index问题上.可又不能因为浏览器版本低而不去解决,毕竟要从用户的角度着想.百度了好多还是无法解决,最后google了一下,找到了方法. 直接 ...
- android 滚动的缓冲图片
-----------------------java实现代码------------------------- private Animation mRotate; mRotate = Animat ...
- 类A have-a 类B,类B访问类A public 成员
需求是类A中包含类B,而类B又需要访问类A的public属性的成员. 首先类B中要访问类A的属性,那么对于类B而言,我们必须要知道有类A这个类,所以在类B的具体实现之前我们需要前向声明类A. 对于类A ...
- 利用html5的画布canvas进行图片压缩处理
在网上找的代码,按自己的需求改了下,忘记在哪找的了.这里记着方便自己以后学习. // 参数,最大高度 //var MAX_HEIGHT = 100; var MAX_WIDTH = 200; // 渲 ...
- Eclipse “cannot be resolved to a type” 错误
eclipse中遇到了“XX cannot be resolved to a type”的报错信息.网上找了些资料,本文将做以简单总结. (1)jdk不匹配(或不存在) 项目指定的jdk为“j ...
- python内建函数
人太懒了,博客就慢慢添加吧,这个话题还有很多要学的,后面实践了再来添加,现在就当是开个头. print(dir(__builtins__)) #获取内建属性.函数列表 print(help( ...
- FTP弱口令猜解【python脚本】
ftp弱口令猜解 python脚本: #! /usr/bin/env python # _*_ coding:utf-8 _*_ import ftplib,time username_list=[' ...