java-----遇到问题------myeclipse----发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误
情况
myeclipse发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误。
这种情况一般是 .classpath文件设置的输出路径不对导致的。
1、.classpath文件是eclipse新建web工程的时候生成的一个文件,改变Java Build path的时候或者改变加载的jar包顺序的时候,这个文件也会改变。
2、.classpath文件不能随意删除。将已有的工程import进入eclipse工作区的时候将.classpath文件删除了,然后再重新导入jar包,整个工程就会重新编译,也就会产生.classpath文件,但是这个重新生成的.classpath文件的内容可能就会出问题,也就有可能导致在tomcat部署的时候出现不可预料的问题。
例如:
原始的.classpath文件部分主要内容如下:
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
个人删除后,eclipse重新build的.classpath文件部分主要内容如下:
<classpathentry kind="src" path=""/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_11"/>
<classpathentry kind="output" path="/bin"/>
说明下:<classpathentry kind="src" path="src"/> 表示工程源文件的地址;
<classpathentry kind="output" path="/bin"/>表示发布项目时产生的class文件地址;
比较前后两个.classpath文件可以发现,重新build的.classpath文件里面的源文件地址为 <classpathentry kind="src" path=""/>,这样,在整个工程里面就会出现所有package错误,此时eclipse默认为package src.com.test, 而工程里面正确的包名应该是 package com.test
另外,如果新生成的.classpath文件class文件地址为bin目录下的,即<classpathentry kind="output" path="/bin"/> ,tomcat部署工程的时候,默认去WebRoot/WEN-INF/classes这个目录查找class文件,而此时class文件去不存在于bin目录下面,故而tomcat下面没有class文件,在启动时也就会产生ClassNotFoundException错误!
可能一----------.classpathoutput路径问题-----------解决方案
如果碰到以上问题的话,则可以参考原始.classpath文件修改过来就可以了
即可以手动把
<classpathentry kind="output" path="/bin"/>
修改成
<classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
(这里根据自己的项目环境情况适当修改路径)
也可以在java buildPath中进行可视化的选择,如图:
解析Myeclipse项目下的.classpath文件
.classpath文件
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_5_CONTAINER"/>
<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/bsf-2.3.0.jar"/>
<classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
1. <classpath kind="src" path="src"> 对应的是source folder类型的目录,
kind---表示这个classpath的类型,path表示在项目中的路径,
path使用根目录的相对路径(相对.classpath文件本身的相对路径) ,
myeclipse项目中的src本身就是一个source folder,所以它会自动写入这个文件中,
如果自己手动建立了一个source folder,这个folder也会写入这个文件,
形式就是以上形式eg.在项目基础上新建一个test的source folder,
就会就会成为这样:
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="test"/>
2. <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
这句是表示程序的运行环境 kind="con"---表示classpath的类型,
con即是container,就是程序运行的容器,或者就说是运行环境也OK,
它实际上是在Myeclipse最初的时候要配置installed JREs中指定(一般情况下我们指定的是JDK),
但是这里实际使用的是JDK下的JRE中的jar包,就是JDK_HOME/jre/lib就是对应的这条语句
3. <classpathentry kind="con" path="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_5_CONTAINER"/>
这句是kind="con"当然和上条一样,是表示运行时的容器,
一般情况下是java web项目才会有,它是包含了J2EE服务器要使用到的一些jar包,
这个目录中的jar包是其中最特殊的,那就是它不会在部署项目的时候部署到服务器上去,
因为myeclipse认为这样的jar包是服务器应该有的,所以这里有时候会出现问题,
就是开发的时候不出现问题,但是部署之后会出错,就是有的服务器有的jar包并没有提供,
比如tomcat(因为tomcat并不是专业的web服务器,它只是一个轻量的web容器),这就要区分好开发环境和运行环境
4. <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/bsf-2.3.0.jar"/>
这条语句kind="lib",对应的是classpath中的库文件,path指定库文件的路径,
同样是相对与项目根目录的相对路径
5. <classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
这条表示项目的输出目录,整个之前定义的classpath无论是kind='src",kind="con",kind="lib",
在编译后都会进入到这个目录中来,在java web中也就是WebRoot/WEB-INF/classes。
同样使用的path是相对项目根目录的相对路径(相对.classpath文件本身的相对路径),
但是由于J2EE部分的是本身要求web 服务器本身要有那些jar包,所以那个例外不会进行拷贝
classpath是myeclipse重要文件,在进行相关的查找时候要用到
项目根目录下的".classpath“文件就是保存项目classpath的文件
文件中的 <classpath>... ...</classpath>之间保存各种classpath信息,
kind表示类型,path表示路径,且使用的都是相对于”.classpath“或者说是项目根目录的相对路径
几种kind的含义
kind=”src" ----对应source folder目录
kind="con"--项目的容器,一般当是java web项目的时候会有两个
kind="lib"---项目中使用到的库文件
kind='output"--输出目录,最终编译后相关文件的目标目录,myeclipse会自动完成相关的拷贝
最终对于myeclipse的classpath的管理都是通过这个文件实现
myeclipse项目中的.classpath文件
<?xml version=”1.0” encoding=”UTF-8”?>
<classpath>
<!-- 源码目录 -->
<classpathentry kind=”src” path=”src”/>
<!-- JDK运行时容器 -->
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_5_CONTAINER"/>
<!-- 以下为类库path为你自定义的目录,jar文件的路径 -->
<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/sino-base-1.3.2.jar"/>
<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/sino-bms-1.4.3.jar"/>
<classpathentry kind="lib" path="WebRoot/WEB-INF/lib/sino-frame-1.2.2.jar"/>
<!-- 编译后输出class目录 -->
<classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
</classpath>
.project文件
<?xml version=”1.0” encoding=”UTF-8”?>
<projectDescription>
<!-- 工程名称 这里定义的name的值如果已经工作空间的其他项目占用了,
当使用myeclipse的import功能导入项目时,就会导不进来-->
<name>sxVIP</name>
<comment></comment>
<projects></projects>
<!-- 编译器指定-->
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<!-- 核心特性 -->
<natures>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>com.genuitec.eclipse.ast.deploy.core.deploymentnature</nature>
<nature>com.genuitec.eclipse.j2eedt.core.webnature</nature>
</natures>
</projectDescription>
.mymetadata文件
对于myeclipse工程多了一个.mymetadata文件(web 应用程序才有)
<?xml version=”1.0” encoding=”UTF-8”?>
<!--
type : 工程类型
name : 工程名称
id : 工程在工作空间内的唯一标识
context-root : 网站根路径
j2ee-spec: J2EE标准
archive : 打包后war文件
-->
<project-module
type=”WEB”
name=”upload”
id=”myeclipse.1152954865843”
context-root=”/upload”
j2ee-spec=”1.4”
archive=”upload.war”>
<attributes>
<!-- value : Web根目录名称 -->
<attribute name=”webrootdir” value=”WebRoot” />
</attributes>
</project-module>
可能二-------maven项目------.classpath缺少maven框架包输出语句----解决方案
表现为使用maven命令打成war包会缺少maven依赖的包。
这种情况需要在.classpath中添加以下代码:
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
可能三-------gradle项目------.classpath缺少gradle框架包输出语句-----解决方案
表现为使用gradle命令打成war包会缺少gradle依赖的包。
这种情况需要在.classpath中添加以下代码:
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
可能四-----任何类型项目-----子项目的编译文件不进入lib的jar包中也不进入src文件夹-----解决方案
这种情况是没对子项目的输出路径做设置导致的。
右键点击工程,属性(properties),选择deployment assembly选项,单击add按钮,如下图:
添加之后 有路径有输出包名才算正确的路径,这样再在tomcat中加载部署一次就会发现已经有缺少的子项目的编译文件。
java-----遇到问题------myeclipse----发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误的更多相关文章
- myeclipse发布项目到tomcat时项目名称与web应用名称不一致问题
工程名称原来为old,发布到tomcat webapps下后为old, 右键点击你的项目,然后选择重构---->重命名,项目名称改为new,但是发布名还是原来的名字.如果想让发布后的目录名为ne ...
- eclipse发布后在tomcat下没有文件夹,服务器的Server locations不能修改
主要是因为Server locations中的deploy路径不正确,要修改这个路径,需要移除服务器中的所有项目,然后点击清空,这时再双击服务器,既可修改这个设置.
- maven项目在tomcat中运行遇到的问题
在使用maven构建项目,并在tomcat容器中运行的时候遇到了一些问题,现做一下记录 maven项目中jdk版本会自动恢复 maven项目的编译jdk即使在window -> java -&g ...
- Tomcat下webapps夹中root文件夹作用及如何发布项目至root文件夹中
转载请注明出处: tomcat的root文件夹下面默认是tomcat的管理程序,但是如果你把自己的web项目发布到root下面的话,你可以不通过项目名直接访问你的项目,比如,你见了一个名为Test的项 ...
- Red5 1.0.0RC1 集成到tomcat6.0.35中运行&部署新的red5项目到tomcat中
1.下载red5-war-1.0-RC1.zip 解压之得到 ROOT.war 文件. 2.处理tomcat. 下载apache-tomcat-6.0.35-windows-x86.zip包,解压到你 ...
- Eclipse里如何配制项目在tomcat中启动
首先,在Eclipse中新建一个Hello工程,Workspace的位置在c:/eclipse/workspace,所以hello工程的位置就是在%Workspace%/hello/这个文件夹中. ...
- web项目引用tomcat中的jar
web项目引用tomcat中的jar https://blog.csdn.net/zjsdrs/article/details/77868827 如下图所示
- 对Android项目中的文件夹进行解释
对Android项目中的文件夹进行解释: · src:里面存放的是Activity程序,或者是以后的其他组件,在此文件夹之中建立类的时候一定要注意,包名称不能是一级. · gen:此文件夹中的内容是自 ...
- Idea 添加lib文件夹,并添加至项目Libary
在WEB-INF文件夹下新建lib文件夹,在lib文件夹上右键选择Add as Libary...,然后填写library名称,选择作用级别,选择作用项目,OK 注意:lib文件夹下需要有jar包后才 ...
随机推荐
- Netty源码分析第4章(pipeline)---->第3节: handler的删除
Netty源码分析第四章: pipeline 第三节: handler的删除 上一小节我们学习了添加handler的逻辑操作, 这一小节我们学习删除handler的相关逻辑 如果用户在业务逻辑中进行c ...
- MYSQL数据库与Emoji表情的故事
问题背景 手机上众多输入法和键盘支持输入 emoji 表情,给早期设计的程序造成了越来越多的干扰. 移动端购物的流行,2018 年 "双十一"全网移动端交易达到 93.6% 微信年 ...
- bootstrape3 模态
version 2 的模态 不能在 version 3 上面用. http://schy-hqh.iteye.com/blog/1995690
- dmesg命令详解
基础命令学习目录 http://linux.cn/article-3587-1.html dmesg 命令的使用范例 下面我们展示一些最负盛名的‘dmesg’命令工具以及其实际使用举例.‘dmesg’ ...
- css3 transform属性多值的顺序问题
对于transform属性的多值的顺序问题,我自己就被困扰过.后来知道了跟顺序有关,但是不知道为什么.我想应该很多人跟我以前一样,知其然不知其所以然.如果不知道的,也许这篇文章会对大家有所帮助. 先来 ...
- PHP Filter 函数 日常可用
PHP Filter 函数 PHP Filesystem PHP FTP PHP Filter 简介 PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤. 安装 filter 函数 ...
- 浅谈jQuery构造函数
$()函数到底做的什么 jQuery在前端领域路人皆知,对于一向喜欢玩js的博主来说,虽然能力有限,但是还是很喜欢研究他的做为.那么一个简单的美元符号$与一对常见的()括号,jQuery底层到底做了哪 ...
- sprint2(第二天)
昨天没有想到餐桌的功能,今天加到展板.然后今天我们完成了餐桌模板,可以实现添加桌子的桌号.人数.修改和删除功能.不过由于今天学校网络不是很好,晚上我们clone了很久都没clone下来,所以没有上传代 ...
- java第三次试验报告
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:郭皓 学号:20135327 成绩: 指导 ...
- Mininet安装,简单实现一个网络拓扑结构
安装mininet Mininet安装教程,可以按照这个来,然而这个虚拟机有时会很难装.可以考虑如下的做法:先 git clone,cd mininet 和 cat INSTALL之后,可以在提示信息 ...