首页 > 代码库 > 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文件机制