引言
今天在创建java项目的时候遇到了很多的错误,在解决的过程中遇到了一些根本不知道什么作用的文件,然后按照网上的一些做法可以将问题解决,但是这也说明我们在学习的时候很多基础和细节的地方是我们薄弱的地方,我们总是对于经常写代码的那几个文件比较熟悉,这样一旦报错我们就无从下手啊。 下面介绍几个文件。
一、文件.mymetadata文件
1、部署项目用的,把项目部署到tomcat服务器上时,如果没有这个文件,用myeclipse/Eclipse部署是不能部署到关联的tomcat服务器。
<?xml version=”1.0” encoding=”UTF-8”?> <!-- type : 工程类型 name : 工程名称 id : 工程在工作空间内的唯一标识 context-root : 网站根路径 j2ee-spec: J2EE标准 archive : 打包后war文件 --> <project-module type=”WEB” name=”PheebsKM” id=”myeclipse.1152954865843” context-root=”/PheebsKM” j2ee-spec=”1.4” archive=”PheebsKM.war”> <attributes> <!-- value : Web根目录名称 --> <attribute name=”webrootdir” value=”WebRoot” /> </attributes> </project-module>
2、在MyEclipse/Eclipse更改项目发布到Tomcat的文件夹
(1)、在自己的workspace中找到当前使用的项目,找到文件.mymetadata,打开后就会看见标签context- root=”/example”(example是自己应用的名称),可以将其改为别的名称。
(2)、选择:工程右键 --》Properties --》Myeclipse --》 Web
[Web-root folder]:/WebRoot
[Web Context-root]:/ROOT,修改context-root对应的值即可。(默认值:当前项目名称)
二、文件:.project
.project描述了一个Eclipse项目。
典型内容
<?xml version="1.0" encoding="UTF-8"?> <projectDescription> <!-- name里的内容代表项目名字,对应了Eclipse项目的名称,不是Maven的finalName --> <name>demo</name> <!-- 项目的注释 --> <comment></comment> <!-- 引用的项目的名字 --> <projects> </projects> <!-- 有序的列表,定义了一系列的构建命令(buildCommand) --> <buildSpec> <buildCommand> <!-- 项目构建命令的名字 --> <name>org.eclipse.wst.jsdt.core.javascriptValidator</name> <!-- 构建命令初始化时需要传递的参数(一般看到的都是空的) --> <arguments> </arguments> </buildCommand> <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand> <buildCommand> <name>org.eclipse.wst.common.project.facet.core.builder</name> <arguments> </arguments> </buildCommand> <buildCommand> <name>org.eclipse.m2e.core.maven2Builder</name> <arguments> </arguments> </buildCommand> </buildSpec> <!-- 项目中用到的一些特性的列表 --> <natures> <!-- 每一个特性的的名字 --> <nature>org.eclipse.jem.workbench.JavaEMFNature</nature> <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> <nature>org.eclipse.jdt.core.javanature</nature> <nature>org.eclipse.m2e.core.maven2Nature</nature> <nature>org.eclipse.wst.common.project.facet.core.nature</nature> <nature>org.eclipse.wst.jsdt.core.jsNature</nature> </natures> </projectDescription>
使用示例
Maven项目的配置
一个Maven项目要确保有如下的内容,如果没有,可以手工加上下面的BuildCommand和natures:
<projectDescription> <buildSpec> <buildCommand> <name>org.eclipse.m2e.core.maven2Builder</name> <arguments> </arguments> </buildCommand> </buildSpec> <natures> <nature>org.eclipse.m2e.core.maven2Nature</nature> </natures> </projectDescription>
禁止JavaScript的正确性校验
其实禁止正确性校验是一个不好的习惯,但很多人有这样的需求(唐僧:配置一下exclude路径多好啊,即能进行正确性校验又不会太影响速度),这里给出方案。删除如下的buildCommand即可,也可选择性的删除如下的nature:
<buildCommand> <name>org.eclipse.wst.jsdt.core.javascriptValidator</name> <arguments> </arguments> </buildCommand> <natures> <nature>org.eclipse.wst.jsdt.core.jsNature</nature> </natures>
把一个Java项目变为dynamic web项目
加入如下的buildSpec、nature元素即可:
<buildSpec> <buildCommand> <name>org.eclipse.wst.common.project.facet.core.builder</name> <arguments> </arguments> </buildCommand> </buildSpec> <natures> <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> <nature>org.eclipse.wst.common.project.facet.core.nature</nature> </natures>
拷贝攻略
.project文件可以从同类型的项目中直接拷贝,但需要修改/projectDescription/name里的项目名称。
参考资料
The project description file
二、文件:.classpath
.classpath描述了一个Eclipse项目。
<?xml version="1.0" encoding="UTF-8"?> <classpath> <!-- 含义:src/main/java属于源码,编译后放到target/classes目录下 --> <classpathentry kind="src" output="target/classes" path="src/main/java"> <attributes> <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> <attributes> <!-- 代表了配置是从POM.xml里来的,受maven管理,非maven项目可以去掉这个 --> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <!-- 这里的including代表了目录下所有.java文件才会被处理,其他文件一概忽略,不会出现在target/test-classes目录下 --> <classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"> <attributes> <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> <attributes> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <!-- 这里代表使用标准的JavaSE-1.7 JDK,相比来说如果用default和直接写当前系统中安装的JDK是不推荐的 --> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"> <attributes> <attribute name="maven.pomderived" value="true"/> </attributes> </classpathentry> <!-- 代表了Maven中的dependencies也都放到classpath里 --> <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> <attributes> <attribute name="maven.pomderived" value="true"/> <!-- web工程中把依赖的jar都放到输出的webapp里/WEB-INF/lib下面 --> <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> </attributes> </classpathentry> <!-- --> <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache-Tomcat v7.0"> <attributes> <attribute name="owner.project.facets" value="jst.web"/> </attributes> </classpathentry> <!-- 统一的输出为target/classes --> <classpathentry kind="output" path="target/classes"/> </classpath>
使用示例
项目有test/resources或test/java目录,但是不识别为classpath
酌情加入如下的classpathentry:
<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java" /> <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources" />
项目是maven工程,但是构建路径貌似怎么也配置不对
Maven是约定优于配置(convention over configuration)的,但是.classpath是配置型的,一般不会出现这种情况,如果出现了,检查maven约定的类路径(比如src/main/java、org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER)中是否有如下的元素:
<attributes> <attribute name="maven.pomderived" value="true"/> </attributes>
Maven的依赖jar文件放不到/WEB-INF/lib里
确认或加入如下的配置:
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> <attributes> <attribute name="maven.pomderived" value="true"/> <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> </attributes> </classpathentry>
界面配置方法
在项目Properties配置界面中,具体位置参考下图:
可移植的JDK配置
JDK配置
拷贝攻略
.classpath文件可以从同类型的项目中直接拷贝,有些目录没有的话,注意删掉对应的classpathentry,其他基本无需修改,如果有问题再考虑去改。但如果从别人的机器里拷贝,需要关注两点:
1、Java SDK的配置:如果Java SDK类型设置的是配置界面中的“Alternate JRE”,那么除非自己机器上装了对方机器名字一样的JDK(不是类型或者版本,而是Installed JREs配置中的名字),否则就需要修改JDK的配置。推荐使用配置界面中的“Execution Environment”来配置,避免绑定具体的JDK版本和实现,如<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7" />
2、如果Web项目使用了Web容器且绑定了project facet,那么就需要考虑Web容器配置的问题了,以Apache-tomcat为例,需要增加<classpathentry kind="con" path="org.eclipse.jst.server.core.Container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache-Tomcat v7.0" />,而"Apache-Tomecat v7.0"字符串需要与Eclipse Preferences里Server/Runtime Environments里的name一列保持一致。
参考资料
JDK为什么建议配置成Execution Environment
1. 文件:.jsdtscope
.jsdtscope文件定义了web项目中的源码路径,也就意味着只有web project才会有这个配置。这些源码Eclipse会进行validate(如果validate没有禁用)。这个文件在实际开发中最大的价值在于定义JS文件的例外路径,在配置界面中配置的话挨个选很烦人。
典型内容
<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry excluding="**/*.min.js|**/bower_components/*|**/custom/*|**/node_modules/*|**/target/**|**/vendor/*" kind="src" path="src/main/webapp"/> <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject"> <attributes> <attribute name="hide" value="true"/> </attributes> </classpathentry> <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/> <classpathentry kind="output" path=""/> </classpath>
使用示例
配置JS的例外(一般用于让Eclipse不校验第三方JS文件,避免开启JS校验后Eclipse假死)
在.jsdtscope文件的<classpathentry kind="src" path="src/main/webapp"/>增加excluding属性,写法见“典型内容”一节。
界面配置方法
这一部分在Eclipse不同版本里不一样,Eclipse 4.5及以后版本可以参考下面的配置,4.4.X版本(更早的版本没有考证)只能配置到具体项目中,不能全局配置。若针对具体项目配置,配置界面在项目的properties里的如下位置:
若全局进行配置,在Window/Preferences/JavaScript/Include Path中进行配置,如下图:
拷贝攻略
.jsdtscope文件可以从同类型的项目中直接拷贝,基本无需修改。