首页 > 代码库 > myeclipse 编译源文件 tomcat解释.class文件机制
myeclipse 编译源文件 tomcat解释.class文件机制
一 场景:
在svn中下载了项目最新版本,启动myeclipse中的tomcat,发现报错,找不到springMVC配置文件,于是把根目录下的resource文件夹放到了源代码输出目录下。再次启动还有类似找不到文件的错误,于是又修改了build path --configure build paht,把src 和resource两个目录(自己项目自己写的所有源代码)都放到了源码输出source的位置。捎带着改了class输入文件的位置。结果又报错了。。。错误如下:
严重: Exception starting filter SecurityFilter java.lang.ClassNotFoundException: com.cdvcloud.programedit.web.filter.SecurityFilter at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:529) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:511) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:139) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
二 myeclipse中一些文件说明
首先说说myeclipse中对一些操作的说明,如下图所示:
说明如下:
1、Source选项卡
Source folders on build paht:设置.java源文件的根目录输出路径
default output folder:项目源文件经过myeclipse编译器编译后生成.class文件,这个路径配置的就是.class文件输出路径。(ps:对于java web项目来说,默认源文件目录:项目名称/src 输出目录:项目名称/WebRoot/WEB-INF/classes。对于单纯的java project来说,默认输出路径不同:项目名称/bin。)
2、projects选项卡
是否关联到其他的项目中,例如我们在 projects选项卡中引入了两个其他的项目,这样我们在该项目中进行import 的时候,就可以import我们刚引入的两个项目。并且查看项目的.classpaht文件,文件内容如下。
<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="resource"/> <classpathentry kind="src" path="1"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_6_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/> <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> <classpathentry combineaccessrules="false" kind="src" path="/bss"/> <classpathentry combineaccessrules="false" kind="src" path="/vms2.0"/> <classpathentry kind="output" path="WebRoot/WEB-INF/myclasses"/> </classpath>这样我们就可以引入bss和vms2.0项目中的其他包中类文件了。
3、Libraries选项卡
用来管理项目中使用的类库,包括jdk自带和jre自带的jar,也包括我们自己引入的第三方jar,可以对类库进行添加和删除。
4、order and Expor选项卡
优先级:调用优先级越好,将会从上向下调用,比如包名和类名一样的两个项目,会根据此优先级进行调用(这篇文章,验证了此观点)。勾选与不勾选,区别在于,项目打war包的时候会不会把这里的jar也打包进去。
三 项目生成文件说明
我们每新建一个项目,随着项目就会生成.classpath 、.mymetadata、.project 三个文件,这三个文件说明如下。.classpath文件
该文件是我们在修改java build paht时,会自动随之更改。
.mymetadata文件
<?xml version="1.0" encoding="UTF-8"?> <project-module type="WEB" name="pgmedit_record" id="myeclipse.1416988570034" context-root="/pgmedit_record" j2ee-spec="6.0" archive="pgmedit_record.war"> <attributes> <attribute name="webrootdir" value=http://www.mamicode.com/"WebRoot" />>
很明显,这里说明的是项目名称,项目默认访问,项目打包默认的名称,项目访问默认路径WebRoot。.project 文件
就不粘贴内容了,大同小异,包括项目名称,编译器指定的加载内容以及一些核心的特性。
四 myeclipse的默认规定
1、我们可以随便改变源代码放置位置,但是无论放到什么位置都要放在java build paht --》source 下。
2、tomcat解释。class文件,默认位置是项目--WEB-INF--class文件夹中的文件。
当我把输出class改成自己的myclass时,启动tomcat,程序会报错。再看tomcat下项目的WEB-INF 下的classess文件,里面没有任何的class类,而当我把myclasses下的编译好的class和xml文件copy到这个目录下,便可以运行。
这说明了,myeclipse编译路径可以修改,没有规范,但是tomcat在解释执行.class文件的时候,就必须放在WEB-INF下的classes,这样tomcat才能找到要运行的内容。
五 总结
细心观察,没有解决不了的问题,送给大家一小段Sweet sound ,愿生活愉快
若无法播放,点击这里
myeclipse 编译源文件 tomcat解释.class文件机制