親們,有沒有想過該問題? java
很大一批人一上來直接用諸如eclipse的IDE進行開發,他們每每專一於代碼,可是忽略了細節,我很慶幸我一開始是用notepad來編寫java代碼,而後用命令行來編譯java文件 web
咱們先來講些關於eclipse的那些事 shell
1、 tomcat
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就好,這時你就會發現一切都轉到了你熟悉的那個界面 app
2.咱們再來看看eclipse自動生成的其餘文件,在你新建的每一個項目的目錄下都有一個.settings目錄,裏面都是一些對該項目的配置,好比你的文件編碼,你的jdk編譯版本之類的,除了這個目錄,還有.classpath和.project這2個文件,.project文件咱們無需關注,對於.classpath文件,你能夠用notepad++之類的工具打開,你會發現它實際上是xml格式的(eclipse的大多數配置文件都是xml格式的) eclipse
它裏面會有下面的內容 webapp
<classpathentry kind="src" path="src"/> <classpathentry kind="output" path="bin"/>
須要注意的是這些都是能夠在eclipse中設置的,只不過eclipse會把設置後的內容保存到相應的文本文件中,而後啓動的時候進行讀取(有的是按需加載),若是你改變了該文件的內容,好比把output設成其餘目錄,當你在eclipse窗口中refresh或者重啓後設置就會生效 maven
2、 工具
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的插件幫咱們完成了部署中一些操做,若是能夠的咱們也能夠本身進行部署,可是效率過低了
3、
其實咱們也能夠用ant或者maven來幫助咱們自動編譯,測試,打包和部署,這些工具能夠指定包之間的依賴關係,能夠進行更加複雜和靈活的操做,至於why ant,why maven,諸君能夠去網上搜到更多的文章