1 前言
在使用 eclipse 或者 myeclipse 进行 java 项目开发的时候, 每个 project(工程) 下面都会有一个. classpath 文件, 那么这个文件究竟有什么作用?
2 作用
.classpath 文件用于记录项目编译环境的所有信息, 包括: 源文件路径编译后 class 文件存放路径依赖的 jar 包路径运行的容器信息依赖的外部 project 等信息如果把该文件删除, 则 eclipse 不能讲该工程识别为一个正常的 java 工程, 仅仅当做普通的文件夹而导致不能正常运行
3 .classpath 内容
.classpath 文件其实也是一个 xml 格式的内容文件, 其具体内容大致如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <classpath>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="src" path="resource"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7">
- <attributes>
- <attribute name="owner.project.facets" value="java"/>
- </attributes>
- </classpathentry>
- <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget / 学习 8080">
- <attributes>
- <attribute name="owner.project.facets" value="jst.web"/>
- </attributes>
- </classpathentry>
- <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
- <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
- <classpathentry kind="output" path="WebContent/WEB-INF/classes"/>
- </classpath>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
以 classpath 为根节点, 每个 classpathentry 节点代表一个说明信息
每个 classpathentry 以 kind 属性指明类型, path 指明路径
以上文件的所有内容, 都是依赖项目中的 Java Build Path 内容改变而改变的, 即对 Java Build Path 的所有操作都会反应到文件内容中
现在来具体分析文件内容的每个节点含义
3.1 kind="src"
src: 即 source 源文件, 代表的是一个源文件, path=src 是一个相对路径, 相对. classpath 文件本身, 即 path=src 表示文件夹 src 与. classpath 在同一个目录, 且代表源文件
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="src" path="resource"/>
- 1
- 2
kind=src 的操作对应于 Java Build Path 的 Sourcetab 页
如下图, 增加一个文件夹 bin 作为源文件, 则. classpath 文件增加内容
内容增加如下:
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="src" path="bin"/>
- <classpathentry kind="src" path="resource"/>
- 1
- 2
- 3
当然, 做相应修改或删除, 同样. classpath 文件内容会相应改变
另外, 当指定属性 combineaccessrules=false 是则代表引入外部 project, 具体如下
- <classpathentry combineaccessrules="false" kind="src" path="/mybatis"/>
- 1
对应页面 tab, 其中 path=/mybatis, 是相对应 workspace 下的
绝对路径
3.2 kind="output"
output 用于指定 java 源文件编译后的 class 文件存放路径, 格式如下
- <classpathentry kind="output" path="WebContent/WEB-INF/classes"/>
- 1
path: 代表存放 class 文件路径, 同样是相对. classpath 文件的路径, 找到 WebContent/WEB-INF/classes, 可以看到 class 文件的存放
假设修改输出文件路径, 则相应内容也会改变
改为: spring-mybatis\WebContent\WEB-INF\newclasses
则. classpath 文件内容修改为:
- <classpathentry kind="output" path="WebContent/WEB-INF/newclasses"/>
- 1
实际存放 class 文件的路径也会改变
3.3 kind="con"
con 即是 container, 就是程序运行的容器, 或者就说是运行环境也 OK, 它实际上是在 Myeclipse 最初的时候要配置 installed JREs 中指定 (一般情况下我们指定的是 JDK), 但是这里实际使用的是 JDK 下的 JRE 中的 jar 包, 就是 JDK_HOME/jre/lib 就是对应的这条语句具体内容如下
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7">
- <attributes>
- <attribute name="owner.project.facets" value="java"/>
- </attributes>
- </classpathentry>
- <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget / 学习 8080">
- <attributes>
- <attribute name="owner.project.facets" value="jst.web"/>
- </attributes>
- </classpathentry>
- <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
- <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
对应操作 tab 如下
3.3.1 JRE 配置
path=XXX 用于指定 jre 容器的使用情况, 可选择 jre 的不同来源, 不同来源 path 的实际值会有些变化
选择 Workspace default JRE(jdk1.7), 则值为
- path="org.eclipse.jdt.launching.JRE_CONTAINER"
- 1
选择 Alternate JRE, 则值为
- path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7"
- 1
其中最后么的 jdk1.7 是我自定义的 JRE 名称
选择 Execution environment, 即选择 eclipse 自带的内置 jre, 值为
- path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"
- 1
其中最后么的 JavaSE-1.7 是系统内置的 JRE 名称
另外属性值 name=owner.project.facets
- <attribute name="owner.project.facets" value="java"/>
- 1
应该是指定 JRE 容器的具体使用的模板, 默认使用 java, 具体的没有探究
3.3.2 Server Runtime 配置
同理, 其他容器配置同上, 如对 Server Runtime 容器的配置, 下面配置了 tomcat 容器运行环境
- <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget / 学习 8080"/>
- 1
3.3.3 Web App Libraries 配置
- <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
- 1
3.3.4 User Library 配置
- <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/tomcat7"/>
- 1
- 3.4 kind="lib"
kind="lib" 用于指定 project 依赖的 Referenced Libraries, 如图增加了一个 jar 包
则相应. classpath 文件内容增加
- <classpathentry kind="lib" path="WebContent/WEB-INF/lib/commons-dbcp-1.2.1.jar"/>
- 1
其中 path 指定了依赖的 jar 的相对路径
3.5 顺序
.classpath 文件中各节点的顺序是通过 tab-Order and Export 来控制的, 不同的顺序可能会引起加载 class 文件问题, 一般是源码放在最前面
来源: http://www.bubuko.com/infodetail-2524847.html