亲们,有没有想过该问题?
很大一批人一上来直接用诸如eclipse的IDE进行开发,他们往往专注于代码,但是忽略了细节,我很庆幸我一开始是用notepad来编写java代码,然后用命令行来编译java文件
我们先来说些关于eclipse的那些事
一、
1.eclipse中有workspace的概念,他是一系列eclipse project的集合,说白了就是一个目录,但是下面有一个名为.metadata的目录,这个目录是eclipse自己建立的,里面有一些对该workspace的一些配置,不同的workspace可以有不同的配置,这就是为什么你转到新的workspace后,你的字体呀,User Libaray呀,Content Assist呀等等都会没掉,当然我们可以使新的workspace的这些配置和已有的配置一样,做法如下:
在你已有的eclipse中:右击-export-General-Preferences,然后选择存放的位置,这样就会导出一个epf文件,这个文件就包含了你这个工作空间的配置,然后用eclipse切换到新的空间,右击-import-General-Preferences,选择刚刚导出的文件然后finish就好,这时你就会发现一切都转到了你熟悉的那个界面
2.我们再来看看eclipse自动生成的其他文件,在你新建的每个项目的目录下都有一个.settings目录,里面都是一些对该项目的配置,比如你的文件编码,你的jdk编译版本之类的,除了这个目录,还有.classpath和.project这2个文件,.project文件我们无需关注,对于.classpath文件,你可以用notepad++之类的工具打开,你会发现它其实是xml格式的(eclipse的大多数配置文件都是xml格式的)
它里面会有下面的内容
需要注意的是这些都是可以在eclipse中设置的,只不过eclipse会把设置后的内容保存到相应的文本文件中,然后启动的时候进行读取(有的是按需加载),如果你改变了该文件的内容,比如把output设成其他目录,当你在eclipse窗口中refresh或者重启后设置就会生效
二、
1.好了,我们转到正题上,先看下该项目的目录结构:
--.settings
--.classpath
--.project
--src
----com
------my
--------Test.java
------your
--------Person.java
--bin
Test.java有import Person.java
大家也注意到上面的.classpath文件中的配置,eclipse会把src目录设为源代码目录,也就是说该目录下的是java源代码,然后eclipse会把这些源代码自动编译到bin目录下,这些都是eclipse自动完成的,我们会认为这是理所当然的,eclipse帮我们做了太多的事了,那么现在就给你这样一个目录结构,不给你eclipse,你该怎么编译src下的源代码呢?做法如下:
首先切换到和src同级的目录下,然后执行下面的命令
javac -sourcepath src -d bin src/com/my/Test.java
这样就会把编译后的class文件放到bin目录下
如果运行的话执行下面的命令:
java -classpath bin com.my.Test
Test.java中有引用Person这个类,所以我们直接编译Test.java时,会自动寻找依赖关系,并且先编译了Person这个类
2.这个例子中我们没有引用第三方的jar包,如果有的话,又该怎么办,目录结构如下:
--.settings
--.classpath
--.project
--src
----com
------my
--------Test.java
----------fm
------------TestFreemarker.java
------your
--------Person.java
--bin
--lib
----freemarker.jar 编译的话首先同样切换到和src同级的目录下,然后执行以下命令:
javac -encoding utf-8 -sourcepath src -d bin -classpath lib/*.jar src/com/my/fm/TestFreemarker.java
运行的话执行:
java -classpath lib/freemarker.jar;bin com.my.fm.TestFreemarker 所以eclipse无非也是执行上面的类似操作而已
3.如果对于Web项目,一般会有WebContent目录,结构如下:
--.settings
--.classpath
--.project
--src
----com
------my
--------Test.java
------your
--------Person.java
--bin
--WebContent
----META-INF
------MANIFEST.MF
----WEB-INF
------lib
------classes
对于eclipse,在项目上右击-properties-Deployment Assembly
它的意思是如果部署web项目的话,会把以该项目的名称比如Test在tomcat实际加载的webapp目录下建立同名的目录,并且把/WebContent中内容全部拷过去,并把src下的源代码编译到WEB-INF/classes下
也就是说eclipse的插件帮我们完成了部署中一些操作,如果可以的我们也可以自己进行部署,但是效率太低了
三、
其实我们也可以用ant或者maven来帮助我们自动编译,测试,打包和部署,这些工具可以指定包之间的依赖关系,可以进行更加复杂和灵活的操作,至于why ant,why maven,诸君可以去网上搜到更多的文章