IDEA項目路徑
普通Java項目
普通Java項目,標準目錄結構src下的路徑就是類路徑,每次編譯都會將src目錄下新增的類和資源文件打包進類路徑。
如下圖,類文件和配置文件都會被編譯打包進類路徑
maven構建Java項目
maven標準目錄結構:
src
-main
–bin 腳本庫
–java java源代碼文件
– 資源庫,會自動復制到目錄里
– 資源過濾文件
– 組件的描述配置(如何打包)
– 配置文件
– web應用的目錄。WEB-INF、css、js等
-test
–java 單元測試java源代碼文件
– 測試需要用的資源庫
– 測試資源過濾庫
-site Site(一些文檔)
.txt ’s
.txt ’s
工程根目錄下就只有src和兩個目錄,是有存放項目構建后的文件和目錄,jar包、war包、編譯的class文件等。里的所有內容都是maven構建的時候生成的。
在IDEA中快速創建一個普通maven項目,選擇maven--一項,就可以創建一個maven管理的Java項目。
可以看到,一個最基本的maven項目有src目錄,并且該目錄下存在main和test兩個目錄。
簡單介紹:
src/man/java:存放類源代碼,其編譯輸出到-路徑下。
src/test/java:存放測試代碼,其編譯輸出到-test-路徑下。
如果我新增一個配置文件在java下,按常理來說源代碼(java目錄下的文件)路徑下的文件都會被打包到類路徑下,但是對于maven來說,默認情況下,maven只會按照標準的目錄結構查找和處理文件,對于其他文件不予處理。
如下示例:jdbc.沒有被maven處理
但是如果想要它被編譯輸出到下,也不是不可以。
解決方案
1、項目中新建一個目錄,在IDEA中必須將其標記為,是maven項目下的一個標準目錄結構,maven對于下的文件就會將其打包到類路徑下。IDEA中,如果新建的目錄并沒有將其標記為,盡管同名,但是maven還是依舊不會處理。
2、使用maven--插件。
示例一:正常處理
編譯測試,結果如下
注:maven僅僅是將目錄下的文件打包輸出到-路徑下,不是將目錄打包到-。
示例二:違反maven目錄結構約束
修改pom文件,build標簽下添加設置
src/main/java/
**/*.
**/*.xml
感興趣的伙伴可以嘗試一下。這種方式你說它不合常規,其實也不這么絕對,框架采用這種方式居多。比如SSM,如果將下的統一和類放在一起,而不是放在目錄下(就是這樣做的),采用上述設置,maven可以將類連通相鄰的配置文件一起打包進類路徑。
普通web項目
下標準的web目錄結構形式:
應用上下文,根目錄,根目錄下存放的一般是靜態資源文件,WEB-INF目錄,正常開發來說它標準的子目錄結構就是這兩個:類路徑,存放java字節碼文件、lib:存放項目所引用到的第三方jar庫。并且WEB-INF目錄下的文件對外都是不可訪問的,只能通過內部進行處理,有時我們也會把一些不想讓客戶直接訪問到的靜態資源放入到這個目錄下。
在IDEA中,web的項目結構如下,可以看到普通的web項目默認編譯輸出路徑和普通的Java項目編譯輸出路徑其實是相同的,都是將編譯后的字節碼放到了項目根目錄下的名為out/目錄下,這些默認配置做的都挺好的,能夠及時看到編譯后的結果。同樣我們也可以更改這些默認輸出路徑,后面會有演示。
普通的會用到幾個jar,可以在選項卡中將的運行時的類庫導入
這里scope選項為的含義就是該包只在編譯期起作用,不會被打包進war,jar包由提供。
我們對項目進行部署,查看編譯之后的目錄結構是怎么樣的
以上幾個箭頭和方框僅僅演示了java文件編譯打包到WEB-IFN/文件的過程(在沒有更改編譯輸出和面板中的 路徑的前提下)。
之前保留了一張下web項目完整的映射圖
總結
1、web項目下的源碼文件編譯后最終會放入WEB-INF/目錄下
2、web、、、分別是IDEA和中對web項目根目錄名稱不同的叫法,本質上都是web項目根目錄,對于來說,部署的時候都是將其下的所有文件部署到目錄下的,對于IDEA,是通過創建實例,將某個url映射到具體的磁盤路徑上實現項目的發布。
web、、、目錄就是web應用的根目錄,我們發布項目,挑明了就是將根目下的文件打包發布,那些配置文件之類的去哪了?看前面的編譯流程,所有的配置文件都會被打包進類路徑,為類所用,所以說配置文件最終也會匯聚到web應用根目錄里面去。
網上對于新建一個web工程有很多介紹,在新建web的過程中,有的會特意的去web下新建、lib目錄,并且修改項目編譯輸出目錄?為什么?不這樣做有影響嗎?
為什么要新建一個還要更改其編譯輸出目錄?
即如圖操作:
一個標準的web目錄結構請看上圖,這樣做的原因就是使其目錄結構更加規范(站在人的視角),但是新建一個目錄還沒有完,因為idea是不承認WEB-INF/該路徑是編譯輸出路徑的,必須將上圖橫線部分選中然后瀏覽到具體的目錄才可以,之后idea不會在項目根目錄下新建一個out/目錄,而是直接將WEB-INF/作為編譯輸出。像剛開始沒有新建目錄,web項目也能正常部署,并且應用根目錄下也存在WEB-INF/這個目錄,其實是強大的編譯器幫我們做了。
maven構建web項目
idea文件圖標介紹
下面以一個maven管理下的標準web項目作為示例:
maven管理下,java和目錄下的文件都會被打包編譯到-,也就是我們常說的類路徑。
對于小藍點表示的文件夾則不屬于maven管理,小藍點表示的文件夾代表web資源所在目錄,外部所訪問到的也就是該目錄下的文件。
這里主要介紹web資源目錄即小藍點所在的目錄如何去設置,它和同級別的目錄有什么不同?
對于一個普通的web項目,默認情況下,小藍點自動標識到了web目錄上,如果將其取消會怎么樣?
這里伙伴們可以嘗試一下,新建一個普通的web項目,將其小圓點取消掉,具體的做法如下圖
取消掉之后,小藍點消失,index.jsp也沒有被發布到目錄下,說明Web 設置的目錄下的文件都會被打包進根目錄()下,否則即使web目錄下存在許多靜態資源文件,由于不會被idea打包進去,最終訪問結果404。
這里還有一個選項是Path to Root,這一個路徑規定了讓idea在打包的時候是相對于哪個路徑打包,默認是相對于根路徑,如果我設置為/jsp,那么index.jsp在被打包的時候,就會相對于web根目錄下的/jsp目錄,將index.jsp文件打入它的目錄下,如果該目錄不存在,idea會自動創建。
Web 的正確配置,可以讓idea自動地將目錄下的資源文件成功地發布到目錄下,以便能夠被外部訪問。默認情況下,idea自動將web根目錄即應用部署下的目錄設置為資源路徑,其實我們還可以新增其他的資源路徑,將其他路徑下的文件發布到目錄,如下
在項目根目錄下,新增了一個不合常規的目錄并且將其設置為web資源目錄(小藍點),將其打包到web根下的res目錄
編譯輸出的目錄結構如下:
web資源路徑的設置可以在或者下的web模塊設置:
總結:
1)普通的Java項目web項目src路徑下的java文件和配置文件都會被打包到類路徑下。
2)maven管理的Java項目和web項目,目錄和java目錄都會被編譯到類路徑下出現未結束字符串常量錯誤,重裝瀏覽器能解決嗎,對于web來說還會有進一步轉化,類路徑下的文件最終都會存放在web應用根目錄下的WEB-INF/目錄下。
3)idea默認將web應用根目錄作為資源目錄,其下的文件和文件夾都會打包到根目錄出現未結束字符串常量錯誤,重裝瀏覽器能解決嗎,并部署到。
4)若目錄下存在目錄,它和maven下的目錄是不同的,下的目錄默認打包到根目錄下,maven下的目錄下的文件打包到類路徑下。
思考:對于項目,如果想讓目錄下的文件,能夠被外部訪問到,如何去做?