close

認識與修改pom.xml檔

pom.xml檔是Maven中的主要設定檔案,只要是Maven的專案,一定會配有一個pom.xml。基本上建議所有的JAR檔在這裡進行操作,即便是私人的JAR檔也是,因為如果不寫在這個檔案的話,會影響Maven指令上的運作。下方來簡單的介紹一下pom.xml。

Dependencies JAR檔

在專案的運行中,不免用到一些framework或3rd party的JAR檔,這些東西,會配置在pom.xml檔案的<dependencies>標籤中,如下圖:

其中每一個JAR再用 <dependency>的標籤包起來,這代表這個專案有用到這些JAR檔,而Maven會自動尋找、下載並配置給專案使用。

3rd Party的Plugin

之前談過Maven開放3rd Party的Plugin可供使用,這些3rd Party在使用上是透過Maven的指令,就如同我們下載這個網站範本時一樣,而我們在使用3rd Party時,需要先宣告我們預計要使用的Plugin,宣告的位置在於pom.xml中的<plugins>(新版Maven為<pluginManagement>),如下圖。

每一個Plugin再用<plugin>的標籤包起來。

組態設定

pom.xml提供了一個非常便利的功能,那就是組態的設定,而且可以根據不同的環境,設定不同的組態,舉DB的連線字串來說,我們都知道DB的連線字串會根據資料庫的不同而變更,例如MySQL的連線字串:

jdbc:mysql://localhost/${db.name}

Ppostgresql的連線字串:

jdbc:postgresql://localhost/${db.name}

而Maven可以根據不同的DB設定不同的連線字串,最後在包WAR檔的時候,使用你要的連線字串。

預設的組態設定在pom.xml檔中是以 <properties>標籤包起來的,如下圖:

而特別的組態是用<profile>包起來,並且給予<id>,在需要替換時,下mvn指令時帶入-P id名稱,Maven就會自動幫你把指定的Profile,覆蓋掉原本在 <properties>的內容。

而最後的組態,maven會自動幫你填入專案內的所有properties裡,例如現在網站的jdbc.properties內容:

這個會在最後被打包為war檔時,被pom.xml中的組態設定中替換掉。

pom.xml檔案的修改

大概瞭解pom.xml的結構後,我們就要來修改pom.xml了,首先我們要更改三個參數,分別是:

  1. amp.genericCore→設為false

這是appfuse的plugin設定,主要是要客製化DB時的指令時會用到;否則預設它會幫我們實作好增刪改查四樣功能,但不包含DB的JOIN之類的功能。

  1. amp.fullSource→設為true

一樣是appfuse的plugin設定,主要是客製化網站時候用到,除非你覺得它預設的功能已經完全符合你的需求,否則我們都需要客製化網站。

  1. db.name→設定資料庫的名稱

設定成功的結果如下圖:

下一步,我們要開始著手修改我們網站上的一些內容了,讓它可以更符合我們的需求。

下載完整版的網站程式

我們可以看到目前網站的程式架構長成像下圖:

可以發現它只有action層,manager(service)與dao二層是沒有看到的,所以我們把BaseAction.java打開來看:

可以發現其實appfuse把它包裝起來了,它幫我們做好登入及增刪改查的功能,但今天我如果需要額外新增功能的話,就變得不太方便了,所以我們在一開始要來解決這個問題。

指令appfuse:full-source

請開啟命令列,切入到專案的目錄,並輸入指令:mvn appfuse:full-source(基本上mvn的指令會去查看pom.xml,所以如果該目錄下的話沒有pom.xml的話,會報錯)

我們可以看到指令成功了,回到Eclipseh重新整理後,程式架構如下:

突然冒出了一堆東西,而且manager(service)與dao二層也跑出來了,這時候回去看BaseAction.java時,可以看到:

原本引用的UserManager是appfuse的東西,現在變成是我們程式裡的東西了,這樣子當我們要製作一些客製化的東西時,就變得方便很多了。

修改專案內的錯誤

我們把網頁程式的範本下載到本機上了,但實際上還有不少的問題,現在要帶領大家一個一個地解決,而第一個要解決的,是把專案上可以處理的紅字拿掉。

解決紅字的問題

  1. 首先看到的是src/test/resource中有一個sample-data.xsd,如下圖:

這個檔案開啟後實在看不懂在做什麼,不過xsd主要是在訂義XML的schema用的,所以主要的資料在sample-data.xml中(這個資料的功能會在之後談到),所以xsd不是什麼重要的東西,直接砍掉以解決紅字問題。

  1. 接下來我們來解決scr/main/webapp裡的紅字。

  1. header.jsp,出錯的圖形如下:

可以看到紅線的地方在「ne」,ne其實not equal的意思,所以我們把它變更為下圖,即可解決紅線問題:

  1. default.jsp,出錯的情況跟上方一樣,如下圖,透上一樣的方式即可修改。

  1. scripts/login.js,在重新clean project後,會跳出紅線的錯誤:

