`
eliotte
  • 浏览: 17824 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

理解eclipse(java工程)的工作目录

阅读更多
eclipse是非常常用的开发平台,利用eclipse的插件平台,可以将eclipse扩展成为非常优秀的专有语言ide,这里主要提到一个关于eclipse利用jdt插件开发java应用时遇到的问题。

首先我们说明一下elipse对工程的管理。eclipse的基本工程目录叫做workspace,每个运行时的eclipse实例只能对应一个workspace,也就是说,workspace是当前工作的根目录。我们在workspace中可以随意创建各种java相关的工程,普通的java应用,java web应用,web service应用等,我们仅拿普通的java application来说明。

通常我们创建一个java application工程,会创建一个工程目录,假设工程名称为:TestProject,那么在当前的workspace里讲创建一个目录名为TestProject,同时我们选择src作为源码文件夹,bin作为输出路径,这样就构成了一个基本的java application工程。,在workspace中存在如下文件夹:

+workspace
  +TestProject
    -src
    -bin

这个时候我们创建的代码将写入src目录,输出的class文件将存在于bin目录。
这时候我们在src目录下创建一个类,就叫做TestClass,里面有一个main方法如下:
public static void main(String[] args){
    System.out.println(new File("test.txt").exist());
}

同时在src目录下创建一个空的文件test.txt。什么都不要做,保存工程,打开资源管理器,我们来查看workspace/TestProject/bin目录,下面会存在两个文件:TestClass.class和test.txt。

此时我们设想,程序的内容就是检查test.txt文件是否存在,按照现在的目录规划,我们认为,在控制台上将打出“true”,ok,我们回到eclipse中,运行TestClass这个类。控制台输出了:false!

为什么我们得到了并非我们预期的结果呢?先别着急,我们打开windows的命令行界面(或者linux的shell都ok),将目录切换到workspace/TestProject/bin目录下,执行如下命令java TestClass,看看出现什么结果?true!对,就是true。

为啥同样的程序会有不同的结果呢?这个答案很简单,就出在了java.exe本身的一个参数-cp(classpath)上!

eclipse默认的classpath包括三个部分:
1、jdk的bin目录;
2、工程引用的所有其他jar包路径
3、工程根路径(对,不是bin路径)

那么我们就可以理解来,在classpath的根路径中并不存在这个test.txt文件,用相对路径描述,这个文件实际存在于src/test.txt和bin/test.txt。那么这个时候就有疑问了,如果我们打包发布工程,是不是jar包中就会有bin这个目录呢?幸运的是,eclipse考虑好了这个问题。通过eclipse的导出jar能力,bin目录会作为jar的根目录,而不是bin的上层的工程目录,这样类的包路径就是正确的,同时,工程目录下的资源文件、配置文件等也被拷贝到这里,也就是相当于把工程目录下的这些文件拷贝到来bin目录后再打包,这样文件的相对路径也就符合默认的classpath了。

eclipse实际是提供来一种策略来实现源代码文件和配置\资源文件的单独管理能力,利用classpath兜了个圈子,这种做法有些晦涩,但是不失为软件工程的一个启发。
分享到:
评论
1 楼 liaosirje 2012-12-11  
cp应该是指向的是bin目录,只是cwd是当前调试的project根目录,所以test.txt不存在,如果使用file(bin/test.txt)或file(src/test.txt),则存在。

相关推荐

    基于Java+MySQL的学生选课系统,Eclipse完美运行,满分数据库课程设计,新手必看!

    数据库系统课程设计目的在于加深对关系数 据库理论知识的理解,通过使用具体的 DBMS,掌握一种实际的数据库管理系统并掌握其 操作技术,熟练掌握使用数据库前端开发工具(如 VB、C++、Java、Delphi、PowerBuilder 等...

    java源码包---java 源码 大量 实例

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    Eclipse中常见图标说明

    Eclipse中常见图标说明,方便理解Java中的类继承和实现关系,以及其他视图中常见图标的说明,具体包括: Objects、Build Path、Compare、Junit、Search、Hierarchy Type等内容中的常见图标; 绝对权威的Eclipse中图标...

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    基于java的员工工作日志管理系统源码.zip

    技术关键词:Java编程语言、面向对象编程(OOP)、Java虚拟机(JVM)、Java开发工具(如Eclipse、IntelliJ IDEA) 内容关键词:变量、数据类型、运算符、控制流、类、对象、继承、多态、异常处理、集合框架、泛型、...

    JAVA上百实例源码以及开源项目源代码

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    尚硅谷Java视频教程_Maven视频

    创建Maven版Java工程 · 21.在Eclipse中执行Maven命令 · 22.在Eclipse中创建Maven版的Web工程 · 23.通过servlet-api进一步理解provided依赖范围 · 24.通过jsp-api体验jar包之间的冲突 · 25.导入Maven工程 ...

    J2ME手机程序Eclipse开发基础 源码

    同时,为了方便部分初学者对Java语言的掌握,还专门安排了一章内容来讲述Java编程的基础知识。  本书的重点有两方面内容:对Eclipse开发环境的掌握和对手机游戏的开发。其中,帮助读者掌握手机游戏的开发技巧是本书...

    java源码包4

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    java反编译exe文件 java软件反编译

    四、Minjava是一种Java逆向工程软件,它有助于理解一些已经存在的Java软件的体系结构和行为。 UuDeJava是JavaClass文件的反编译工具。未编译的Java源程序输出到与Class相同的目录。内部使用jad.exe。解译类文件时,...

    java源码包3

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    java源码包2

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    eclipse快捷键配置

    对于eclipse的使用的视频,看过之后,将会对你写带来不小的帮助哟,很好用,视频很容易理解,容易上手.

    java awt、Swing实现中国象棋可联机版本采用面向对象思想

    两个工程直接导入Eclipse,即可运行, ps:一个工程运行两次也可以,需要注意端口号,代码默认如果连接的端口号是3003,则监听3004端口,相反同理。联机前需要确保两台计算机同时处于局域网或外网;

    基于java的电子相册源码.zip

    技术关键词:Java编程语言、面向对象编程(OOP)、Java虚拟机(JVM)、Java开发工具(如Eclipse、IntelliJ IDEA) 内容关键词:变量、数据类型、运算符、控制流、类、对象、继承、多态、异常处理、集合框架、泛型、...

    基于java的日记本源码.zip

    技术关键词:Java编程语言、面向对象编程(OOP)、Java虚拟机(JVM)、Java开发工具(如Eclipse、IntelliJ IDEA) 内容关键词:变量、数据类型、运算符、控制流、类、对象、继承、多态、异常处理、集合框架、泛型、...

    基于java的考勤管理系统源码.zip

    技术关键词:Java编程语言、面向对象编程(OOP)、Java虚拟机(JVM)、Java开发工具(如Eclipse、IntelliJ IDEA) 内容关键词:变量、数据类型、运算符、控制流、类、对象、继承、多态、异常处理、集合框架、泛型、...

    基于java的SSM商城系统源码.zip

    技术关键词:Java编程语言、面向对象编程(OOP)、Java虚拟机(JVM)、Java开发工具(如Eclipse、IntelliJ IDEA) 内容关键词:变量、数据类型、运算符、控制流、类、对象、继承、多态、异常处理、集合框架、泛型、...

Global site tag (gtag.js) - Google Analytics