基本上第一行與最後一行的問題無法解決(也不要去解決,否則程式會有問題),所以不管如何,這個檔案一定會出現紅字,不過下方的紅字原因是雙引號造成的,只要用活用單、雙引號就可以處理,如下圖:

  1. pom.xml

之前匯入專案時就看到警告說pom.xml檔有一些問題,不過因為下mvn appfuse:full-source會動到pom.xml,所以我們就先放著了,現在可以來處理其中的錯誤了。

pom.xml的問題很簡單,單純是因為maven版的不同造成的,所以只要把XML中的格式改為新版即可,變更方式如下:找到<plugins>位置,加入<pluginManagement>的標籤即可,變更後結果如下圖:

Plugins之前加上<pluginManagement>

Plugins的最後加上</pluginManagement>

專案的紅字處理完後,會變成:

可以看到login.js仍是紅字,不過其他的部份已經OK了;基本上login.js的紅字不會影響專案的運行,所以請讀者先放過它吧,等到你對這個範本的專案夠瞭解,而且真的看不慣它的紅字,再來花時間處理它吧。

修正Eclipse中的build path設定

因為appfuse中幫我們把test case寫好了,所以在專案的build path有做了一些處理,讓test case中的JAVA檔不會影響到程式運行的JAVA檔案,不過這個部份沒有完全處理好,所以我們必須人工介入做一些調整。

首先在Eclipse中選擇專案,按滑鼠右鍵→選擇「Properties」,進入下方視窗後,再選擇「JAVA Build Path」,出現下圖視窗:(下圖為了講解方便,我們把它縮起來。)

可以看到總共有五個部份,其中三個是src/main,二個是src/test的,

  • 所有src/main的正確輸出位置位:MyTestProject/target/classes。

  • 所有src/test的正確輸出位置為:MyTestProject/target/test-classes。

有了這個認知後,我們一個一個來確認它們應該輸出的正確位置:

上面我們可以看到src/main/webapp的output folder是錯誤的,點選這個「Ouput folder」後,利用「Edit」按鈕來修正它:

修正後如下:

修改pom.xml中的組態

在我們準備運行程式前,在pom.xml中有幾個組態需要做特殊處理的,這個部份要留在下完appfuse:full-source指令後進行,因為上述的指令會影響到pom.xml,所以現在我們可以一一來看要修正那些東西了。

Struts2的版本

下載下來的網站範本,是建立在struts2的2.3.7版,如下圖:

因為struts2有版本安全性的問題,所以我們將Strtus2的版本做一下昇級,透過Maven Repository (https://mvnrepository.com/)來查詢目前有什麼版本可用。

可以看到目前的最新版是2.5.2,因為筆者沒有去研究2.3昇級到2.5會有什麼影響(技術追不完啊~~),所以只會昇級到2.3的最後一版2.3.30。

點入2.3.30,可以看到Maven的dependency寫法如下,不過因為Appfuse幫我們整理了,所以我們只要直接替換版本號即可。

昇級struts2後的pom.xml。

儲存後,因為Eclipse支援Maven Plugin,所以Maven會自動去下載最新的JAR檔回本機。

Database組態

Appfuse預設的DB連線是MySQL,所以如果我們開發時是使用使用其他的資料庫進行的話,那就要將<properties>中,跟SQL相關的參數換掉;就算我們是使用MySQL進行開發,也要進行我們的DB設定。跟DB相關組態的設定如下:(在<properties>中)

筆者在本機中安裝了MySQL,並設定root密碼為1111,所以只需要修改jdbc.password即可。

另外,DB的名稱是在<db.name>中做設定的,在<properties>裡:

JUnit版本

這個範本網站已經幫我們把test case寫好,我們可以直接執行,不過當我們實際上去執行時,會發現無法執行,產生的錯誤如下:

這是因為版本不合造成的,所以我們要變更一下JUnit的版本,不過是JUnit-dep的版本,而不是JUnit的版本。找到junit-dep的地方,如下圖:

將版本變更為4.8.1

儲存後再重新執行JUnit,即能得到執行後的結果。

其他

讀者有空可以看一下pom.xml中的一些設定,可以視情況調整版本,或增加一些Dependency的JAR檔。

修改hibernate.properties

我們打開hibernate.properties這個檔案來看,如下圖:

基本上它用到了hibernate的Index技術,將一些資訊抓到硬碟來建立Index,以加快資料的處理,但是因為筆者對這個技術不夠深入瞭解,而且最重要的,它會影響我們在開發時重啟Server的流程(每次重啟要先去清除硬碟的Index資料),所以筆者都會在此把它做關閉的動作,關閉的設定如下:

我們在最後也加了要不要在console顯示SQL語法的控制,以方便我們在Debug上如果對SQL有疑問時,可以回來打開它。

修改了那麼多東西後,下一篇我們要來架設這個網站了。

arrow
arrow

    JAVA Programmer 發表在 痞客邦 留言(1) 人氣()