<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5927278193230729286</id><updated>2012-01-11T21:52:46.247+08:00</updated><category term='開發：壓力測試(JMeter)'/><category term='開發：Maven1'/><category term='開發：Portal(JetSpeed2)'/><category term='開發：Portal(Pluto)'/><category term='開發：Wicket'/><category term='靈光一閃：突如其來的感觸'/><category term='開發：Portal(Liferay)'/><category term='開發：Maven2'/><category term='開發：SubVersion'/><category term='開發：DataBase(OracleXE)'/><category term='書摘：有錢的人想的跟你不一樣'/><category term='開發：軟體工程'/><category term='開發：SpringFramework'/><category term='生活記事'/><category term='開發：JBoss'/><category term='轉載'/><category term='開發：Log4J'/><category term='開發：Java API'/><category term='開發：CruiseControl'/><category term='旅遊規劃'/><category term='日劇'/><category term='發表文章_刊登於RunPC'/><category term='開發：WebTest'/><category term='電影'/><title type='text'>Jazz隨筆</title><subtitle type='html'>保持開放的態度，才能跟著世界一起進步！</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>60</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-4923953309613545260</id><published>2007-08-26T12:23:00.001+08:00</published><updated>2011-10-11T13:44:17.270+08:00</updated><title type='text'>非技術性文章請移駕至…</title><content type='html'>&lt;a href="http://jacklu0827.blogspot.com/"&gt;http://jacklu0827.blogspot.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://test.tw.shopping99.com/ad_banner.jsp"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-4923953309613545260?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/4923953309613545260/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=4923953309613545260' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/4923953309613545260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/4923953309613545260'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/08/blog-post_26.html' title='非技術性文章請移駕至…'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-8462700770812639920</id><published>2007-08-07T14:39:00.000+08:00</published><updated>2007-08-07T14:49:12.292+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='開發：Maven2'/><title type='text'>Maven2 Report使用cobertura-maven-plugin</title><content type='html'>&lt;p class="MsoNormal"&gt;   &lt;span style="font-family: 細明體;"&gt;簡介一下&lt;/span&gt;&lt;span lang="EN-US"&gt;Maven2&lt;/span&gt;&lt;span style="font-family: 細明體;"&gt;中&lt;/span&gt;&lt;span class="fullpost"&gt;&lt;span lang="EN-US"&gt;&lt;span style=""&gt;cobertura-maven-plugin&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 細明體;"&gt;進行&lt;/span&gt;&lt;span class="fullpost"&gt;&lt;span lang="EN-US"&gt;&lt;span style=""&gt;Cobertura &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;Report&lt;/span&gt;&lt;span style="font-family: 細明體;"&gt;的使用。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family: 細明體;"&gt;更詳細的用法請參考：&lt;/span&gt;&lt;a href="http://mojo.codehaus.org/cobertura-maven-plugin/" target="_blank" title="http://mojo.codehaus.org/cobertura-maven-plugin/"&gt;http://mojo.codehaus.org/cobertura-maven-plugin/&lt;/a&gt; &lt;/p&gt; &lt;span class="fullpost"&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;h3&gt;   簡易使用法： &lt;/h3&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family: 細明體;"&gt;基本上只要在&lt;/span&gt;&lt;span lang="EN-US"&gt;reporting&lt;/span&gt;&lt;span style="font-family: 細明體;"&gt;標籤中使用進行&lt;/span&gt;&lt;span lang="EN-US"&gt;plugin&lt;/span&gt;&lt;span style="font-family: 細明體;"&gt;的設定即可。之後在執行&lt;/span&gt;&lt;span lang="EN-US"&gt;maven   site&lt;/span&gt;&lt;span style="font-family: 細明體;"&gt;時就會產生測試覆蓋率&lt;/span&gt;&lt;span style="font-family: 細明體;"&gt;的報表資料。&lt;/span&gt; &lt;/p&gt; &lt;table style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;   &lt;tbody&gt;   &lt;tr&gt;     &lt;td style="border: 0.5pt solid windowtext; padding: 0cm 1.4pt; width: 484.65pt;" valign="top" width="646"&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&amp;lt;reporting&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                &amp;lt;plugin&amp;gt;&lt;br&gt;                             &amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;br&gt;                             &amp;lt;artifactId&amp;gt;cobertura-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br&gt;                             &lt;font color="#ff0000"&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br&gt;                 &amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&amp;lt;/reporting&amp;gt;&lt;/span&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt; &lt;br&gt; 為何我在這裏特別指定了Plugin的版本。&lt;br&gt; 因為截至目前為止&lt;/span&gt;&lt;span class="fullpost"&gt;&lt;span lang="EN-US"&gt;&lt;span style=""&gt;cobertura這個Plugin版本最新為2.1。&lt;br&gt; 但釋出的2.1版中對於產生的報表結果有些問題。&lt;br&gt; 基本上應該經過Maven2中的對Plugin的參數設定才能產生出想要的結果。&lt;br&gt; &lt;br&gt; 但一般使用上並不需要那麼繁覆，而2.0版本只要單純設好Plugin即可產出想要的測試覆蓋率結果。&lt;br&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-8462700770812639920?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/8462700770812639920/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=8462700770812639920' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/8462700770812639920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/8462700770812639920'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/08/maven2-reportcobertura-maven-plugin.html' title='Maven2 Report使用cobertura-maven-plugin'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-4916205678056320819</id><published>2007-08-06T16:47:00.000+08:00</published><updated>2007-08-06T16:52:28.950+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='轉載'/><title type='text'>莫非定律</title><content type='html'>最近我偶爾會跟朋友們或講課時提到「莫非定律」。&lt;br/&gt; 在網路上看到幾篇的描述還滿生動的，整理如下：&lt;br/&gt; &lt;br/&gt; 參考網址：&lt;br/&gt; &lt;a href="http://www.knu.edu.tw/knu1/web/teacher/ericting/Articles/%E8%8E%AB%E9%9D%9E%E5%AE%9A%E5%BE%8B.htm" target="_blank" title="莫非定律"&gt;莫非定律&lt;/a&gt;&lt;br/&gt; &lt;a href="http://140.124.30.80/introduction/lab/%B3%D0%AB%E4web/data/Murphy%27s%20Laws.htm" target="_blank" title="莫非定律前十名"&gt;莫非定律前十名&lt;/a&gt;&lt;br/&gt; &lt;br/&gt; 莫非定律是關於事情如何出錯的幽默規則，簡練地揭露了「人生總難事事順遂」這條顛撲不破的真理。&lt;br/&gt; 一切從莫非原始定律發展出來：會出錯的事，一定出錯。（If something can go wrong, it will.）&lt;br/&gt; &lt;br/&gt; 莫非定律誕生於1949年，以Edward A. Murphy（生於1917年）命名，他是愛德華空軍基地的工程師，專門研究人類對加速度承受的能力。&lt;br/&gt; 他發現同仁總會把加速計的固定器裝反，因而脫口而出他的觀察。有受試者在記者會上引述這句名言，於是很快在航太工程研究者之間散播開來，並陸續有人加上新的法則。&lt;br/&gt; &lt;br/&gt; 1958年，「莫非定律」正式被列入韋氏字典（Webster’s Dictionary）。&lt;br/&gt; 但是莫非本人從未發表過莫非定律，這點倒是蠻符合莫非定律的。&lt;br/&gt; 莫非定律至今已經發展出各種類別，從莫非通則到電腦、家庭、工作、政府等等，各種領域都有人找出屬於他們自己的莫非定律。&lt;br/&gt; &lt;br/&gt;  &lt;span class="fullpost"&gt;  你可曾有過這樣的經驗？不帶傘時，偏偏下雨；帶了傘時，偏不下雨！&lt;br/&gt;  在門外，電話鈴猛響；進了門，就不響了！&lt;br/&gt;  這樣的事兒總是無可奈何 ，但在我們日常生活中卻是常有！&lt;br/&gt; &lt;br/&gt;  「莫非定律」講的正是你我的尷尬，點的正是你我共同的弱點，騷的&lt;br/&gt;  正是你我共同的癢處！自從我無意間在光華商場翻到它：「莫非定律&lt;br/&gt;  」，那一刻起，它便成了我的聖經！我相信讀過它，它也會成為你的！&lt;br/&gt; &lt;br/&gt;  莫非者，查無其人，是個虛構人物：一九五○年代美國海軍的教育宣&lt;br/&gt;  導卡通裡面，有個笨手笨腳的機械士叫做莫非。所謂莫非定律，最&lt;br/&gt;  早就是出自這部卡通。後來又衍生出各式各樣的莫非定律，原來的&lt;br/&gt;  那一則因而又被稱為莫非第一定律 (Murphy's First Law)。&lt;br/&gt; &lt;br/&gt;  莫非定律風行一時，世界各地的人都能琅琅上口。不少好事者也動&lt;br/&gt;  腦筋想出各式各樣的定律原理，其中不乏許多有趣的想法。&lt;br/&gt; &lt;br/&gt;  &lt;font size="6" style="FONT-WEIGHT:bold"&gt;★莫非定律&lt;/font&gt;&lt;br/&gt; &lt;br/&gt;  一、別試圖教豬唱歌，這樣不但不會有結果，還會惹豬不高興!&lt;br/&gt;  二、別跟傻瓜吵架，不然旁人會搞不清楚，到底誰是傻瓜!&lt;br/&gt;  三、不要以為自已很重要，因為沒有你，太陽明天還是一樣從東方升上來!&lt;br/&gt; &lt;br/&gt;  ●開宗明義&lt;br/&gt;  莫非定律；凡事只要有可能出錯，那就一定會出錯。&lt;br/&gt;  莫非哲學；笑一笑，明天未必比今天好。&lt;br/&gt;  莫非準則；東西越好，越不中用。&lt;br/&gt; &lt;br/&gt;  ●開始&lt;br/&gt;  好的開始，未必就有好結果。&lt;br/&gt;  壞的開始，結果往往會更糟。&lt;br/&gt; &lt;br/&gt;  ●人&lt;br/&gt;  你若幫助了一個急需用錢的朋友，他一定會記得你─( 在他下次急需用錢的時 候。)&lt;br/&gt; &lt;br/&gt;  ●領導人&lt;br/&gt;  愚人居高位，正如一個人置身山頂，他會小看每個人。&lt;br/&gt;  每個人也會小看他。&lt;br/&gt; &lt;br/&gt;  ●智愚之間&lt;br/&gt;  有能力的──讓他做。&lt;br/&gt;  沒能力的──教他做。&lt;br/&gt;  做不來的──管理他。&lt;br/&gt; &lt;br/&gt;  ●愛情&lt;br/&gt;  你愛上的人，總以為你愛上他是因為；他使你想起你的老情人。&lt;br/&gt;  你最後硬著頭皮寄出的情書；寄達對方的時間有多長，你反悔的時間就有多長 。&lt;br/&gt; &lt;br/&gt;  ●早到與晚到&lt;br/&gt;  你早到了，會議卻取消。&lt;br/&gt;  你準時到，卻還要等。&lt;br/&gt;  遲到，就是遲了。&lt;br/&gt; &lt;br/&gt;  ●品質保證&lt;br/&gt;  一種產品保證60天不會故障，等於保證第61天一定就會壞掉&lt;br/&gt; &lt;br/&gt;  ●東西&lt;br/&gt;  東西久久都派不上用場，就可以丟掉。&lt;br/&gt;  東西一丟掉，往往就必須要用它。&lt;br/&gt; &lt;br/&gt;  ●尋找失物&lt;br/&gt;  你丟掉東西時，最先去找的地方，往往也是可能找到的最後一個地方。&lt;br/&gt;  你往往會找到不是你正想找的東西。&lt;br/&gt; &lt;br/&gt;  ●精彩&lt;br/&gt;  你出去買爆米花的時候，銀幕上偏偏就出現了精彩鏡頭。&lt;br/&gt; &lt;br/&gt;  ●排隊&lt;br/&gt;  另一排總是動的比較快。&lt;br/&gt;  你換到另一排，你原來站的那一排，就開始動的比較快了。&lt;br/&gt;  你站的越久，越有可能是站錯了排。&lt;br/&gt; &lt;br/&gt;  ●失事報導&lt;br/&gt;  失事的地點越遠，傷亡的人數就得越多，否則寫不成一則故事。&lt;br/&gt; &lt;br/&gt;  ●攜伴出遊&lt;br/&gt;  你攜伴出遊，越不想讓人看見，越會遇見熟人。&lt;br/&gt; &lt;br/&gt;  ●相對論&lt;br/&gt;  一分鐘有多長？&lt;br/&gt;  這要看你是蹲在廁所裡面，還是等在廁所外面。&lt;br/&gt; &lt;br/&gt;  ●撥錯電話號碼&lt;br/&gt;  撥錯電話號碼時，總不會打不通。&lt;br/&gt; &lt;br/&gt;  ●結局&lt;br/&gt;  有個恐怖的結局，總好過恐怖綿綿無絕期。&lt;br/&gt; &lt;br/&gt; &lt;font size="6"&gt;莫非定律前十名&lt;br/&gt; Top Ten Murphy's Laws&lt;/font&gt;&lt;br/&gt; &lt;br/&gt; 1.Notheing is as easy as it looks.&lt;br/&gt;  萬物皆比表象難&lt;br/&gt; &lt;br/&gt; 2.Everything takes longer than you think.&lt;br/&gt;  凡事耗費的時間都比原先料想的長。&lt;br/&gt; &lt;br/&gt; 3.Anything that can go wrong will go wrong.&lt;br/&gt;  可能會出錯的地方定會出錯。&lt;br/&gt; &lt;br/&gt; 4.If there is a possibility of several things going wrong,&lt;br/&gt; the one that will cause the most damage will be the one to go wrong.&lt;br/&gt;  如果有好幾件事都有出錯的可能，定會出錯者就會是可能造成最嚴重損失的那一個。&lt;br/&gt; &lt;br/&gt; 5.If any things simply cannot go wrong, it will anyway.&lt;br/&gt;  鐵定不會出錯的的是一定會砸鍋。&lt;br/&gt; &lt;br/&gt; 6.If everything seems to be go wrong, you have obviously overlooked something.&lt;br/&gt;  如果事事乍看順利，那顯然是由某個地方沒有注意到。&lt;br/&gt; &lt;br/&gt; 7.Nature always sides with the hidden flaw.&lt;br/&gt;  所有的隱藏缺陷都會因為各種自然因素而被暴露出來。&lt;br/&gt; &lt;br/&gt; 8.It's impossible to make anything foolproof because fools are so ingenious.&lt;br/&gt;  要把所有東西都弄得萬無一失是不可能的，因為蠢蛋都太天才了，肯定會搞砸。&lt;br/&gt; &lt;br/&gt; 9.Where you set out to do something, something else must be done first.&lt;br/&gt;  每當你準備要做某件事時，就會有另一件得先處理的事情冒出來。&lt;br/&gt; &lt;br/&gt; 10.Every solution breeds new problems.&lt;br/&gt;  每一個問題的解決都會引發新的問題。&lt;br/&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-4916205678056320819?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/4916205678056320819/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=4916205678056320819' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/4916205678056320819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/4916205678056320819'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/08/blog-post.html' title='莫非定律'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-8935789813399504139</id><published>2007-08-05T19:03:00.000+08:00</published><updated>2007-08-05T19:08:07.132+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='開發：Maven1'/><category scheme='http://www.blogger.com/atom/ns#' term='發表文章_刊登於RunPC'/><title type='text'>(2006.08月號--151期) 如何以Maven協助Hibernate開發</title><content type='html'>&lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在今日的企業級應用開發環境中，物件導向開發方式已成為主流，但在實際的應用中，物件只存在於程式與記憶體之中，並不能直接進行儲存。如果想要永久保存物件狀態，則必須要進行物件的持久化，也就是把物件狀態儲存進專門的資料庫系統中，而目前最廣泛使用的關聯式資料庫&lt;/span&gt;&lt;/font&gt;(RDBMS)&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，並不支援儲存物件導向數據資料。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;因此傳統的關聯式資料庫程式設計，必須直接在程式中以&lt;/span&gt;&lt;/font&gt;Hard   code&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的方式撰寫&lt;/span&gt;&lt;/font&gt;SQL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;語法進行開發，而以&lt;/span&gt;&lt;/font&gt;Hard   code&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;撰寫&lt;/span&gt;&lt;/font&gt;SQL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;語法的方式，相對的也代表了開發的應用程式無法跨資料庫平台。雖然&lt;/span&gt;&lt;/font&gt;JDBC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;統一了&lt;/span&gt;&lt;/font&gt;Java&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;程式與資料庫之間的操作介面，讓開發人員可以不用了解與資料庫相關特定的&lt;/span&gt;&lt;/font&gt;API&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;操作，然而自行撰寫&lt;/span&gt;&lt;/font&gt;SQL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;語法或再次將&lt;/span&gt;&lt;/font&gt;SQL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;語法進行封裝仍是不可避免的事，而在物件導向程式設計之中，物件與關聯式資料並無法以簡單的方式進行轉換，導致了資料永續性的開發上受到了先天的限制。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   ORM(Object/Relational   Mapping)&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;物件&lt;/span&gt;&lt;/font&gt;-&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;關聯映射技術，在該問題的處理上已經有完善的解決方案，而目前在開放原始碼的技術中，最受人矚目的&lt;/span&gt;&lt;/font&gt;ORM&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;實作，應該就是&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;了。在本期中筆者將介紹如何使用&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;協助&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行快速開發，而對於&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的基本觀念，筆者在此並不詳述，請參考之前刊載於&lt;/span&gt;&lt;/font&gt;RunPC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中的相關文章。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;span class="fullpost"&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #808080; PADDING:0.01in 0.06in; BACKGROUND:#efefef none repeat scroll 0%; MARGIN-BOTTOM:0in; -moz-background-clip:-moz-initial; -moz-background-origin:-moz-initial; -moz-background-inline-policy:-moz-initial"&gt;   &lt;span lang="zh-TW"&gt;註：關於&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;Hibernate&lt;/font&gt;&lt;span lang="zh-TW"&gt;文章，請參考&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;RunPC&lt;/font&gt;&lt;span lang="zh-TW"&gt;於&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;128&lt;/font&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;129&lt;/font&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;130&lt;/font&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;132&lt;/font&gt;&lt;span lang="zh-TW"&gt;期，資料永續層解決方案&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;Hibernate&lt;/font&gt;&lt;span lang="zh-TW"&gt;的相關介紹，作者為&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;Mark   Ho&lt;/font&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;h1 class="western"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/font&gt;hibernatedoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;環境&lt;/span&gt;&lt;/font&gt; &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在開發過程中&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行物件與關聯式資料的處理過程中，需要有一份映射文件，用以描述物件與關聯式資料的轉換關係，例如：資料型態的對應、資料欄位長度的限制、單向關聯、雙向關聯、一對多、一對一與多對多關聯等等的設定。一般而言映射文件命名通常為&lt;/span&gt;&lt;/font&gt;*.hbm.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;然而在實際開發上當物件作了修改或重構後，必須對映射文件進行維護。如此的開發方式相當的不直覺與不方便。並且學習映射文件的撰寫不是一件簡單的事。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;因此我們換一個角度思考，如果在物件的設計中，順手將這些轉換關係的資訊寫在物件中，由物件編譯過程中直接幫我們產生相關的映射文件，則我們只要維護一份原始碼即可，當進行修改與重構的過程中，映射檔案的變更也將立即的反應出來。在此我們將使用&lt;/span&gt;&lt;/font&gt;XDoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行&lt;/span&gt;&lt;/font&gt;Code   generate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;來達到這個目的。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #808080; PADDING:0.01in 0.06in; BACKGROUND:#efefef none repeat scroll 0%; MARGIN-BOTTOM:0in; -moz-background-clip:-moz-initial; -moz-background-origin:-moz-initial; -moz-background-inline-policy:-moz-initial"&gt;   &lt;span lang="zh-TW"&gt;註：有關於&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;XDoclet&lt;/font&gt;&lt;span lang="zh-TW"&gt;相關觀念的文章，請參考&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;RunPC&lt;/font&gt;&lt;span lang="zh-TW"&gt;於&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;130&lt;/font&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;131&lt;/font&gt;&lt;span lang="zh-TW"&gt;期，&lt;/span&gt;&lt;font face="細明體, MingLiU, monospace"&gt;XDoclet&lt;/font&gt;&lt;span lang="zh-TW"&gt;入門篇與進階篇，作者為歐宣修。&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;首先請參考筆者於&lt;/span&gt;&lt;/font&gt;148&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;期中的&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;文章，使用&lt;/span&gt;&lt;/font&gt;Maven   Genapp   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;產生專案，並且參考設定   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;將&lt;/span&gt;&lt;/font&gt;project.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行修改，在該檔中可以看到我們在&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;相依的&lt;/span&gt;&lt;/font&gt;plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;套件中加入了&lt;/span&gt;&lt;/font&gt;maven-xdoclet-plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。接著參考設定   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;對   &lt;/span&gt;&lt;/font&gt;project.properties&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;加入設定參數。說明請參考表   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;中關於&lt;/span&gt;&lt;/font&gt;hibernatedoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的參數設定。最後再對&lt;/span&gt;&lt;/font&gt;maven.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行設定，參考設定   &lt;font face="Times New Roman, serif"&gt;3&lt;/font&gt;中可知當我們執行&lt;/span&gt;&lt;/font&gt;java:compile&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;這個&lt;/span&gt;&lt;/font&gt;goal&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;前會先行運作&lt;/span&gt;&lt;/font&gt;xdoclet:hibernatedoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;協助我們產生&lt;/span&gt;&lt;/font&gt;Mapping   file&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139526715"&gt;&lt;/a&gt;&lt;a name="_Ref139526707"&gt;&lt;/a&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; project.xml &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;project&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;pomVersion&amp;gt;3&amp;lt;/pomVersion&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;artifactId&amp;gt;hibernate-example&amp;lt;/artifactId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;groupId&amp;gt;hibernate-example&amp;lt;/groupId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;name&amp;gt;Example Hibernate Application&amp;lt;/name&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;currentVersion&amp;gt;1.0&amp;lt;/currentVersion&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;dependencies&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;groupId&amp;gt;xdoclet&amp;lt;/groupId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;artifactId&amp;gt;maven-xdoclet-plugin&amp;lt;/artifactId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;version&amp;gt;1.2.3&amp;lt;/version&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;type&amp;gt;plugin&amp;lt;/type&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   …&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中間省略…&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/dependencies&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   …&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中間省略…&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/project&amp;gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139528564"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt; &lt;/span&gt;&lt;/font&gt; project.properties &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   ##################################### &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   # hibernatedoclet properties &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   ##################################### &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.xdoclet.hibernatedoclet.fileset.0=true &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.xdoclet.hibernatedoclet.fileset.0.sourcedir=${maven.src.dir}/java &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.xdoclet.hibernatedoclet.fileset.0.include=**/*.java &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.xdoclet.hibernatedoclet.fileset.0.exclude= &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.xdoclet.hibernatedoclet.hibernate.0=true &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.xdoclet.hibernatedoclet.hibernate.0.Version=3.0 &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.xdoclet.hibernatedoclet.destDir=${maven.build.dest} &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139538822"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定   &lt;font face="Times New Roman, serif"&gt;3&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; maven.xml &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;project &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   xmlns:j="jelly:core" &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   xmlns:ant="jelly:ant"&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;preGoal name="java:compile"&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;attainGoal name="xdoclet:hibernatedoclet"/&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/preGoal&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/project&amp;gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139529322"&gt;&lt;/a&gt;&lt;a name="_Ref139529316"&gt;&lt;/a&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;表   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   maven-xdoclet-plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;table border="1" bordercolor="#000000" cellpadding="2" cellspacing="0" width="674"&gt;   &lt;col width="314"&gt; &lt;col width="350"&gt; &lt;tbody&gt;   &lt;tr valign="top"&gt;     &lt;td width="314"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;參數&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="350"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;說明&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="314"&gt;       &lt;p class="western"&gt;         maven.xdoclet.hibernatedoclet.fileset.[index]       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="350"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/font&gt;hibernatedoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;引用的檔案集設定，&lt;/span&gt;&lt;/font&gt;index&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;值為&lt;/span&gt;&lt;/font&gt;0~9&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;共&lt;/span&gt;&lt;/font&gt;10&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;組設定，也就是說最多可以針對&lt;/span&gt;&lt;/font&gt;10&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;組路徑下的原始檔進行&lt;/span&gt;&lt;/font&gt;hibernatedoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/font&gt;Code         generate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，預設&lt;/span&gt;&lt;/font&gt;index=0&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;為啟用。若指定的&lt;/span&gt;&lt;/font&gt;maven.xdoclet.hibernatedoclet.fileset.[index]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;未設定，則以下相對應的檔案集設定即無效。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="314"&gt;       &lt;p class="western"&gt;         maven.xdoclet.hibernatedoclet.fileset.[index].sourcedir       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="350"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;指定檔案集原始碼放置路徑，預設為&lt;/span&gt;&lt;/font&gt;${maven.src.dir}/java       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="314"&gt;       &lt;p class="western"&gt;         maven.xdoclet.hibernatedoclet.fileset.[index].include       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="350"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;指定檔案集引入檔案規則，預設為&lt;/span&gt;&lt;/font&gt;**/*.java       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="314"&gt;       &lt;p class="western"&gt;         maven.xdoclet.hibernatedoclet.fileset.[index].exclude       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="350"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;指定檔案集排除檔案規則，預設不排除任何檔。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="314"&gt;       &lt;p class="western"&gt;         maven.xdoclet.hibernatedoclet.hibernate.[index]       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="350"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定對&lt;/span&gt;&lt;/font&gt;maven.xdoclet.hibernatedoclet.fileset.[index]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行&lt;/span&gt;&lt;/font&gt;hibernatedoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;是否生效，預設為&lt;/span&gt;&lt;/font&gt;true&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，若為&lt;/span&gt;&lt;/font&gt;false&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;則對指定的檔案集不執行&lt;/span&gt;&lt;/font&gt;hibernatedoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="314"&gt;       &lt;p class="western"&gt;         maven.xdoclet.hibernatedoclet.hibernate.[index].Version       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="350"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定對&lt;/span&gt;&lt;/font&gt;maven.xdoclet.hibernatedoclet.fileset.[index]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行&lt;/span&gt;&lt;/font&gt;hibernatedoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;所產生的&lt;/span&gt;&lt;/font&gt;*.hbm.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;檔案可使用於&lt;/span&gt;&lt;/font&gt;hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;那個版本，預設為&lt;/span&gt;&lt;/font&gt;1.1&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;版，目前可設定的值為目前有&lt;/span&gt;&lt;/font&gt;1.1&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、         &lt;/span&gt;&lt;/font&gt;2.0&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;2.1&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;3.0&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="314"&gt;       &lt;p class="western"&gt;         maven.xdoclet.hibernatedoclet.destDir       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="350"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;所有檔案集產生出的&lt;/span&gt;&lt;/font&gt;*.hbm.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;放置的目的路徑。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;h1 class="western"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;建立&lt;/span&gt;&lt;/font&gt;Domain   Object&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;並產生&lt;/span&gt;&lt;/font&gt;Mapping   File &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;當上一節的設定完成後，我們正式建立&lt;/span&gt;&lt;/font&gt;Domain   Object&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，並試圖產生&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;所需要的&lt;/span&gt;&lt;/font&gt;Mapping   file&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。這裏我們&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;是以&lt;/span&gt;&lt;/font&gt;POJO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;定義&lt;/span&gt;&lt;/font&gt;Domain   Object&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，而&lt;/span&gt;&lt;/font&gt;POJO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;就是所謂的&lt;/span&gt;&lt;/font&gt;Plain   Ordinary Java   Object&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，字面上來講就是無格式普通&lt;/span&gt;&lt;/font&gt;Java   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;物件，簡單的可以理解爲一個不包含邏輯程式碼的值物件。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;我們在此建立二個&lt;/span&gt;&lt;/font&gt;POJO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，分別是&lt;/span&gt;&lt;/font&gt;User(&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;使用者&lt;/span&gt;&lt;/font&gt;)&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/font&gt;Role(&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;所屬角色&lt;/span&gt;&lt;/font&gt;)&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;作為開始。這時&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;專案架構應該如資料結構   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;所示，圖   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;展示了類別屬性與其&lt;/span&gt;&lt;/font&gt;set&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;get&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;相關&lt;/span&gt;&lt;/font&gt;method&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。接著參考程式   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;、程式   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;分別在類別中加入&lt;/span&gt;&lt;/font&gt;&amp;lt;hibernatedoclet&amp;gt;Tag&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定，在此我們簡單的了解一下相關屬性用途，若讀者希望了解更詳細的屬性設定，可參考&lt;/span&gt;&lt;/font&gt;XDoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;官方網站&lt;/span&gt;&lt;/font&gt;http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;ol&gt;   &lt;li&gt;     &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;       @hibernate.class&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：該&lt;/span&gt;&lt;/font&gt;Tag&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;用於宣告定義持久化類別，需放置於&lt;/span&gt;&lt;/font&gt;Class&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;宣告的上方。&lt;/span&gt;&lt;/font&gt;     &lt;/p&gt;     &lt;ol&gt;       &lt;li&gt;         &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;           table&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：指定持久化類別對應資料庫&lt;/span&gt;&lt;/font&gt;Table&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;名稱。&lt;/span&gt;&lt;/font&gt;         &lt;/p&gt;       &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;       @hibernate.id&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：定義主鍵欄位相關屬性。&lt;/span&gt;&lt;/font&gt;     &lt;/p&gt;     &lt;ol&gt;       &lt;li&gt;         &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;           column&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：指定欄位對應資料庫欄位名稱，若未指定則使用相對應的&lt;/span&gt;&lt;/font&gt;property&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;名稱。&lt;/span&gt;&lt;/font&gt;         &lt;/p&gt;       &lt;/li&gt;       &lt;li&gt;         &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;           generator-class&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：主鍵產生器屬性，目前有&lt;/span&gt;&lt;/font&gt;uuid.hex&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;uuid.string&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;increment&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;assigned&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;native&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;identity&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;sequence&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;hilo&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;seqhilo&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;foreign&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;可供設定。&lt;/span&gt;&lt;/font&gt;         &lt;/p&gt;       &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;       @hibernate.property&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：定義持久化類別對應資料庫欄位相關屬性。&lt;/span&gt;&lt;/font&gt;     &lt;/p&gt;     &lt;ol&gt;       &lt;li&gt;         &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;           column&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：指定欄位對應資料庫欄位名稱，若未指定則使用相對應的&lt;/span&gt;&lt;/font&gt;property&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;名稱。&lt;/span&gt;&lt;/font&gt;         &lt;/p&gt;       &lt;/li&gt;       &lt;li&gt;         &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;           length&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：指定對應資料庫欄位長度。&lt;/span&gt;&lt;/font&gt;         &lt;/p&gt;       &lt;/li&gt;       &lt;li&gt;         &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;           not-null&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：是否允許欄位存放&lt;/span&gt;&lt;/font&gt;null&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;值。&lt;/span&gt;&lt;/font&gt;         &lt;/p&gt;       &lt;/li&gt;       &lt;li&gt;         &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;           unique&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：是否允許資料庫欄位值重覆&lt;/span&gt;&lt;/font&gt;         &lt;/p&gt;       &lt;/li&gt;       &lt;li&gt;         &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;           type&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：對應資料庫欄位型態&lt;/span&gt;&lt;/font&gt;         &lt;/p&gt;       &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt; &lt;/ol&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;另外，讀者可能發現，在範例中的二個&lt;/span&gt;&lt;/font&gt;POJO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;都實現了&lt;/span&gt;&lt;/font&gt;java.io.Serializable&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;介面，這是&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;規範中所提到的，但目前大多數資料並未說明為何必須實現&lt;/span&gt;&lt;/font&gt;Serializable&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。事實上&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;並不要求持久化類必須實現&lt;/span&gt;&lt;/font&gt;Serializable&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;介面，但是對於採用分散式架構的&lt;/span&gt;&lt;/font&gt;Java&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;應用，當&lt;/span&gt;&lt;/font&gt;Java&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;物件在不同的分散節點之間傳輸時&lt;/span&gt;&lt;/font&gt;(&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;例如：&lt;/span&gt;&lt;/font&gt;RMI)&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，這個物件所屬的類別必須實現&lt;/span&gt;&lt;/font&gt;Serializable&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;介面，此外，在&lt;/span&gt;&lt;/font&gt;Java   Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;應用中，如果希望對&lt;/span&gt;&lt;/font&gt;HttpSession&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中存放的&lt;/span&gt;&lt;/font&gt;Java&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;物件進行持久化，那麼這個&lt;/span&gt;&lt;/font&gt;Java&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;物件所屬的類也必須實現&lt;/span&gt;&lt;/font&gt;Serializable&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;介面，因此若只拿&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;作單純資料庫應用可不遵守該規定外，&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在&lt;/span&gt;&lt;/font&gt;J2EE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的應用上都是必須實現&lt;/span&gt;&lt;/font&gt;Serializable&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;經過&lt;/span&gt;&lt;/font&gt;maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的設定與撰寫完&lt;/span&gt;&lt;/font&gt;POJO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;後，在&lt;/span&gt;&lt;/font&gt;Console&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;下執行&lt;/span&gt;&lt;/font&gt;maven   java:compile&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，當指令運作結束後，在&lt;/span&gt;&lt;/font&gt;[hibernate_example/target/classes/demo/model]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;路徑下將會出現&lt;/span&gt;&lt;/font&gt;User.hbm.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/font&gt;Role.hbm.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/font&gt;Hibernate   Mapping   file&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139535743"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;資料結構   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;hibernate-example&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;|--src&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| --main&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| --java&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| --demo&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| --model&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| |--Role.java&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| --User.java&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;|--maven.xml&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;|--project.properties&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;--project.xml&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;img align="bottom" border="0" height="258" name="graphics1" src="http://docs.google.com/File?id=ddgh9kcq_194jhd7d8gv" width="668"/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139536386"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; Domain   Object&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;類別圖&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139544440"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;程式   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; User.java &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   package demo.model; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   import java.io.Serializable; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   /** &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   * @hibernate.class table="app_user" &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   */ &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   public class User implements Serializable { &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   private Long id; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   private String username; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   private String password; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   /** &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   * @hibernate.id column="id" generator-class="native" &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   */ &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   public Long getId() { &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   return id; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   } &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   /** &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   * @hibernate.property length="50" not-null="true" unique="true" &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   */ &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   public String getUsername() { &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   return username; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   } &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   /** &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   * @hibernate.property column="password" not-null="true" &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   */ &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   public String getPassword() { &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   return password; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   } &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   …set method   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;省略…&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   } &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139544486"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;程式   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; Role.java &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   package demo.model; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   import java.io.Serializable; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   /** &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   * @hibernate.class table="role" &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   */ &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   public class Role implements Serializable { &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   private Long id; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   private String name; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   private String description; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   /** &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   * @hibernate.id column="id" generator-class="native" &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   */ &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   public Long getId() { &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   return id; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   } &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   /** &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   * @hibernate.property column="name" length="20" &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   */ &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   public String getName() { &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   return name; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   } &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   /** &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   * @hibernate.property column="description" length="64" &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   */ &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   public String getDescription() { &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   return description; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   } &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   …set method   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;省略…&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   } &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;h1 class="western"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;使用&lt;/span&gt;&lt;/font&gt;Hibernate   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;建立&lt;/span&gt;&lt;/font&gt;Table   Schema &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;到目前為止我們設定了&lt;/span&gt;&lt;/font&gt;hibernatedoclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、建立了&lt;/span&gt;&lt;/font&gt;POJO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的類別並自動產生了相關的&lt;/span&gt;&lt;/font&gt;Mapping   file&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。假設這時資料庫&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;早已建立好的話，就可以開始使用&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行&lt;/span&gt;&lt;/font&gt;DAO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的開發與測試了。倘若&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;尚未建立呢？需要自行建立嗎？而自行建立則又會引發另一個問題，&lt;/span&gt;&lt;/font&gt;POJO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的設計是基於&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;所建立的。當日後&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;修改時也必須對應相關的&lt;/span&gt;&lt;/font&gt;POJO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;或&lt;/span&gt;&lt;/font&gt;Mapping   file&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行維護。一次、二次還可以接受，但在專案開發的過程中需求永遠在變化，很難保證&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;不會一直變更，一旦次數一多，將引發難以重構的災難。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中可以透過&lt;/span&gt;&lt;/font&gt;net.sf.hibernate.tool.hbm2ddl.SchemaExportTask&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;協助我們將&lt;/span&gt;&lt;/font&gt;*.hbm.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;再次轉化成相對應資料庫的&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，而在&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;上可以使用&lt;/span&gt;&lt;/font&gt;Hibernate   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;協助進行&lt;/span&gt;&lt;/font&gt;SchemaExport&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。基於某些因素&lt;/span&gt;&lt;/font&gt;Hibernate   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;最新版本為&lt;/span&gt;&lt;/font&gt;1.3&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;並且已有一段時間沒有新版本釋出，該版本並未支援&lt;/span&gt;&lt;/font&gt;Hibernate   3.X&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，若讀者使用&lt;/span&gt;&lt;/font&gt;Hibernate   2&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發的話，可以直接進行下載。在本次範例中我們將下載經過&lt;/span&gt;&lt;/font&gt;1.3&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;版本修改的&lt;/span&gt;&lt;/font&gt;Hibernate   Plugin1.4   (&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;請讀者參考相關資源&lt;/span&gt;&lt;/font&gt;4&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行下載&lt;/span&gt;&lt;/font&gt;)&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;將&lt;/span&gt;&lt;/font&gt;[%MAVEN_HOME%/plugins]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;下的&lt;/span&gt;&lt;/font&gt;1.3&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;版移除，放置下載完成的&lt;/span&gt;&lt;/font&gt;maven-hibernate-plugin-1.4.jar&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;於該資料夾內即完成了&lt;/span&gt;&lt;/font&gt;hibernate   plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的安裝。接著參考設定   &lt;font face="Times New Roman, serif"&gt;4&lt;/font&gt;在&lt;/span&gt;&lt;/font&gt;project.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中加入相依套件，此處的設定中我們加入了&lt;/span&gt;&lt;/font&gt;maven-hibernate-plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的設定與&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行&lt;/span&gt;&lt;/font&gt;SchemaExport&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;時所需的套件，另外為了示範&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;跨資料庫平台的特色，在此引入而&lt;/span&gt;&lt;/font&gt;PostgreSql&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/font&gt;Hsqldb&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;二個開放原始碼資料庫的&lt;/span&gt;&lt;/font&gt;JDBC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;協助進行測試。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在進行&lt;/span&gt;&lt;/font&gt;SchemaExport&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;功能時可以設定是否正式進行資料庫的更新，或者只是單純的產生資料庫&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的文字檔供開發人員進行修改或使用。為此必須正確設定&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與資料庫連結的相關參數，參考設定   &lt;font face="Times New Roman, serif"&gt;5&lt;/font&gt;與設定   &lt;font face="Times New Roman, serif"&gt;6&lt;/font&gt;比較範例中二種資料庫設定的異同處，而關於&lt;/span&gt;&lt;/font&gt;hibernate.dialect&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;參數的設定，請參考&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;官方參考手冊。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;最後參考設定   &lt;font face="Times New Roman, serif"&gt;7&lt;/font&gt;加入&lt;/span&gt;&lt;/font&gt;Hibernate   plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;所需的參數，讀者對照表   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;即可知相關參數的意義為何。當設定完成後於&lt;/span&gt;&lt;/font&gt;Console&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;下執行&lt;/span&gt;&lt;/font&gt;maven   hibernate:schema-export&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;即可進行&lt;/span&gt;&lt;/font&gt;SchemaExport&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，在此我們分別為了&lt;/span&gt;&lt;/font&gt;PostgreSql&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/font&gt;Hsqldb&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;作了&lt;/span&gt;&lt;/font&gt;SchemaExport&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，請參考圖   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;與圖   &lt;font face="Times New Roman, serif"&gt;3&lt;/font&gt;的結果。若讀者不希望直接進行資料庫的更新，則可將&lt;/span&gt;&lt;/font&gt;project.properties&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;檔中參數&lt;/span&gt;&lt;/font&gt;maven.hibernate.text&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設為&lt;/span&gt;&lt;/font&gt;yes&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;再次進行&lt;/span&gt;&lt;/font&gt;hibernate:schema-export&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，即可於&lt;/span&gt;&lt;/font&gt;[target/schema/schema.sql]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;檔中查看匯出的資料庫&lt;/span&gt;&lt;/font&gt;SQL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;語法。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   hibernate:schema-export&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;這個&lt;/span&gt;&lt;/font&gt;goal&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;可以協助我們進行建立資料庫&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，而當進行&lt;/span&gt;&lt;/font&gt;POJO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的修改並重新產生&lt;/span&gt;&lt;/font&gt;Mapping   file&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;時，可運行&lt;/span&gt;&lt;/font&gt;maven   hibernate:schema-update&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，該指令將可在不移除資料表的清況下進行資料庫&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的更新，對於&lt;/span&gt;&lt;/font&gt;DataBase   Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的重構有很大的幫助。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139965958"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定   &lt;font face="Times New Roman, serif"&gt;4&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   project.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;增添相依套件&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;groupId&amp;gt;maven&amp;lt;/groupId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;artifactId&amp;gt;maven-hibernate-plugin&amp;lt;/artifactId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;type&amp;gt;plugin&amp;lt;/type&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;groupId&amp;gt;postgresql&amp;lt;/groupId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;artifactId&amp;gt;postgresql&amp;lt;/artifactId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;version&amp;gt;8.1-407.jdbc3&amp;lt;/version&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;groupId&amp;gt;hsqldb&amp;lt;/groupId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;artifactId&amp;gt;hsqldb&amp;lt;/artifactId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;version&amp;gt;1.7.3.3&amp;lt;/version&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;groupId&amp;gt;geronimo-spec&amp;lt;/groupId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;artifactId&amp;gt;geronimo-spec-jta&amp;lt;/artifactId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;version&amp;gt;1.0.1B-rc4&amp;lt;/version&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;groupId&amp;gt;commons-lang&amp;lt;/groupId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;artifactId&amp;gt;commons-lang&amp;lt;/artifactId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;version&amp;gt;2.1&amp;lt;/version&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;dependency&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;groupId&amp;gt;hibernate&amp;lt;/groupId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;artifactId&amp;gt;hibernate&amp;lt;/artifactId&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;version&amp;gt;3.0.5&amp;lt;/version&amp;gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &amp;lt;/dependency&amp;gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139966899"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定   &lt;font face="Times New Roman, serif"&gt;5&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   database-postgresql.properties &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.connection.url=jdbc:postgresql://localhost/demo &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.connection.driver_class=org.postgresql.Driver &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.connection.show_sql=true &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.connection.username=test &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.connection.password=test &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139966906"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定   &lt;font face="Times New Roman, serif"&gt;6&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   database-hsqldb.properties &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.dialect=org.hibernate.dialect.HSQLDialect &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.connection.url=jdbc:hsqldb:hsql://localhost/demo &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.connection.driver_class=org.hsqldb.jdbcDriver &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.connection.show_sql=true &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.connection.username=sa &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   hibernate.connection.password= &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139967831"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定   &lt;font face="Times New Roman, serif"&gt;7&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   project.properties&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;增添相關屬性設定&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   ##################################### &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   # hibernate properties &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   ##################################### &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.hibernate.properties=${basedir}/database-postgresql.properties &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   #maven.hibernate.properties=${basedir}/database-hsqldb.properties &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.hibernate.quiet=no &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.hibernate.text=no &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.hibernate.drop=no &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.hibernate.delimiter=; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.hibernate.output.dir=${maven.build.dir}/schema &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   maven.hibernate.output.file=${maven.hibernate.output.dir}/schema.sql &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139969726"&gt;&lt;/a&gt;&lt;a name="_Ref139969721"&gt;&lt;/a&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;表   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   maven-hibernate-plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;table border="1" bordercolor="#000000" cellpadding="2" cellspacing="0" width="674"&gt;   &lt;col width="172"&gt; &lt;col width="492"&gt; &lt;tbody&gt;   &lt;tr valign="top"&gt;     &lt;td width="172"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;參數&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="492"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;說明&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="172"&gt;       &lt;p class="western"&gt;         maven.hibernate.properties       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="492"&gt;       &lt;p class="western"&gt;         hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;參數設定檔放置路徑，無論直接進行資料庫的更新或單純產出&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的文字檔，皆必須要進行該項設定主要以&lt;/span&gt;&lt;/font&gt;hibernate.dialect&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;參數決定使用何種資料庫方言。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="172"&gt;       &lt;p class="western"&gt;         maven.hibernate.text       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="492"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;若為&lt;/span&gt;&lt;/font&gt;yes&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;則執行&lt;/span&gt;&lt;/font&gt;Schema         Export&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;時將直接匯出&lt;/span&gt;&lt;/font&gt;SQL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;成文字檔，並不會進行資料庫的更新，若設為&lt;/span&gt;&lt;/font&gt;no&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;則直接進行資料庫&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的更新，預設為&lt;/span&gt;&lt;/font&gt;no       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="172"&gt;       &lt;p class="western"&gt;         maven.hibernate.quiet       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="492"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;是否顯示詳細的&lt;/span&gt;&lt;/font&gt;Schema         Export&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;資訊，例：當&lt;/span&gt;&lt;/font&gt;maven.hibernate.text=no&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，&lt;/span&gt;&lt;/font&gt;maven.hibernate.quiet=yes&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;時，將直接進行資料庫&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的更新，&lt;/span&gt;&lt;/font&gt;Console&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;下不會顯示任何訊息，預設為&lt;/span&gt;&lt;/font&gt;yes       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="172"&gt;       &lt;p class="western"&gt;         maven.hibernate.drop       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="492"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;是否只執行&lt;/span&gt;&lt;/font&gt;drop&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;資料表的動作，若&lt;/span&gt;&lt;/font&gt;maven.hibernate.text=yes&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;則匯出&lt;/span&gt;&lt;/font&gt;SQL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;檔將只包含&lt;/span&gt;&lt;/font&gt;drop         table&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/font&gt;SQL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;語法。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="172"&gt;       &lt;p class="western"&gt;         maven.hibernate.delimiter       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="492"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;分隔&lt;/span&gt;&lt;/font&gt;SQL         Commands&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的定義符號，預設值為空字串，而大多數狀況使用”&lt;/span&gt;&lt;/font&gt;;”&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;作為分隔符號。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="172"&gt;       &lt;p class="western"&gt;         maven.hibernate.output.dir       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="492"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;若&lt;/span&gt;&lt;/font&gt;maven.hibernate.text=yes&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，匯出檔放置資料夾，預設為&lt;/span&gt;&lt;/font&gt;&lt;font face="Arial Unicode MS, sans-serif"&gt;&lt;font size="2"&gt;${maven.build.dir}/schema&lt;/font&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="172"&gt;       &lt;p class="western"&gt;         maven.hibernate.output.file       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="492"&gt;       &lt;p class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;若&lt;/span&gt;&lt;/font&gt;maven.hibernate.text=yes&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，匯出檔放置路徑，預設為&lt;/span&gt;&lt;/font&gt;&lt;font face="Arial Unicode MS, sans-serif"&gt;&lt;font size="2"&gt;${maven.hibernate.output.dir}/${maven.final.name}-schema.sql&lt;/font&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;img align="bottom" border="0" height="485" name="graphics2" src="http://docs.google.com/File?id=ddgh9kcq_195cqcjbnhq" width="669"/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139971151"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; PostgreSql   SchemaExport&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;結果&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;img align="bottom" border="0" height="566" name="graphics3" src="http://docs.google.com/File?id=ddgh9kcq_196gjg4nmfd" width="669"/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref139971158"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;3&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; Hsqldb   SchemaExport&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;結果&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;h1 class="western"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;結論&lt;/span&gt;&lt;/font&gt; &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;是一個開放原始碼的物件關聯映射技術，針對了&lt;/span&gt;&lt;/font&gt;JDBC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行了輕量化的將關聯資料轉化為物件封裝，使得開發人員可以隨心所欲的使用物件導向思維來駕馭資料庫。而在本期的介紹中我們了解了使用&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;協助&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;建立&lt;/span&gt;&lt;/font&gt;Domain   Object&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的一種應用，而除了本次範例的方式外，&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;也可以使用&lt;/span&gt;&lt;/font&gt;Middlegen&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的方式透過現有的資料庫&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;產生出&lt;/span&gt;&lt;/font&gt;Mapping   file&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，又或著從&lt;/span&gt;&lt;/font&gt;Mapping   file&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;建立出&lt;/span&gt;&lt;/font&gt;Schema&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/font&gt;Java   Domain   Object&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。因此可依專案的狀況進行彈性的調整。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的應用可以切入在任何使用&lt;/span&gt;&lt;/font&gt;JDBC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的場合，既可以應用於單純的&lt;/span&gt;&lt;/font&gt;Java   Application&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，也可以在&lt;/span&gt;&lt;/font&gt;Servlet/JSP&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/font&gt;Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;應用程式中使用，更可以應用在&lt;/span&gt;&lt;/font&gt;EJB&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/font&gt;J2EE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;架構中取代&lt;/span&gt;&lt;/font&gt;CMP&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，完成資料持久化的重任。倘若更深入&lt;/span&gt;&lt;/font&gt;Hibernate&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的架構與觀念中，則將更了解物件關聯映射技術的最佳化實踐。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-8935789813399504139?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/8935789813399504139/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=8935789813399504139' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/8935789813399504139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/8935789813399504139'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/08/200608-151-mavenhibernate.html' title='(2006.08月號--151期) 如何以Maven協助Hibernate開發'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-2087118305725528169</id><published>2007-08-03T19:10:00.000+08:00</published><updated>2007-08-03T19:11:18.506+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='靈光一閃：突如其來的感觸'/><title type='text'>女孩！你是花朵還是大X</title><content type='html'>女孩！你是花朵還是大X…&lt;br&gt; 端看被你吸引來的是什麼而定。&lt;br&gt;如果被你吸引而來的是蝴蝶與蜜蜂，那麼你就是嬌豔欲滴的鮮花。&lt;br&gt;若圍繞在你身邊的只有蒼蠅，應該猜得到你是屬於什麼了。&lt;br&gt;&lt;br&gt;所以，女孩呀！&lt;br&gt;呈現你的氣質、培養你的內涵、散發出令蒼蠅逃避蜜蜂喜愛的氣息。&lt;br&gt;你才是一朵真正的花，而蜜蜂、蝴蝶也將為你散播愛的花粉。&lt;br&gt;&lt;br&gt;不過若被你吸引而來的蜜蜂、蝴蝶、蒼蠅，&lt;br&gt;你是一概接受並且一律通殺的話，&lt;br&gt;則你將只是看似甜蜜，實則佈滿陷阱，&lt;br&gt;等著獵物掉入的一株豬籠草而已。&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-2087118305725528169?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/2087118305725528169/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=2087118305725528169' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/2087118305725528169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/2087118305725528169'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/08/x.html' title='女孩！你是花朵還是大X'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-8773713767532248417</id><published>2007-07-29T19:14:00.000+08:00</published><updated>2007-07-29T19:53:15.282+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='開發：Maven1'/><category scheme='http://www.blogger.com/atom/ns#' term='發表文章_刊登於RunPC'/><title type='text'>(2006.05月號--148期)開放原始碼專案管理工具_建立專案與IDE環境設定</title><content type='html'>&lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在以往初步建立專案的過程中，多數傾向於二種方式，其一是依賴&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，建立專案同時啟動專案精靈，顯示多個專案範本，藉由開發人員選擇範本的不同進行專案的初始化並建立符合需求的開發環境設定，並在&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;上進行建置、佈署、測試。這種方式的優點是方便、易學、無需了解複雜的環境配置即可進行。而缺點是受限於&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的開發方式，只適用公司內部或單一公司實作的小型專案，也必須限制使用特定的&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行開發。對於大型或是多數委外進行開發的專案則不適用，因為我們無法強制委外的開發廠商使用統一的&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行開發。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;span class="fullpost"&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;其二是將專案建置邏輯撰寫於&lt;/span&gt;&lt;/font&gt;Ant   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;腳本中，由&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;協助進行程式碼的編譯、專案的佈署、單元測試、整合測試等的建置步驟。其優點是開發過程中完全不依賴&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發環境，因此在目前在大型的&lt;/span&gt;&lt;/font&gt;J2EE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;專案中幾乎都看的到&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的蹤跡。而缺點是&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的腳本並沒有一定的建置邏輯與規範，因此在目前業界中&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;腳本在各專案中可重覆使用的機率並不高，並且必須因應專案特性的不同而必須重寫或修改&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的建置腳本，但在進行中大型專案裡維護&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;並不是件容易的事，而另一個缺點是&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;無法協助我們進行&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;環境的設定，因為充其量&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;只包含建置邏輯罷了。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在本期的內容中，筆者將為各位介紹&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;是如何協助我們從無到有建立出所需的專案開發環境，並且配合多個不同的&lt;/span&gt;&lt;/font&gt;IDE   Plug-in&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;協助我們建立&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;JBuilder&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;IntelliJ   IDEA&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;等&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發環境的配置。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;h1 class="western"&gt;   Maven Genapp Plugin &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;一般習慣使用&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的開發人員，通常都是使用專案精靈工具，套用範本來建置專案。假若&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;專案的建置必須像&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;腳本一樣無中生有的自行撰寫的話，大概就不會有太多人嚐試用&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行開發了。而&lt;/span&gt;&lt;/font&gt;Maven   Genapp   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;如同專案精靈一樣，透過對話的方式，輔助我們建立新專案。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在開始實作之前，請先確認&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;環境中的&lt;/span&gt;&lt;/font&gt;Genapp   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的版本為何，但如何得知目前版本呢，可至&lt;/span&gt;&lt;/font&gt;[%MAVEN_HOME%/plugins]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;資料夾下查看是否有&lt;/span&gt;&lt;/font&gt;maven-genapp-plugin-x.x.jar&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;或者在&lt;/span&gt;&lt;/font&gt;[${maven.home.local   }/cache]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;下是否包含著&lt;/span&gt;&lt;/font&gt;maven-genapp-plugin-x.x&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的資料夾。我們可以從這二個地方即可得知目前版本訊息。至筆者截稿為止，版本為&lt;/span&gt;&lt;/font&gt;2.3&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，若讀者手上的版本稍舊的話，可透過執行&lt;/span&gt;&lt;/font&gt;maven   plugin:download -DgroupId=maven -DartifactId=maven-genapp-plugin   -Dversion=2.3&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行下載更新。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;為什麼要先確認&lt;/span&gt;&lt;/font&gt;Genapp&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的版本呢，其原因在於&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在發展過程中有其建議的資料夾結構，參考資料結構   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;，而在&lt;/span&gt;&lt;/font&gt;2.3&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;之前版本中的專案範本，並沒有完全依照如此的資料夾結構進行設置。因此在建立出的專案中會與資料結構   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;的格式稍有不同，但若不下載新版的&lt;/span&gt;&lt;/font&gt;maven-genapp-plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;也不影響往後專案的建置，因為&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;只建議開發人員，統一的資料夾結構對開發是有幫助的，若專案開發環境有自己的資料夾結構或是原先由&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;建置的專案欲移轉到&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;上進行開發，都可以依照專案原本的資料夾結構進行建置。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;接下來參考圖   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;執行&lt;/span&gt;&lt;/font&gt;maven   genapp&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;並依提示輸入，使用專案範本、專案根路徑名稱、專案&lt;/span&gt;&lt;/font&gt;ID&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、專案名稱、原始碼的&lt;/span&gt;&lt;/font&gt;Package&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;名稱，當輸入完成後立即建置出所需的專案架構供開發人員進行下一步的開發。這樣的功能就如同&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;工具的專案精靈一樣方便，但有個問題，&lt;/span&gt;&lt;/font&gt;GenApp   Plug-in&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;究竟提供多少範本協助開發人員建置專案呢？這個部分可參考相關資源&lt;/span&gt;&lt;/font&gt;1&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/font&gt;GenApp&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;官方網站，另外也可以直接查看&lt;/span&gt;&lt;/font&gt;[${maven.home.local   }/cache/maven-genapp-plugin-2.2/plugin-resources]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;資料夾清單，相關內容說明可參考表   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt; 。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;到目前為止我們已經可以很輕鬆的建立起一個新專案，而且完全不相依於任何&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。假若&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;能順便協助開發人員將&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發環境設定好那可就更完美了！那是當然的，接著筆者將介紹&lt;/span&gt;&lt;/font&gt;Maven   IDE   Plug-in&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的使用。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref131517888"&gt;&lt;/a&gt;&lt;a name="_Ref131517878"&gt;&lt;/a&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;表   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt; 範本清單&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;table border="1" bordercolor="#000000" cellpadding="2" cellspacing="0" width="674"&gt;   &lt;col width="109"&gt; &lt;col width="554"&gt; &lt;tbody&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="center" class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;範本名稱&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="center" class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;範本說明&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="justify" class="western"&gt;         default       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="justify" class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;簡易的應用程式專案。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="justify" class="western"&gt;         ejb       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="justify" class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;簡易的&lt;/span&gt;&lt;/font&gt;EJB&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;專案。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="justify" class="western"&gt;         struts       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="justify" class="western"&gt;         Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;應用程式專案並且以&lt;/span&gt;&lt;/font&gt;Strust&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;為&lt;/span&gt;&lt;/font&gt;MVC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的架構。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="justify" class="western"&gt;         struts-jstl       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="justify" class="western"&gt;         Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;應用程式專案並且使用&lt;/span&gt;&lt;/font&gt;Strust&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/font&gt;JSTL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;架構。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="justify" class="western"&gt;         struts-validation       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="justify" class="western"&gt;         Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;應用程式專案並且使用&lt;/span&gt;&lt;/font&gt;Strust&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/font&gt;Validation&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;架構。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="justify" class="western"&gt;         tapestry       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="justify" class="western"&gt;         Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;應用程式專案並且以&lt;/span&gt;&lt;/font&gt;Tapestry&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;為&lt;/span&gt;&lt;/font&gt;MVC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的架構。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="justify" class="western"&gt;         web       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="justify" class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;簡易的&lt;/span&gt;&lt;/font&gt;Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;應用程式專案。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="justify" class="western"&gt;         web-jstl       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="justify" class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;簡易的&lt;/span&gt;&lt;/font&gt;Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;應用程式專案並且使用&lt;/span&gt;&lt;/font&gt;JSTL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="justify" class="western"&gt;         web-velocity       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="justify" class="western"&gt;         Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;應用程式專案並且以&lt;/span&gt;&lt;/font&gt;Velocity&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;為&lt;/span&gt;&lt;/font&gt;MVC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的架構。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;     &lt;td width="109"&gt;       &lt;p align="justify" class="western"&gt;         complex       &lt;/p&gt;     &lt;/td&gt;     &lt;td width="554"&gt;       &lt;p align="justify" class="western"&gt;         &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;建立一個複雜的&lt;/span&gt;&lt;/font&gt;J2EE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;專案，產生&lt;/span&gt;&lt;/font&gt;multiproject&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;架構。&lt;/span&gt;&lt;/font&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref131340142"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;資料結構   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;建議資料夾結構&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;/&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;+- src/   --&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;專案相關代碼路徑&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| +- main/   --&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;主要程式碼路徑&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| | +- java/   --java&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;原始碼路徑&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| | | +- ...&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| | +- resources/   --&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;所需資源與設定路徑&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| | +- ...&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| +- test/   --&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;測試程式碼路徑&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| | +- java/   --java&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;測試原始碼路徑&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| | | +- ...&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| | +- resources/   --&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;測試用資源與設定路徑&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| | +- ...&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| +- site/   --&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;建立專案站台設定路徑&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| +- xdoc/&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| +- ...&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;+- target/   --&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;專案建置成品放置&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;| +- ...   &lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與其他建置中暫存路徑&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;+- project.xml   --POM&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定檔&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;+- README.txt&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;+- LICENSE.txt&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;div style="PADDING:1em 0pt; TEXT-ALIGN:left"&gt;     &lt;img border="0" name="graphics1" src="http://docs.google.com/File?id=ddgh9kcq_187fq42n2g8" style="WIDTH:400px; HEIGHT:337.714px"/&gt;   &lt;/div&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref131341624"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;/font&gt; Maven Genapp &lt;/p&gt; &lt;h1 class="western"&gt;   Maven Eclipse Plugin &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;透過圖   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;的操作我們已經建立好套用&lt;/span&gt;&lt;/font&gt;web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;範本的&lt;/span&gt;&lt;/font&gt;MyWebApp&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;專案，接著進入建立好的&lt;/span&gt;&lt;/font&gt;MyWebApp&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;資料夾中並執行&lt;/span&gt;&lt;/font&gt;maven   eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，這時&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;將協助開發人員建立&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的開發環境設定。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;當產生出環境設定之後，啟動&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;並於功能表中執行&lt;/span&gt;&lt;/font&gt;[File][Import…]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，進入匯入專案作業。在對話視窗中選擇&lt;/span&gt;&lt;/font&gt;[Existing   Projects into   Workspace]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行下一步，接著在對話框中&lt;/span&gt;&lt;/font&gt;[Select   root   directory:]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;選項執行&lt;/span&gt;&lt;/font&gt;[Browse]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，並指向產生專案的路徑&lt;/span&gt;&lt;/font&gt;[D:DevMyWebApp]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，最後按下&lt;/span&gt;&lt;/font&gt;[Finish]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;即可。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;第一次在&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中匯入&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;建立的專案時，&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/font&gt;[Problems]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;標籤將會判斷出多項錯誤，分別是&lt;/span&gt;&lt;/font&gt;[The   project cannot be built until build path errors are   resolved]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與多個&lt;/span&gt;&lt;/font&gt;[Unbound   classpath variable: 'MAVEN_REPO/xxxx/jars/xxxx-xx.xx.jar' in project MyWebApp   MyWebApp]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。這些錯誤的原因在於&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;使用了&lt;/span&gt;&lt;/font&gt;MAVEN_REPO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;參數設定相關&lt;/span&gt;&lt;/font&gt;JAR&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;檔的關聯，而&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發環境中尚未設定該參數所致。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;解決方式有二種，其一執行&lt;/span&gt;&lt;/font&gt;[maven   eclipse:add-maven-repo   -Dmaven.eclipse.workspace=%WORKSPACE_PATH%]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;可透過&lt;/span&gt;&lt;/font&gt;Maven   Eclipse   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行&lt;/span&gt;&lt;/font&gt;MAVEN_REPO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的參數設定至&lt;/span&gt;&lt;/font&gt;[%WORKSPACE_PATH%]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;指定的&lt;/span&gt;&lt;/font&gt;workspace&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;路徑下。執行完成後，必須重新啟動&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;才會生效。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;其二可參考圖   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;直接在&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;功能表中點選&lt;/span&gt;&lt;/font&gt;[Window][Preferences]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，在對話視窗中選擇&lt;/span&gt;&lt;/font&gt;[Java][Build   Path][Classpath   Variables]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行&lt;/span&gt;&lt;/font&gt;Classpath&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;參數的設定，新增&lt;/span&gt;&lt;/font&gt;MAVEN_REPO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;參數，並將路徑指向&lt;/span&gt;&lt;/font&gt;[${maven.home.local   }/repository]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;下即可。&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;預設&lt;/span&gt;&lt;/font&gt;repository&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的路徑指向&lt;/span&gt;&lt;/font&gt;[C:Documents   and   Settings%&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;登入帳號&lt;/span&gt;&lt;/font&gt;%.mavenrepository]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;當完成設定後&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;將依目前設定重新建置專案，結果如圖   &lt;font face="Times New Roman, serif"&gt;3&lt;/font&gt;所示，這時之前的錯誤訊息將不會再出現。因此日後在專案開發的過程中當我們修改過&lt;/span&gt;&lt;/font&gt;project.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/font&gt;POM&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定或者新增、移除&lt;/span&gt;&lt;/font&gt;JAR&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的的相依關聯性時，只需再次執行&lt;/span&gt;&lt;/font&gt;maven   eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;就可依&lt;/span&gt;&lt;/font&gt;project.xml&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的設定重新產生相符的&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發環境配置。如此的&lt;/span&gt;&lt;/font&gt;Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;不管在那個專案中都非常方便。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;div style="PADDING:1em 0pt; TEXT-ALIGN:left"&gt;     &lt;img border="0" name="graphics2" src="http://docs.google.com/File?id=ddgh9kcq_188qkjszsf8" style="WIDTH:400px; HEIGHT:307.84px"/&gt;   &lt;/div&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref131660880"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/font&gt;Eclipse   MAVEN_REPO&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;參數&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;div style="PADDING:1em 0pt; TEXT-ALIGN:left"&gt;     &lt;img border="0" name="graphics3" src="http://docs.google.com/File?id=ddgh9kcq_189c6srd4dr" style="WIDTH:400px; HEIGHT:288.281px"/&gt;   &lt;/div&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref131661653"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;3&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開啟專案的&lt;/span&gt;&lt;/font&gt;Eclipse   IDE &lt;/p&gt; &lt;h1 class="western"&gt;   Maven JBuilder Plugin &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;目前業界進行&lt;/span&gt;&lt;/font&gt;J2EE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;專案開發最常用的&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，除了&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;之外我想另一個廣受歡迎的就是&lt;/span&gt;&lt;/font&gt;JBuilder&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;吧。在此也不避諱的為各位介紹一下如何使用&lt;/span&gt;&lt;/font&gt;Maven   JBuilder   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;協助我們建立環境設定。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在此我們直接執行&lt;/span&gt;&lt;/font&gt;maven   jbuilder&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，若無意外的話將會看到&lt;/span&gt;&lt;/font&gt;BUILD   SUCCESSFUL&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的訊息並且產生本範例中的&lt;/span&gt;&lt;/font&gt;[D:DevMyWebAppMyWebApp.jpx]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的環境設定檔，但若發生&lt;/span&gt;&lt;/font&gt;BUILD   FAILED&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的狀況的話，筆者大概可以猜測出讀者應該使用的是&lt;/span&gt;&lt;/font&gt;2005&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/font&gt;2006&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/font&gt;JBuilder&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;版本。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;其原因在於截至目前為止，&lt;/span&gt;&lt;/font&gt;Maven   JBuilder   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的版本為&lt;/span&gt;&lt;/font&gt;1.5&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，在目前的版本中預設並未支援&lt;/span&gt;&lt;/font&gt;JBuiler2005&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;之後的版本設定。但若是因為如此而造成&lt;/span&gt;&lt;/font&gt;JBuilder&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的愛用者對&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;興趣缺缺的話，那可就是筆者的罪過了。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;雖然預設的&lt;/span&gt;&lt;/font&gt;Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;尚未支援新版的&lt;/span&gt;&lt;/font&gt;JBuilder&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，但只需進行小部分修正即可排除這個問題。首先至&lt;/span&gt;&lt;/font&gt;[${maven.home.local   }/cache/maven-jbuilder-plugin-1.5]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;路徑下開啟&lt;/span&gt;&lt;/font&gt;plugin.jelly&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;檔案，在檔案開頭附近很容易可以找到有一行的設定如&lt;/span&gt;&lt;/font&gt;[&lt;font face="細明體, MingLiU, monospace"&gt;value=".jbuilderX,.jbuilder9,.jbuilder8,...&lt;/font&gt;]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;將其修改為&lt;/span&gt;&lt;/font&gt;[&lt;font face="細明體, MingLiU, monospace"&gt;value="&lt;/font&gt;.jbuilder2005,&lt;font face="細明體, MingLiU, monospace"&gt;.jbuilderX,.jbuilder9,.jbuilder8,...&lt;/font&gt;]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;參考設定   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;，存檔後再次執行&lt;/span&gt;&lt;/font&gt;maven   jbuilder&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;即可。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;這時我們將會發現&lt;/span&gt;&lt;/font&gt;Maven   JBuilder   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;正確無誤執行完成，也就是說事實上&lt;/span&gt;&lt;/font&gt;JBuilder&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;每一個不同版本在安裝時會將相關設定檔存放至&lt;/span&gt;&lt;/font&gt;UserHome&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;下，例如&lt;/span&gt;&lt;/font&gt;JBuilder2005&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;存放路徑為&lt;/span&gt;&lt;/font&gt;[C:Documents   and   Settings%&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;登入帳號&lt;/span&gt;&lt;/font&gt;%.jbuilder2005]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，因此我們只需將設定的版本名稱加入&lt;/span&gt;&lt;/font&gt;plugin.jelly&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中就可使&lt;/span&gt;&lt;/font&gt;Maven   JBuilder   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;支援該版本。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;接著只要在&lt;/span&gt;&lt;/font&gt;JBuilder&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中執行&lt;/span&gt;&lt;/font&gt;[Open   Project…]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開啟由&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;產生的&lt;/span&gt;&lt;/font&gt;MyWebApp.jpx&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，無需調整任何設定即可進行專案開發，參考圖   &lt;font face="Times New Roman, serif"&gt;4&lt;/font&gt;。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref131666006"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;設定   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   maven-jbuilder-plugin-1.5/plugin.jelly &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&amp;lt;goal name="jbuilder"&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;description="Generate JBuilder project   files"&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;prereqs="jbuilder:generate-library,   jbuilder:generate-project"/&amp;gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&amp;lt;def:taglib uri="jbuilder"&amp;gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   …&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中間省略…&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&amp;lt;def:tag   name="getDefaultProject"&amp;gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&amp;lt;j:set var="jbuilderDirs"   value="&lt;/font&gt;.jbuilder2005,&lt;font face="細明體, MingLiU, monospace"&gt;.jbuilderX,.jbuilder9,.jbuilder8,.jbuilder7,.jbuilder6,.jbuilder5,.jbuilder4,.jbuilder"   /&amp;gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&amp;lt;j:set var="${userHome}" value="null"   scope="parent"/&amp;gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   …&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;以下省略…&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;div style="PADDING:1em 0pt; TEXT-ALIGN:left"&gt;     &lt;img border="0" name="graphics4" src="http://docs.google.com/File?id=ddgh9kcq_190dshd8zhh" style="WIDTH:400px; HEIGHT:289.844px"/&gt;   &lt;/div&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref131666789"&gt;&lt;/a&gt;&lt;a name="_Ref131666784"&gt;&lt;/a&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;4&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開啟專案的&lt;/span&gt;&lt;/font&gt;JBuilder   IDE &lt;/p&gt; &lt;h1 class="western"&gt;   Maven IDEA Plugin &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;介紹完二個主流&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的設定之後，我們來看一下一個鮮為人知，但功能卻不俗的&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發工具&lt;/span&gt;&lt;/font&gt;IntelliJ   IDEA&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，&lt;/span&gt;&lt;/font&gt;IDEA&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;無需像&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;必須自行加上一堆&lt;/span&gt;&lt;/font&gt;Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;之後才能達到較完善的開發環境要求，預設的&lt;/span&gt;&lt;/font&gt;IDEA&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;環境非常的友善，上手非常容易，並且相似於&lt;/span&gt;&lt;/font&gt;Eclipse&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，網路上有眾多的&lt;/span&gt;&lt;/font&gt;Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;支援&lt;/span&gt;&lt;/font&gt;IDEA&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;。另外在所有的&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發工具中&lt;/span&gt;&lt;/font&gt;IDEA&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;擁有最強的&lt;/span&gt;&lt;/font&gt;Refactor&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;功能，方便開發人員進行重構。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   Maven IDEA   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;可以協助建立&lt;/span&gt;&lt;/font&gt;IDEA&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發環境，但必須注意到目前&lt;/span&gt;&lt;/font&gt;IDEA   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;版本為&lt;/span&gt;&lt;/font&gt;1.6&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，若讀者系統中的版本較舊，可透過執行&lt;/span&gt;&lt;/font&gt;[maven   plugin:download -DgroupId=maven -DartifactId=maven-idea-plugin   -Dversion=1.6]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行下載。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;執行&lt;/span&gt;&lt;/font&gt;maven   idea&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;後，啟動&lt;/span&gt;&lt;/font&gt;IDEA&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行&lt;/span&gt;&lt;/font&gt;[Open   Project…]&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開啟由&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;產生的&lt;/span&gt;&lt;/font&gt;MyWebApp.ipr&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;無需調整任何設定即可進行專案開發，參考圖   &lt;font face="Times New Roman, serif"&gt;5&lt;/font&gt;。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;div style="PADDING:1em 0pt; TEXT-ALIGN:left"&gt;     &lt;img border="0" name="graphics5" src="http://docs.google.com/File?id=ddgh9kcq_191dkbqnkgx" style="WIDTH:400px; HEIGHT:289.844px"/&gt;   &lt;/div&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref131670835"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;5&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開啟專案的&lt;/span&gt;&lt;/font&gt;IntelliJ   IDEA IDE &lt;/p&gt; &lt;h1 class="western"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;結語&lt;/span&gt;&lt;/font&gt; &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;在本期中介紹了如何使用&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;起始一個專案的建置，也了解了如何透過&lt;/span&gt;&lt;/font&gt;IDE   Plugin&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;將&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的專案導到各個主流的&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發環境中進行協同開發，從這些實作中我們了解到，&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;並不會在開發中完全取代&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;或者限制使用特定&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，而是以一種通用的專案建置方式協助每一個專案的進行。開發人員可以使用任何方便的&lt;/span&gt;&lt;/font&gt;IDE&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;工具進行開發，而專案的建置、管理、測試、佈署等，一切的一切交給&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;就搞定了。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-8773713767532248417?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/8773713767532248417/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=8773713767532248417' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/8773713767532248417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/8773713767532248417'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/200605-148ide.html' title='(2006.05月號--148期)開放原始碼專案管理工具_建立專案與IDE環境設定'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-2518919675661427547</id><published>2007-07-28T12:32:00.000+08:00</published><updated>2007-07-28T12:37:18.534+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='旅遊規劃'/><category scheme='http://www.blogger.com/atom/ns#' term='生活記事'/><title type='text'>太平山旅遊規劃參考</title><content type='html'>&lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;最近，朋友們正在計劃九月份要到宜蘭的太平山一遊，雖然我不是主辦人，不過我想，先整理一下相關資訊，定一些小小的計劃，也許可以幫助我這些朋友們先了解一下要去那裡玩、有什麼景點、可以住什麼地方等訊息。才不會到時又是臨時慌慌張張的出發，路上才再找地圖，到定點後又不曉得該從那玩起的窘境。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;宜蘭，應該算是我滿有回憶的地方，曾經在羅東醫院駐點過一陣子&lt;/span&gt;&lt;/span&gt;(&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;看清楚，是駐點、不是住院&lt;/span&gt;&lt;/span&gt;)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，遺憾的到是沒真正好好看過宜蘭這個地方，只有在羅東夜市逛過幾回，運動公園則是當時要將機車騎回台北前匆匆繞了一下。沒真正看過這個好山好水的好地方，當然啦！太平山，在回憶中也只是個傳說中的地方而已。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;參考資料：&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://tps.forest.gov.tw/"&gt;http://tps.forest.gov.tw/&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://www.ilantravel.com.tw/taping/"&gt;http://www.ilantravel.com.tw/taping/&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://www.tai-ping-shan.com.tw/index1.htm"&gt;http://www.tai-ping-shan.com.tw/index1.htm&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://recreate.forest.gov.tw/forest.php?init=05&amp;amp;char=big5&amp;forest=1"&gt;http://recreate.forest.gov.tw/forest.php?init=05&amp;amp;amp;char=big5&amp;forest=1&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://www.storegood.com/place/a.php"&gt;http://www.storegood.com/place/a.php&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://yilan.emmm.tw/index_m.php?ptype=ieb_c&amp;amp;L3_id=32523"&gt;http://yilan.emmm.tw/index_m.php?ptype=ieb_c&amp;L3_id=32523&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   Blog&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的介紹：&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://tw.myblog.yahoo.com/jw%219vMUZySZFRTLaCWDXjW2/article?mid=4431&amp;amp;prev=4483&amp;next=-1"&gt;http://tw.myblog.yahoo.com/jw!9vMUZySZFRTLaCWDXjW2/article?mid=4431&amp;amp;amp;prev=4483&amp;next=-1&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://www.wretch.cc/blog/wus2121&amp;article_id=6767096"&gt;http://www.wretch.cc/blog/wus2121&amp;amp;article_id=6767096&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;某某旅行社二天一夜自由行的優惠：&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://www.tai-ping-shan.com.tw/ontravel/boarddetail.asp?bid=34"&gt;http://www.tai-ping-shan.com.tw/ontravel/boarddetail.asp?bid=34&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;不過上面只列出、二人成行或三人成行的方案。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;若是人數較多的話，可能得先問問看。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;如何到太平山&lt;/span&gt;&lt;/span&gt; &lt;/h2&gt; &lt;h3 class="western"&gt;   &lt;span lang="zh-TW"&gt;方式一：自行開車&lt;/span&gt; &lt;/h3&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;台北→國道&lt;/span&gt;&lt;/span&gt;5&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;號北宜高速公路→下頭城交流道左轉接台&lt;/span&gt;&lt;/span&gt;9&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;線省道直行→右轉省道&lt;/span&gt;&lt;/span&gt;7&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;號→省道&lt;/span&gt;&lt;/span&gt;7&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;甲號→左轉接太平林道→仁澤→太平山森林遊樂區。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;交通時間：從國光客運到太平山時間為&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;時&lt;/span&gt;&lt;/span&gt;30&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;分來推的話，從台北到宜蘭保守估計時間為&lt;/span&gt;&lt;/span&gt;1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;時&lt;/span&gt;&lt;/span&gt;30&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;分的話，猜測完整的行車時間最保守為&lt;/span&gt;&lt;/span&gt;4&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;個小時左右&lt;/span&gt;&lt;/span&gt;(&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;參考下圖&lt;/span&gt;&lt;/span&gt;)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;但有資訊說從宜蘭到太平山約&lt;/span&gt;&lt;/span&gt;100&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;分鐘，若行程順利的話假設從台北到宜蘭為&lt;/span&gt;&lt;/span&gt;1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;小時的話，則行程約為&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;小時&lt;/span&gt;&lt;/span&gt;40&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;分左右。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;h3 class="western"&gt;   &lt;span lang="zh-TW"&gt;方式二：大眾交通工具&lt;/span&gt; &lt;/h3&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;像之前去阿里山看到的一樣，也有客運公司直接開上太平山的。但這種旅行方式得非常注意時間的安排。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;搭國光汽車客運：每週星期六、日開於宜蘭或羅東搭車可直達發車時間為早上&lt;/span&gt;&lt;/span&gt;09:20&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;分。行車時間約&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;時&lt;/span&gt;&lt;/span&gt;30&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;分，每日往返一班，返回時間 &lt;/span&gt;&lt;/span&gt;(&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;太平山站出發&lt;/span&gt;&lt;/span&gt;)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下午&lt;/span&gt;&lt;/span&gt;15:30&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;往宜蘭，宜蘭站電話&lt;/span&gt;&lt;/span&gt;03-9365441&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，羅東站電話&lt;/span&gt;&lt;/span&gt;03-9542054&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;img name="c" src="http://docs.google.com/File?id=ddgh9kcq_184dvqxp8hv" align="bottom" border="0" height="705" width="611" /&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;img name="WAP" src="http://docs.google.com/File?id=ddgh9kcq_185wd5dr4fj" align="bottom" border="0" height="431" width="670" /&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;住宿資訊&lt;/span&gt;&lt;/span&gt; &lt;/h2&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;直接參考：&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://www.ilantravel.com.tw/taping/content/stay.htm"&gt;http://www.ilantravel.com.tw/taping/content/stay.htm&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;列了滿多住宿資訊的，從某些網站的討論區中得知，通常首選都是太平山莊，但也是最難訂到房的。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;入園資訊&lt;/span&gt;&lt;/span&gt; &lt;/h2&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;由土場（&lt;/span&gt;&lt;/span&gt;0&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;ｋ&lt;/span&gt;&lt;/span&gt;+ 800&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、海拔&lt;/span&gt;&lt;/span&gt;300&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;公尺）進入&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;為太平山出入門戶，「土場」是林業用語中的木材聚集地或卸材場地，它過去是太平山木材轉運站，也是平地森林火車的起點，旁邊停車場則為過去卸材場。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;現在土場收費站已由原來的車站改成太平山國家森林遊樂區售票站，遊客須由此購票進入遊樂區，附近規劃停車場及森林小火車等景觀展示。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;入園門票&lt;/span&gt;&lt;/span&gt;: &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   ※ &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;假日全票：&lt;/span&gt;&lt;/span&gt;200&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;元。半票：&lt;/span&gt;&lt;/span&gt;100&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;元 （軍警、學生請憑証購票&lt;/span&gt;&lt;/span&gt;)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   ※ &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;非假日：全票：&lt;/span&gt;&lt;/span&gt;150&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;元。半票：&lt;/span&gt;&lt;/span&gt;100&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;元 （軍警、學生請憑証購票&lt;/span&gt;&lt;/span&gt;)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   ※ &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;團體票：全票：&lt;/span&gt;&lt;/span&gt;150&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;元（&lt;/span&gt;&lt;/span&gt;20&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;人以上團體，不含半票及優待票）。半票：&lt;/span&gt;&lt;/span&gt;100&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;元。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   ※ &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;優待票：&lt;/span&gt;&lt;/span&gt;10&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;元（&lt;/span&gt;&lt;/span&gt;65&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;歲以上、&lt;/span&gt;&lt;/span&gt;115&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;公分以下兒童及殘障人士，請憑證購票）。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   ※ &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;停車費 &lt;/span&gt;&lt;/span&gt;: &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;大、小型車各&lt;/span&gt;&lt;/span&gt;100&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;元，機車&lt;/span&gt;&lt;/span&gt;20&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;元。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;管制時間：&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;每週六、日：&lt;/span&gt;&lt;/span&gt;AM 4:00~PM 9:00 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;寒暑假：&lt;/span&gt;&lt;/span&gt;AM 3:30~PM 9:00 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;非假日 ：&lt;/span&gt;&lt;/span&gt;AM 6:00~PM 9:00 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;遊客注意事項&lt;/span&gt;&lt;/span&gt;: &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   1.&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;太平山氣溫比平地約低&lt;/span&gt;&lt;/span&gt;10&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;度 ，&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;請自備禦寒衣物。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   2.&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;為行走步道請自備步鞋。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   3.&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;宜蘭市至太平山車程約&lt;/span&gt;&lt;/span&gt;100&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;分鐘&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，太平山距最近加油站約&lt;/span&gt;&lt;/span&gt;43&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;公&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;里&lt;/span&gt;&lt;/span&gt;(&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;為台&lt;/span&gt;&lt;/span&gt;7&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;甲線&lt;/span&gt;&lt;/span&gt;101k&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;處之大同加&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;油站&lt;/span&gt;&lt;/span&gt;)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，請注意車油量。 &lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;急難通報電話&lt;/span&gt;&lt;/span&gt;: &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   1.&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;太平山救難小組&lt;/span&gt;&lt;/span&gt;:03-9809806&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;9809603&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;9809618 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   2.&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;太平山派出所&lt;/span&gt;&lt;/span&gt;:03-9809802 &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;土場派出所&lt;/span&gt;&lt;/span&gt;:03-9809612 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   3.&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;省立宜蘭醫院&lt;/span&gt;&lt;/span&gt;:03-9325192 &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;羅東聖母醫院&lt;/span&gt;&lt;/span&gt;:03-9544106 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;博愛醫院&lt;/span&gt;&lt;/span&gt;:03-9543131 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;遊樂景點介紹&lt;/span&gt;&lt;/span&gt; &lt;/h2&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;參考：&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://www.tai-ping-shan.com.tw/taiping/taiping.htm"&gt;http://www.tai-ping-shan.com.tw/taiping/taiping.htm&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://tps.forest.gov.tw/scenic.html"&gt;http://tps.forest.gov.tw/scenic.html&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://www.ilantravel.com.tw/taping/content/info.htm"&gt;http://www.ilantravel.com.tw/taping/content/info.htm&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;a href="http://recreate.forest.gov.tw/forest.php?init=05&amp;amp;char=big5&amp;forest=1"&gt;http://recreate.forest.gov.tw/forest.php?init=05&amp;amp;amp;char=big5&amp;forest=1&lt;/a&gt;&lt;/u&gt;&lt;/span&gt; &lt;/p&gt; &lt;span style="color:#0000ff;"&gt;&lt;u&gt;&lt;/u&gt;&lt;/span&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;先看幾個小片段了解一下太平山吧！&lt;br/&gt;&lt;br /&gt;民視－台灣之美系列3－宜蘭太平山篇&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/3W3-qfB1vms"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/3W3-qfB1vms" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;20070617_台灣之旅 宜蘭太平山&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YlD2LfhxDQ4"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/YlD2LfhxDQ4" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;travel video&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/WL4OLLNgDz8"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/WL4OLLNgDz8" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;健酪乳酸飲料-步道篇(宜蘭太平山)&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Z7UqMjfr4oQ"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Z7UqMjfr4oQ" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-2518919675661427547?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/2518919675661427547/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=2518919675661427547' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/2518919675661427547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/2518919675661427547'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/blog-post_28.html' title='太平山旅遊規劃參考'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-986933617619177739</id><published>2007-07-25T12:20:00.000+08:00</published><updated>2007-07-25T12:22:13.109+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活記事'/><title type='text'>補07/20~07/23 提前的父親節</title><content type='html'>原先談定今天開始的顧問工作，因客戶端的流程關係，延後一周進行。&lt;br /&gt;多了一些緩衝時間，當星期四知道消息後，想了一下，當下就決定了隔天就回中部一趟吧。&lt;br /&gt;&lt;br /&gt;20號一早起床後收拾了行李後就出門了，搭上10:48AM的火車返鄉。&lt;br /&gt;這班車是海線的，約在新竹、苗粟的途中看得到海岸線，稍微留意一下也可以看到台電的風力發電設備。就是那造價似乎有一、二億的大風車。不過若比海岸線的話，我是覺得東部的沿線的海景是比較好看的。突然間就想到了當兵時從東部花蓮搭火車返鄉的事了。&lt;br /&gt;&lt;br /&gt;雖然這次回家是坐復興號，不過並不是尖峰時間，坐位很空，也沒誤點。(呵呵，如果以後回家都是如此的話，就真的太好了。)到達田中火車站後，已經是下午2:30分左右。下車後直接往附近的某個攤販走去。為了買煎包等了約莫20分鐘吧(記得某次回來時吃過，覺得不錯吃，這次一次買了很多，多的當明天早餐)。接著就一路往回家的路上走了(有不良的示範，肚子太餓了，邊走邊吃)。&lt;br /&gt;&lt;br /&gt;此次返鄉主要是要提前過「父親節」，我們家是沒那麼重視節日啦！不過我還是希望回家一趟，跟老爸說聲，辛苦囉！我已經忘了，不知從什麼時候開始，除了過年會包個大紅包外。母親節、父親節，我也會另外再包個大紅包(記得某一年，我好像連三節都包了)。以前曾經打算要買好一點的按摩椅給爸媽，不過老人家就是一直不要。所以囉大都折合現金，給老人家們開開心。給了老爸紅包時，爸愣了一下，我才跟老爸表明，八月份會較忙，所以次是回來過父親節的。&lt;br /&gt;所以就開心的收下吧！&lt;br /&gt;&lt;br /&gt;六、日除了中午、晚上跟家人閒話家常外，幾乎都在趕之後上課要用的簡報檔(還是不得閒)。不過在家的感覺總是好的，多一個人就多了點熱鬧，跟自己一個人在台北寂寞到在家待不住的感覺是不一樣的。&lt;br /&gt;&lt;br /&gt;23號星期一，回板橋的時候到了，雖然還想多待幾天，不過在外生活久了，認床認的嚴重。在家通常失眠的情況特別明顯，回北部吧，給自己的期望，還有很多事要完成呢！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-986933617619177739?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/986933617619177739/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=986933617619177739' title='283 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/986933617619177739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/986933617619177739'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/07200723.html' title='補07/20~07/23 提前的父親節'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>283</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-5412016033818242090</id><published>2007-07-19T11:14:00.000+08:00</published><updated>2007-07-19T11:18:27.422+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活記事'/><title type='text'>補07/18 探望準媽媽</title><content type='html'>今早到客戶那，從板橋騎車到內湖，乖乖…好遠呀！&lt;BR&gt; 又是上班尖峰時間，摩托車就像擠沙丁魚一樣，一路擠到內湖去。&lt;BR&gt; &lt;BR&gt; 今天要進行的是之前銀行專案的權限控管系統的技術交接工作。&lt;BR&gt; 一點多左右到中山與民權交叉路的Starbucks與Krilo聊了一下工作的相關事宜。&lt;BR&gt; 之後就接到菀公打來的電話。想了想今天預定的事大致上已經完成。&lt;BR&gt; 只剩下整理思緒與聯絡通知相關人員工作與付款事項。&lt;BR&gt; 好，去菀公家串串門子吧！&lt;BR&gt; &lt;BR&gt; 從菀公口中得知朋友嬌嬌，似乎有些狀況進了醫院。&lt;BR&gt; 提議去探望一下，看看這位準媽媽的情況如何。&lt;BR&gt; &lt;BR&gt; 聽說是前幾天身體不適，醫生檢查後請他立刻住院&lt;BR&gt; (原因是什麼嬌嬌有說，不過男人嘛，&lt;BR&gt; 很難理解出如何將，女人、孩子與肚子的狀況用言語作解釋。)&lt;BR&gt; 當我們二個大男人看到她時，她手上正打著安胎針。&lt;BR&gt; 據他說每隔幾小時就會有醫生、護士替他裝上儀器作診斷。&lt;BR&gt; 若肚中小孩心跳或子宮收縮發生不穩定的狀況的話，&lt;BR&gt; 就必須立刻開刀，也就是說小Baby可能得提早出來看看世界了。&lt;BR&gt; &lt;BR&gt; 菀公之前提說嬌嬌已經有像是個媽媽的樣子了，&lt;BR&gt; 整個人都散發了母親的光輝，前陣子幫忙搬家時到還沒刻意注意到。&lt;BR&gt; 今兒個一看，真是，連我都想叫他聲媽了呢！&lt;BR&gt; &lt;BR&gt; 我們三人天南地北聊了很多，包括有醫生請他住院時他想先梳洗一下，&lt;BR&gt; 因為小孩出生後得忍到做月子完後才能洗頭；&lt;BR&gt; 懷孕像帶著球的感覺有多不舒服，生活作息有多不方便；&lt;BR&gt; 女人生產、做月子時男人可得大方點，儘量讓老婆開心、舒服，不然可會被老婆唸一輩子…等。&lt;BR&gt; 看來這位準媽媽已經開始有了媽媽經了呢。&lt;BR&gt; &lt;BR&gt; 嬌嬌，這位堅強的媽媽，加油囉！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-5412016033818242090?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/5412016033818242090/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=5412016033818242090' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/5412016033818242090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/5412016033818242090'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/0718.html' title='補07/18 探望準媽媽'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-601230216511075965</id><published>2007-07-12T23:14:00.000+08:00</published><updated>2007-07-12T23:18:06.606+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日劇'/><title type='text'>介助犬武藏</title><content type='html'>&lt;div style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=ddgh9kcq_178cdk4p2d3"&gt;&lt;br&gt;&lt;br&gt;剛做完一份要上課用的簡報，也恰好第四台的線路似乎出了狀況。&lt;br&gt;因此就看了最近到手的日劇SP，「介助犬武藏，上學去吧！」&lt;br&gt;劇情是什麼看倌們自已找找吧！&lt;br&gt;有耐心的人可以連上土豆網&lt;br&gt;http://www.tudou.com/playlist/id/1006009/&lt;br&gt;在線的收看。雖然是老樣子的Patterns，不過對於這方面的故事。&lt;br&gt;我還是滿喜歡的，至少滴下幾滴淚，舒緩一下乾眼的症狀。&lt;br&gt;這裏面有一段話說得還不錯：&lt;br&gt;&lt;/div&gt; &lt;br&gt;&lt;span style="font-weight: bold;"&gt; 有一首被世人傳唱的作者不詳的古詩「狗的述懷」&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;在那首詩裏和狗一起生活過的人們一直和狗用心交流著。&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;「我的一生，肯定不是漫長的。&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;   就算只是很短的時間，我也不想和你分離。&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;   請不時的和我說說話，就算言語不通，你的心意我也能領會。&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;   請相信我，那就是我的幸福。&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;   &lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;   當我開始最後旅程的時候，請陪在我的身邊。&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;   只要你在我身邊，我就能戰勝一切。&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;   &lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;   然後，請不要忘記…&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;   我一直愛著你。」&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;object width="488" height="423"&gt;&lt;param name="movie" value="http://www.tudou.com/player/playlist.swf?lid=1006009"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.tudou.com/player/playlist.swf?lid=1006009" type="application/x-shockwave-flash" width="488" height="423"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-601230216511075965?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/601230216511075965/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=601230216511075965' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/601230216511075965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/601230216511075965'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/blog-post_12.html' title='介助犬武藏'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-6401116137813876072</id><published>2007-07-11T19:56:00.000+08:00</published><updated>2007-07-11T19:57:12.592+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='開發：Maven2'/><title type='text'>Maven2 Report使用javancss-maven-plugin</title><content type='html'>&lt;p class="MsoNormal"&gt;   &lt;span style="FONT-FAMILY:細明體"&gt;簡介一下&lt;/span&gt;&lt;span lang="EN-US"&gt;Maven2&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;中&lt;/span&gt;&lt;span lang="EN-US"&gt;javancss-maven-plugin&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;進行&lt;/span&gt;&lt;span lang="EN-US"&gt;Report&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;的使用。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="FONT-FAMILY:細明體"&gt;更詳細的用法請參考：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://mojo.codehaus.org/javancss-maven-plugin/index.html"&gt;http://mojo.codehaus.org/javancss-maven-plugin/index.html&lt;/a&gt;&lt;/span&gt; &lt;/p&gt; &lt;span class="fullpost"&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;h3&gt;   簡易使用法： &lt;/h3&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="FONT-FAMILY:細明體"&gt;基本上只要在&lt;/span&gt;&lt;span lang="EN-US"&gt;reporting&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;標籤中使用進行&lt;/span&gt;&lt;span lang="EN-US"&gt;plugin&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;的設定即可。之後在執行&lt;/span&gt;&lt;span lang="EN-US"&gt;maven   site&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;時就會產生&lt;/span&gt;&lt;span lang="EN-US"&gt;javancss&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;的報表資料。&lt;/span&gt; &lt;/p&gt; &lt;table border="1" cellpadding="0" cellspacing="0" style="BORDER:medium none ; border-collapse:collapse"&gt;   &lt;tbody&gt;   &lt;tr&gt;     &lt;td style="BORDER:0.5pt solid windowtext; PADDING:0cm 1.4pt; WIDTH:484.65pt" valign="top" width="646"&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&amp;lt;reporting&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;artifactId&amp;gt;javancss-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&amp;lt;/reporting&amp;gt;&lt;/span&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;h3&gt;   較複雜的使用法： &lt;/h3&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="FONT-FAMILY:細明體"&gt;雖然設定簡單，但目前這個&lt;/span&gt;&lt;span lang="EN-US"&gt;plugin&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;還不是很穩定，不穩定的原因大多出現在中文問題上。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt;Javancss&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;會針對&lt;/span&gt;&lt;span lang="EN-US"&gt;*.java&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;檔中的註解與非註解進行分析處理，但在使用&lt;/span&gt;&lt;span lang="EN-US"&gt;”//”&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;註解型式中包含中文的話，偶爾會發生無法進行完整分析的狀況，通常使用&lt;/span&gt;&lt;span lang="EN-US"&gt;”/**/”&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;來進行註解的話大多能解決問題，但若是還無法順利產生&lt;/span&gt;&lt;span lang="EN-US"&gt;javancss&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;報表的話，可以透過自行設定那些檔要引入進行處理，那些檔要排除分析來處理，不過中文問題通常是在&lt;/span&gt;&lt;span lang="EN-US"&gt;Windows&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;系統發生的，&lt;/span&gt;&lt;span lang="EN-US"&gt;Linux&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;似乎就沒有這個狀況。&lt;/span&gt; &lt;/p&gt; &lt;table border="1" cellpadding="0" cellspacing="0" style="BORDER:medium none ; border-collapse:collapse"&gt;   &lt;tbody&gt;   &lt;tr&gt;     &lt;td style="BORDER:0.5pt solid windowtext; PADDING:0cm 1.4pt; WIDTH:484.65pt" valign="top" width="646"&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&amp;lt;reporting&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;artifactId&amp;gt;javancss-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;&amp;lt;includes&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                  &lt;/span&gt;&amp;lt;include&amp;gt;**/*foo.java&amp;lt;/include&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;&amp;lt;/includes&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;&amp;lt;excludes&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                  &lt;/span&gt;&amp;lt;exclude&amp;gt;**/LdapManager.java&amp;lt;/exclude&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                  &lt;/span&gt;&amp;lt;exclude&amp;gt;**/Pending.java&amp;lt;/exclude&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                  &lt;/span&gt;&amp;lt;exclude&amp;gt;**/AuthManager.java&amp;lt;/exclude&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                  &lt;/span&gt;&amp;lt;exclude&amp;gt;**/BusTypeController.java&amp;lt;/exclude&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                  &lt;/span&gt;&amp;lt;exclude&amp;gt;**/SetAuthorityController.java&amp;lt;/exclude&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;&amp;lt;/excludes&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&amp;lt;/reporting&amp;gt;&lt;/span&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-6401116137813876072?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/6401116137813876072/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=6401116137813876072' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/6401116137813876072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/6401116137813876072'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/maven2-reportjavancss-maven-plugin.html' title='Maven2 Report使用javancss-maven-plugin'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-1560099293049976865</id><published>2007-07-11T19:53:00.000+08:00</published><updated>2007-07-11T19:54:24.399+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='開發：Maven2'/><title type='text'>Maven2 Report使用maven-javadoc-plugin</title><content type='html'>&lt;p class="MsoNormal"&gt;   &lt;span style="FONT-FAMILY:細明體"&gt;簡介一下&lt;/span&gt;&lt;span lang="EN-US"&gt;Maven2&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;中&lt;/span&gt;&lt;span lang="EN-US"&gt;maven-javadoc-plugin&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;進行&lt;/span&gt;&lt;span lang="EN-US"&gt;Report&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;的使用。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="FONT-FAMILY:細明體"&gt;更詳細的用法請參考：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;a href="http://maven.apache.org/plugins/maven-javadoc-plugin/"&gt;http://maven.apache.org/plugins/maven-javadoc-plugin/&lt;/a&gt;&lt;/span&gt; &lt;/p&gt; &lt;span class="fullpost"&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;h3&gt;   簡易使用法： &lt;/h3&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="FONT-FAMILY:細明體"&gt;基本上只要在&lt;/span&gt;&lt;span lang="EN-US"&gt;reporting&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;標籤中使用進行&lt;/span&gt;&lt;span lang="EN-US"&gt;plugin&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;的設定即可。之後在執行&lt;/span&gt;&lt;span lang="EN-US"&gt;maven   site&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;時就會產生&lt;/span&gt;&lt;span lang="EN-US"&gt;javadoc&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;的文件資料。&lt;/span&gt; &lt;/p&gt; &lt;table border="1" cellpadding="0" cellspacing="0" style="BORDER:medium none ; border-collapse:collapse"&gt;   &lt;tbody&gt;   &lt;tr&gt;     &lt;td style="BORDER:0.5pt solid windowtext; PADDING:0cm 1.4pt; WIDTH:484.65pt" valign="top" width="646"&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&amp;lt;reporting&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;artifactId&amp;gt;maven-javadoc-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&amp;lt;/reporting&amp;gt;&lt;/span&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;h3&gt;   較複雜的使用法： &lt;/h3&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="FONT-FAMILY:細明體"&gt;一般而言使用簡易的方式即可，但總有某些時候會出問題。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT:24pt; TEXT-INDENT:-24pt"&gt;   &lt;span lang="EN-US" style="FONT-FAMILY:Wingdings"&gt;l&lt;span style='FONT-FAMILY:"Times New Roman"; FONT-STYLE:normal; FONT-VARIANT:normal; FONT-WEIGHT:normal; FONT-SIZE:7pt; LINE-HEIGHT:normal; font-size-adjust:none; font-stretch:normal'&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;狀況一：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br/&gt;   &lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;系統是使用&lt;/span&gt;&lt;span lang="EN-US"&gt;MS950&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;編碼的系統，但&lt;/span&gt;&lt;span lang="EN-US"&gt;java&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;程式卻是用&lt;/span&gt;&lt;span lang="EN-US"&gt;UTF-8&lt;br/&gt;   &lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;解法：使用&lt;/span&gt;&lt;span lang="EN-US"&gt;encoding&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;標籤，指定&lt;/span&gt;&lt;span lang="EN-US"&gt;*.java&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;檔是使用何種編碼。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT:24pt; TEXT-INDENT:-24pt"&gt;   &lt;span lang="EN-US" style="FONT-FAMILY:Wingdings"&gt;l&lt;span style='FONT-FAMILY:"Times New Roman"; FONT-STYLE:normal; FONT-VARIANT:normal; FONT-WEIGHT:normal; FONT-SIZE:7pt; LINE-HEIGHT:normal; font-size-adjust:none; font-stretch:normal'&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;狀況二：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br/&gt;   &lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;產生的&lt;/span&gt;&lt;span lang="EN-US"&gt;javadoc   api&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;文件，但開啟後卻是亂碼&lt;/span&gt;&lt;span lang="EN-US"&gt;(&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;必須在瀏覽器中指定編碼後才正常&lt;/span&gt;&lt;span lang="EN-US"&gt;)&lt;br/&gt;   &lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;解法：使用&lt;/span&gt;&lt;span lang="EN-US"&gt;charset&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;標籤，指定在網頁上是使用何種編碼。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT:24pt; TEXT-INDENT:-24pt"&gt;   &lt;span lang="EN-US" style="FONT-FAMILY:Wingdings"&gt;l&lt;span style='FONT-FAMILY:"Times New Roman"; FONT-STYLE:normal; FONT-VARIANT:normal; FONT-WEIGHT:normal; FONT-SIZE:7pt; LINE-HEIGHT:normal; font-size-adjust:none; font-stretch:normal'&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;狀況三：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br/&gt;   &lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;某些&lt;/span&gt;&lt;span lang="EN-US"&gt;*.java&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;檔&lt;/span&gt;&lt;span lang="EN-US"&gt;javadoclet&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;撰寫有問題，導致無法順利產生&lt;/span&gt;&lt;span lang="EN-US"&gt;JavaDoc   API&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;文件。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br/&gt;   &lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;或者某些&lt;/span&gt;&lt;span lang="EN-US"&gt;*.java&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;文件並不想產生相關的&lt;/span&gt;&lt;span lang="EN-US"&gt;java   api&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;文件時。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br/&gt;   &lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;解法：使用&lt;/span&gt;&lt;span lang="EN-US"&gt;excludePackageNames&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;標籤，排除不希望產生&lt;/span&gt;&lt;span lang="EN-US"&gt;api&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;package&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT:24pt; TEXT-INDENT:-24pt"&gt;   &lt;span lang="EN-US" style="FONT-FAMILY:Wingdings"&gt;l&lt;span style='FONT-FAMILY:"Times New Roman"; FONT-STYLE:normal; FONT-VARIANT:normal; FONT-WEIGHT:normal; FONT-SIZE:7pt; LINE-HEIGHT:normal; font-size-adjust:none; font-stretch:normal'&gt;             &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;狀況四：&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br/&gt;   &lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;除了&lt;/span&gt;&lt;span lang="EN-US"&gt;javadoclet&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;預設的&lt;/span&gt;&lt;span lang="EN-US"&gt;@parameter&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;外，希望自行定義的&lt;/span&gt;&lt;span lang="EN-US"&gt;@parameter&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;資訊也能顯示於&lt;/span&gt;&lt;span lang="EN-US"&gt;Java   Doc API&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;中。&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;br/&gt;   &lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;解法：使用&lt;/span&gt;&lt;span lang="EN-US"&gt;tags&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;標籤，在其中指定&lt;/span&gt;&lt;span lang="EN-US"&gt;tag&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;name&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;placement&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;、&lt;/span&gt;&lt;span lang="EN-US"&gt;head&lt;/span&gt;&lt;span style="FONT-FAMILY:細明體"&gt;屬性即可。&lt;/span&gt; &lt;/p&gt; &lt;table border="1" cellpadding="0" cellspacing="0" style="BORDER:medium none ; border-collapse:collapse"&gt;   &lt;tbody&gt;   &lt;tr&gt;     &lt;td style="BORDER:0.5pt solid windowtext; PADDING:0cm 1.4pt; WIDTH:484.65pt" valign="top" width="646"&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&amp;lt;reporting&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;artifactId&amp;gt;maven-javadoc-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;&amp;lt;encoding&amp;gt;UTF-8&amp;lt;/encoding&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;&amp;lt;charset&amp;gt; UTF-8&amp;lt;/charset&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;&amp;lt;excludePackageNames&amp;gt;org.*:arch.common.*&amp;lt;/excludePackageNames&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;tags&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                  &lt;/span&gt;&amp;lt;tag&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;&amp;lt;name&amp;gt;hibernate.id&amp;lt;/name&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;&amp;lt;placement&amp;gt;a&amp;lt;/placement&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                    &lt;/span&gt;&amp;lt;head&amp;gt;To do something:&amp;lt;/head&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                  &lt;/span&gt;&amp;lt;/tag&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;                &lt;/span&gt;&amp;lt;/tags&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;              &lt;/span&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;  &lt;/span&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&amp;lt;/reporting&amp;gt;&lt;/span&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-1560099293049976865?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/1560099293049976865/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=1560099293049976865' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/1560099293049976865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/1560099293049976865'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/maven2-reportmaven-javadoc-plugin.html' title='Maven2 Report使用maven-javadoc-plugin'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-6835806375411217680</id><published>2007-07-08T22:28:00.000+08:00</published><updated>2007-07-08T22:31:10.731+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='旅遊規劃'/><category scheme='http://www.blogger.com/atom/ns#' term='生活記事'/><title type='text'>自行車旅遊規劃</title><content type='html'>&lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_174fjjnz5fp" /&gt;&lt;br /&gt;參考網址：&lt;a title="http://tour.tpc.gov.tw/bicycle/index.htm" target="_blank" href="http://tour.tpc.gov.tw/bicycle/index.htm"&gt;http://tour.tpc.gov.tw/bicycle/index.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;菀公同學聽說在「&lt;a title="台北縣工商展覽中心" target="_blank" href="http://www.tcwtc.com.tw/"&gt;台北縣工商展覽中心&lt;/a&gt;」又開始了特賣會的活動，相約一起去敗家一下。&lt;br /&gt;因為上次戰果豐富，所以這次當然捨命陪君子囉。&lt;br /&gt;&lt;br /&gt;會後聽他說他們一起進修的同學大家畢了業，卻捨不得同窗的情誼，打算辦一場「自行車之旅」再一次攏絡同學之間的感情。&lt;br /&gt;，聽說同學們二話不說一致推舉菀公為主辦人。為此我們到了「二重疏洪運動公園」的自行車租借處了解一下自行車的租借狀況。&lt;br /&gt;上面的圖是當時拍下來的。打算由二重或其他地點出發，目標可能為八里左岸或淡水。所以必須考量是甲地借車，乙地還車的方式。&lt;br /&gt;上面是費率表囉！&lt;br /&gt;&lt;br /&gt;我想菀公，建議你利用一下我部落格的方便性。&lt;br /&gt;以回覆這篇文章的方式進行你們同學之間的討論。&lt;br /&gt;其他同學就可以直接在這一篇文章中得知討論的結果了。&lt;br /&gt;呵呵！當然一定程度上也可幫我衝衝人氣囉！&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-6835806375411217680?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/6835806375411217680/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=6835806375411217680' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/6835806375411217680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/6835806375411217680'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/blog-post_08.html' title='自行車旅遊規劃'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-2378231576649007291</id><published>2007-07-08T22:04:00.000+08:00</published><updated>2007-07-08T22:06:58.948+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='電影'/><category scheme='http://www.blogger.com/atom/ns#' term='生活記事'/><title type='text'>補7月7日-兩個宅男的聚會與再一次的「變形」</title><content type='html'>力特的前同事，大枯兄聽說「變形金剛」的票房超賣座，又經由我之前的慫恿所以決定要看這部片。&lt;br /&gt;&lt;br /&gt;果然在「國賓」戲院看的感受不同，大戲院就是有大戲院的好…音效超讚、震撼力夠，而且觀眾笑聲出現的頻率多了好幾倍，前一次來國賓是跟力特其他同事一起來當然大枯兄也在內，他說，上一次看「史瑞克3」片長一個小時半左右。感覺還好，不過今次的「變形金剛」片長143分鐘，也就是二個小時23分。加上特效、內容、搞笑程度超讚有種值回票價的感覺。&lt;br /&gt;&lt;br /&gt;上次在「今日」看「變形金剛」最後還有小部分沒看到，這次我就提醒了大枯說，等會完結時再坐一下，還有一小段，最後我們看到，最終還有留下伏筆，還記得狂派的「天王星」的戰鬥機變形機械人嗎？在片中並沒有掛點，最後一幕中他飛走了。而其他狂派全部被丟入世界最深的海溝中。因此有拍第二集的可能…呵呵！期待。&lt;br /&gt;&lt;br /&gt;今天的大枯兄雖然保持著以往的開朗，但看得出有些疑慮，需要朋友們開導開導，給他點意見。當然還是工作上的啦！不過問題不大，只是他必須做出抉擇而已。&lt;br /&gt;在此預祝大枯兄一切順利囉！九月份後我們再來聊聊各自的發展吧！加油囉！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-2378231576649007291?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/2378231576649007291/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=2378231576649007291' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/2378231576649007291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/2378231576649007291'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/77.html' title='補7月7日-兩個宅男的聚會與再一次的「變形」'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-8253959246406128979</id><published>2007-07-05T10:53:00.000+08:00</published><updated>2007-07-05T10:58:15.061+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='開發：軟體工程'/><title type='text'>敏捷開發的比喻</title><content type='html'>書摘：O'Reilly軟體預先架構之美學 (Prefactoring)&lt;br /&gt;&lt;br /&gt;敏捷開發(Agile development)很像輕裝健行。輕裝健行者攜帶的裝備比平常健行者少很多。因此，他們可以走得比較快，花的精力也較少。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;輕裝健行者也比平常健行者更有經驗&lt;/span&gt;。他們只帶必要配備，也就是完成旅程必要的東西。技巧、知識和經驗則完成了整個圖像。他們知道怎麼以最簡便的遮蓋物紮營取暖。他們知道上哪找水，所以他們只帶少量的水。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;要當極致輕裝健行者，那可是需要不少技巧和經驗&lt;/span&gt;。某人必須能夠利用大自然的材料做出必要的東西。&lt;br /&gt;&lt;br /&gt;另方面，重裝健行者會覺得他們必須帶上所有必要裝備，以應付他們可能碰上的任何情況。他們的裝備給了他們安全，然而，&lt;span style="font-weight: bold;"&gt;也會讓他們慢下來&lt;/span&gt;。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-8253959246406128979?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/8253959246406128979/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=8253959246406128979' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/8253959246406128979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/8253959246406128979'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/blog-post_05.html' title='敏捷開發的比喻'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-6913106471074507903</id><published>2007-07-01T23:44:00.000+08:00</published><updated>2007-07-01T23:45:15.538+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='發表文章_刊登於RunPC'/><title type='text'>(2007.6月號－161期)_持續性整合開發導論(下)</title><content type='html'>&lt;p class="western" style="MARGIN-BOTTOM:0in"&gt; &lt;/p&gt; &lt;h1 class="western"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;持續性整合的實踐：選用合適的&lt;/span&gt;&lt;/font&gt;CI&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;伺服器&lt;/span&gt;&lt;/font&gt; &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;持續性整合開發可不是有了專案建置工具與貫徹測試優先原則就沒事了。要記住現在不是單打獨鬥的時代，講求團隊合作，因此不論是公司內參與的開發人員或者外部協同合作的廠商，都會對開發的成果產生重大的影響，因此如何即時掌握專案整體的開發狀況就是另一項挑戰。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;span class="fullpost"&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   Continuous Integration   Server&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;又稱&lt;/span&gt;&lt;/font&gt;CI&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;伺服器，就是用來管理協同開發的持續性整合工具，目前常見的有：&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;ul&gt;   &lt;li&gt;     &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;       CruiseControl&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：&lt;/span&gt;&lt;/font&gt;Java&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;社群中老字號的&lt;/span&gt;&lt;/font&gt;CI&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;工具，擁有完整的&lt;/span&gt;&lt;/font&gt;CI&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;所需功能。&lt;/span&gt;&lt;/font&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;       Continuum&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：為&lt;/span&gt;&lt;/font&gt;Maven&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的子專案，算是後起之秀，設定方便為其優點。&lt;/span&gt;&lt;/font&gt;     &lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   CruiseControl&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;它於&lt;/span&gt;&lt;/font&gt;2001&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;年發佈已經有五年多的歷史，在許多方面，&lt;/span&gt;&lt;/font&gt;CruiseControl   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;伺服器   已經成爲持續整合的同義詞，完善的對大多數版本控制伺服器的支援並方便進行擴充，安裝容易也是其優點，如果硬要說個缺點的話就是&lt;/span&gt;&lt;/font&gt;CruiseControl&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;對於專案持續性整合是基於&lt;/span&gt;&lt;/font&gt;XML&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的設定，非常靈活而且彈性，但對不熟悉的人來說，有點困難，包含的&lt;/span&gt;&lt;/font&gt;Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的管理介面，對於專案的掌控來說非常方便。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   Continuum&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;於&lt;/span&gt;&lt;/font&gt;2005&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;年發佈是最新的&lt;/span&gt;&lt;/font&gt;CI   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;伺服器之一，支援&lt;/span&gt;&lt;/font&gt;Ant&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;Maven1&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;Maven2&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/font&gt;Shell&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;進行專案的建置，也支援了大多數的版本控制伺服器，同&lt;/span&gt;&lt;/font&gt;CruiseControl&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;一樣也擁有&lt;/span&gt;&lt;/font&gt;Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;管理介面，並且可直接在&lt;/span&gt;&lt;/font&gt;Web&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;介面上進行&lt;/span&gt;&lt;/font&gt;CI&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;伺服器的設定，相對於&lt;/span&gt;&lt;/font&gt;CruiseControl&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;來說比較方便，但以靈活度與擴展性來說，就比較差了，且因為推出時間較短，某些功能還不齊全。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;到此我們可知完整的持續性整合開發環境至少必須架設版本控制伺服器與持續性整合伺服器，參考圖   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt;所示，開發人員與協力廠商開發平台持續對版本控制伺服器提交修改完成的程式碼，而通常在提交前會先取得目前最新的原始碼進行測試，當確認不影響版本控制伺服器上的原始碼後才進行提交。持續性整合伺服器可設定特定時間，當發現原始碼已經發生變化時，執行取得原始碼動作，並進行編譯與測試，此時將可完整的知道目前開發專案的穩定狀態，可設定持續性整合伺服器當專案建置成功或失敗時通知相關人員即時進行問題排除。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;通常在&lt;/span&gt;&lt;/font&gt;CI&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;伺服器發生建置失敗的原因，除了一般的程式碼錯誤外，開發人員未提交所有程式碼檔案或未解決程式碼衝突就提交也是原因之一，前者是開發人員針對多個原始碼檔案進行了修改，但因經過了一段時間，已經不確定到底有那些檔案需要提交而造成的問題。後者是當程式碼在版本控制伺服器上同一個時間有多個開發人員進行了修改，後者提交時會提示發生了檔案衝突，而開發人員未解決重覆提交產生的問題。這些問題的發生事實上都是開發人員對版本控制觀念的認知不足所致。無論取得或提交原始碼時需對整個專案進行，才不會遺漏掉必須提交的檔案。版本衝突時相對於版本控制系統都會有一套解決衝突的流程，只要小心都能避免。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font color="#000000"&gt;&lt;img align="bottom" border="1" height="333" name="graphics1" src="http://docs.google.com/File?id=ddgh9kcq_70c6mcb2g9" width="411"/&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref161569626"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;1&lt;/font&gt; 持續性整合開發環境&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;h1 class="western"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;持續性整合的分析：產生可供評估的報表&lt;/span&gt;&lt;/font&gt; &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;開發過程中文件的產生是很重要的事，開發前期的系統分析、系統設計文件，開發中的原始碼進度與狀況追蹤報表，開發後期的元件使用手冊、系統操作手冊，無論是任何一份文件都是目前專案開發所需要的重要參考。但傳統軟體專案的開發多數文件的產生都是由人手工去撰寫的，若要在開發人員在開發過程中還必須挪出時間進行文件的撰寫，對於開發人員來說是非常痛苦的事。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;更重要的是，開發過程中程式碼會變，所產出的文件當程式碼一改變可能沒多久就過時了。因此在業界有多數狀況都是專案開發前期非常認真的撰寫相關文件，開發中期發現文件內容跟不上程式碼的變化索性就暫時放一邊，打算等之後再統一寫，到了開發後期要不就是因為專案的&lt;/span&gt;&lt;/font&gt;Delay&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;或失敗而成為一個沒有文件的專案，就是根本忘了到底新增了那些功能而成為一份殘缺不全的文件。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;因此在多數的敏捷開發原則中就提出了，最好的文件就是原始碼，首先為了讓原始碼在日後維護容易，必須在撰寫程式碼時保持程式碼的可讀性，並且必須統一程式碼的風格，訂定統一的開發規範，在一定程度上降低對文件的依賴，另外透過在程式碼中順手加上的文件資訊也就是所謂的&lt;/span&gt;&lt;/font&gt;Java   Doclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的註解型式，配合相關的&lt;/span&gt;&lt;/font&gt;Doclet&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;工具，就可隨時產生符合當時狀況的&lt;/span&gt;&lt;/font&gt;Java   Doc&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;說明文件。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;為了追蹤專案開發進度與協助程式碼進行分析與重構，在此列出常用的持續性整合開發程式碼分析工具：&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;ul&gt;   &lt;li&gt;     &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;       CheckStyle&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：檢查程式碼撰寫風格是否符合規範。&lt;/span&gt;&lt;/font&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;       PMD&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：靜態程式碼分析工具，可用於找出潛在錯誤程式。&lt;/span&gt;&lt;/font&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;       JavaNCSS&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：協助在開發過程中檢查出程式碼的複雜度。&lt;/span&gt;&lt;/font&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;       Cobertura&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;：於執行期檢查執行與未執行程式的測試覆蓋率檢測工具。&lt;/span&gt;&lt;/font&gt;     &lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   CheckStyle&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;是自動化程式碼風格檢查工具，在傳統的多人協同開發中，可以發現每位開發人員都有相異的程式碼風格，少數有經驗的開發人員在風格上都有一定程度的好習慣，但在程度參差不齊的參與者中，很難保證有一致的&lt;/span&gt;&lt;/font&gt;Code   Style&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，&lt;/span&gt;&lt;/font&gt;CheckStyle&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;工具設定了一份規則文件，於建置時期對程式碼進行檢查，將不符合規範的資訊列出，因此開發人員可透過這份資訊了解本身所撰寫的風格是否合乎需求，並進行改進。如此一來維護程式碼就變成一件容易的事，畢竟誰都不想維護一份有怪異風格的程式碼。參考圖   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;所示的&lt;/span&gt;&lt;/font&gt;CheckStyle&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;報表，提供了&lt;/span&gt;&lt;/font&gt;Info&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;Warning&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、與&lt;/span&gt;&lt;/font&gt;Error&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的訊息，並緊接著列出錯誤原因與行數。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   PMD&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;是一個&lt;/span&gt;&lt;/font&gt;Java&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;原始碼分析工具，透過一系列的規則比較可以協助找出潛在的&lt;/span&gt;&lt;/font&gt;Bug&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，包含   &lt;/span&gt;&lt;/font&gt;16   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;個規則集合，涵蓋了所有   &lt;/span&gt;&lt;/font&gt;Java&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;經常發生的問題，如不良的命名規則、無用而未移除的程式碼、藕合度分析、不良的異常使用…等。在此我們參考圖   &lt;font face="Times New Roman, serif"&gt;3&lt;/font&gt;可看出，該&lt;/span&gt;&lt;/font&gt;PMD&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;報告說明了有&lt;/span&gt;&lt;/font&gt;40&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;個檔案找到了&lt;/span&gt;&lt;/font&gt;65&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;個錯誤，並且列出了錯誤原因為&lt;/span&gt;&lt;/font&gt;import&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;了未使用的類別，還有包含了一個空的&lt;/span&gt;&lt;/font&gt;Exception&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;區塊。由此一來開發人員可移除無用的&lt;/span&gt;&lt;/font&gt;import&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;而不會造成日後不使用相關&lt;/span&gt;&lt;/font&gt;jar&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;檔後造成的編譯錯誤，處理&lt;/span&gt;&lt;/font&gt;Exception&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;區塊以避免日後發生問題後無法得知究竟異常原因為何。當然除了&lt;/span&gt;&lt;/font&gt;PMD&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;所內建的檢查機制都可以因專案的需求進行修改，並可自行撰寫新的規則。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   JavaNCSS&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;用於進行原始碼的複雜度分析，&lt;/span&gt;&lt;/font&gt;NCSS&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;是&lt;/span&gt;&lt;/font&gt;Non   Commenting Source   Statements&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;也就是分析非註解的原始碼資訊，聽起來似乎沒什麼但實際上&lt;/span&gt;&lt;/font&gt;JavaNCSS&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;首先幫我們列出了前&lt;/span&gt;&lt;/font&gt;30&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;名程式碼行數最多的類別，其次列出了前&lt;/span&gt;&lt;/font&gt;30&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;名&lt;/span&gt;&lt;/font&gt;Method&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;最多的類別，供開發人員分析是否包含了過多無用的程式碼或者該類別給予了太多的責任，由此進行重構的考量。另外最重要的部分列出了前&lt;/span&gt;&lt;/font&gt;30&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;名&lt;/span&gt;&lt;/font&gt;Method&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/font&gt;NCSS&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;資訊，通常當&lt;/span&gt;&lt;/font&gt;Method&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中的程式碼行數過長，相對的也代表了有較高的&lt;/span&gt;&lt;/font&gt;NCC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，&lt;/span&gt;&lt;/font&gt;NCC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;所指的是&lt;/span&gt;&lt;/font&gt;Cyclomatic   Complexity   Number&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;意指為程式的複雜度，在&lt;/span&gt;&lt;/font&gt;Method&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;中&lt;/span&gt;&lt;/font&gt;NCC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;愈高，事實上就愈不利於日後的維護，因此&lt;/span&gt;&lt;/font&gt;NCC&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;的數值將是重構的重要依據。參考圖   &lt;font face="Times New Roman, serif"&gt;4&lt;/font&gt;。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   Cobertura&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;是西班牙語覆蓋的意思，這個工具可以協助在進行單元測試的過程中統計已測試過的類別與未測試過類別的資訊，參考圖   &lt;font face="Times New Roman, serif"&gt;5&lt;/font&gt;中明顯可知，當測試覆蓋率到達&lt;/span&gt;&lt;/font&gt;100%&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;時也就代表了該類別中所有功能都至少被完整執行過&lt;/span&gt;&lt;/font&gt;1&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;次以上，而覆蓋率分為&lt;/span&gt;&lt;/font&gt;Line   Coverage&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/font&gt;Branch   Coverage&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;代表著一般程式碼與有分支判斷的程式碼&lt;/span&gt;&lt;/font&gt;(&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;例如：&lt;/span&gt;&lt;/font&gt;if   else&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;switch&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;或迴圈等&lt;/span&gt;&lt;/font&gt;)&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;，當然分支愈多代表著該類別的複雜度愈高，撰寫高覆蓋率的測試程式碼就愈困難。在進行程式碼開發的過程中如何撰寫功能強大、程式複雜度低而高測試覆蓋率的系統是每位開發人員的理想，而透過工具的分析，可讓開發人員的理想更趨近於真實。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font color="#000000"&gt;&lt;img align="bottom" border="1" height="344" name="graphics2" src="http://docs.google.com/File?id=ddgh9kcq_71hn83zm8j" width="411"/&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref161595730"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;2&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   CheckStyle&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;報表。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font color="#000000"&gt;&lt;img align="bottom" border="1" height="364" name="graphics3" src="http://docs.google.com/File?id=ddgh9kcq_72hfxhsxg5" width="411"/&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref161597630"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;3&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   PMD&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;報表。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font color="#000000"&gt;&lt;img align="bottom" border="1" height="367" name="graphics4" src="http://docs.google.com/File?id=ddgh9kcq_73dwjdmwmn" width="411"/&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref161603610"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;4&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   JavaNCSS&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;報表。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font color="#000000"&gt;&lt;img align="bottom" border="1" height="291" name="graphics5" src="http://docs.google.com/File?id=ddgh9kcq_74dctzk5cs" width="411"/&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="MARGIN-TOP:0.08in"&gt;   &lt;a name="_Ref161604028"&gt;&lt;/a&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;圖   &lt;font face="Times New Roman, serif"&gt;5&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;   Cobertura&lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;報表&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;h1 class="western"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;結論&lt;/span&gt;&lt;/font&gt; &lt;/h1&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;持續性整合開發為專案帶來了高效率、可控管、靈活有彈性的開發方式，透過專案管理與建置工具的協助，能夠很輕鬆在專案編譯過程中產生所需的專案開發資訊與分析報表，這一切的一切都是自動化的。透過報表資訊的產出可以減少開發人員手工檢查的時間，帶來了更高的效率與生產力，透過持續性整合伺服器的快速回饋，可以即時掌握目前專案原始碼開發狀況，徹底解決了企業及大型專案協同開發的管理問題。記住所有專案的開發都會發生問題，但持續性整合開發能在專案進行過程中持續發現並盡速解決問題，在開發的每一步降低風險，要知道愈晚發生問題所衍生的維護成本會是早期發現的十倍甚至百倍。&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p class="western" style="MARGIN-BOTTOM:0in"&gt;   &lt;br/&gt; &lt;/p&gt; &lt;p style="BACKGROUND:#000000 none repeat scroll 0%; MARGIN-BOTTOM:0in; -moz-background-clip:-moz-initial; -moz-background-origin:-moz-initial; -moz-background-inline-policy:-moz-initial"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;span lang="zh-TW"&gt;&lt;b&gt;作者介紹&lt;/b&gt;&lt;/span&gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;font size="3"&gt;&lt;span lang="zh-TW"&gt;盧建州   &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&amp;lt;jazz.lu0827@gmail.com&amp;gt;&lt;/font&gt; &lt;/p&gt; &lt;p style="BORDER:1px solid #000000; PADDING:0.01in 0.06in; MARGIN-BOTTOM:0in"&gt;   &lt;font face="細明體, MingLiU, monospace"&gt;&lt;font size="3"&gt;&lt;span lang="zh-TW"&gt;有多年軟體開發經驗，注重軟體工程並善用&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;Design   Patterns&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;font size="3"&gt;&lt;span lang="zh-TW"&gt;。專研於&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;Java&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;font size="3"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;Open   Source&lt;/font&gt;&lt;font face="細明體, MingLiU, monospace"&gt;&lt;font size="3"&gt;&lt;span lang="zh-TW"&gt;解決方案、跨平台技術與其異質資訊系統整合。目前為自由工作者。&lt;/span&gt;&lt;/font&gt;&lt;/font&gt; &lt;/p&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-6913106471074507903?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/6913106471074507903/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=6913106471074507903' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/6913106471074507903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/6913106471074507903'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/20076161.html' title='(2007.6月號－161期)_持續性整合開發導論(下)'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-3167887017207932660</id><published>2007-07-01T23:35:00.000+08:00</published><updated>2007-07-01T23:36:45.620+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='靈光一閃：突如其來的感觸'/><title type='text'>上帝的安排</title><content type='html'>&lt;FONT SIZE=3 STYLE=FONT-WEIGHT:bold&gt;上帝給每個人都有了絕佳的安排。&lt;BR&gt; 了解並且利用的人認為…上帝是眷顧我的！&lt;BR&gt; 誤解而且自怨自艾的人認為…上帝遺棄我了！&lt;BR&gt; &lt;BR&gt; 要知道&lt;BR&gt; 出現難題就代表了要換個方式思考…&lt;BR&gt; 情況不如預期也許才是最好的安排…&lt;BR&gt; &lt;BR&gt; 反而一切若順利到不可思議的地步時…&lt;BR&gt; 也許你只要再往前踏一步，就會掉入無可回天的深淵。&lt;/FONT&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-3167887017207932660?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/3167887017207932660/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=3167887017207932660' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/3167887017207932660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/3167887017207932660'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/blog-post_01.html' title='上帝的安排'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-1669629982070561553</id><published>2007-07-01T23:27:00.000+08:00</published><updated>2007-07-01T23:28:46.521+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='生活記事'/><title type='text'>接下來的兩個月</title><content type='html'>兩個星期了吧!端午節過後我就讓自己處於放鬆的狀態,因為我知道剩下兩個月的時間必須要開始精實了, 雖然這些日子多多少少都在接觸一些工作，但我認為還沒真正做出個自己要的東西。&lt;BR&gt; &lt;BR&gt; 不過並非代表又要進入一個從頭開始的階段,所意謂的是之前的我已經做好了準備工作,接下來該是將這些觀念、架構、邏輯與元件進行總整理,將其轉化為武器、防具與兵法守則來裝備在身,而在未來的日子裏將協助我攻城略地,所到之處將攻無不克、戰無不勝。&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-1669629982070561553?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/1669629982070561553/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=1669629982070561553' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/1669629982070561553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/1669629982070561553'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/blog-post.html' title='接下來的兩個月'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-732309608488265130</id><published>2007-07-01T23:21:00.000+08:00</published><updated>2007-07-01T23:25:28.002+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='電影'/><category scheme='http://www.blogger.com/atom/ns#' term='生活記事'/><title type='text'>收心操:不看會後悔的「Transformers(變形金剛)」</title><content type='html'>&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/dI1CD2Wv5fw"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/dI1CD2Wv5fw" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;明天要收心認真了,但總覺得還沒休息夠,大概是玩心一起就很難收了吧!&lt;BR&gt; 昨晚一想，給自己再放縱一次就收心。&lt;BR&gt; 嗯！那就去看之前一直想看的那部片吧！今早約莫11點左右到了西門町，想都沒想就往國賓戲院走了去，&lt;BR&gt; 前幾天在網上看「變形金剛」場場客滿，總覺得不太相信，記得前陣子跟力特的朋友來看「史瑞客3」時，一樣也是&lt;BR&gt; 假日，人就沒有很多，也沒什麼人在排隊。不過今天一看，哇塞！人超多…要排到什麼時候呀？前次來沒看到，今天到是滿多人在賣黃牛票的。&lt;BR&gt; 用目光稍微掃了一下之後就給他放棄了，因為我不太想跟一大堆人擠。&lt;BR&gt; &lt;BR&gt; 轉向朝捐血車的地方前進(前幾天捐血中心發通知可以再捐了)，第二個狀況出現，哇咧…下午一點後才開放捐血。&lt;BR&gt; 正當覺得今天西門町是白來的正準備打道回府的時候，耶！我發現對面的今日影城也有上映「Transformers」。&lt;BR&gt; 問了賣票美眉後，當下決定就在這看這部片吧，利用了點開場前的時間到附近的誠品逛了一下，預先挑了幾本書，&lt;BR&gt; 預計等電影看完、捐完血後再過來買。&lt;BR&gt; &lt;BR&gt; 電影開場了，老實說…遠遠超過我的想像…，網路上看過的人提出的感想並不誇張…，有人說特效超讚、劇情緊湊沒有冷場。&lt;BR&gt; 有人說這部片非常搞笑，女生也非常適合來看，聽說劇場中女生笑的比男生大聲。而多數人都說，有機會會再看一次，&lt;BR&gt; 更有人身體力行已經看過二次以上了。&lt;BR&gt; &lt;BR&gt; 當時看到"搞笑"二字，怪！這不是科幻片嗎？好像從沒看到科幻片有搞笑的劇情，今天一看…呵呵！的確…一定程度上應該算喜劇哦！&lt;BR&gt; 超喜歡大黃蜂那部跑車假裝拋錨時，使用收音機刻意製造出浪漫的氣氛，當女孩打算自已走路回家時，跑車迅速發動，收音機傳出&lt;BR&gt; "Baby come Back..."這首歌，呵呵！真希望能有一部這麼懂主人心意的車呀！&lt;BR&gt; &lt;BR&gt; 沒想到今天換個方向走，就會有不同的巧妙安排「看電影」Check、「捐血」Check、「買書」Check…今天做了三件事了呢！&lt;BR&gt; 不過我想唯一美中不足的就是，沒進到「國賓」感受那音響的震撼力…說真的，我也希望再看一次「Transformers」但下次一定得在國賓看。&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Hn-enjcgV1o"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Hn-enjcgV1o" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-732309608488265130?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/732309608488265130/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=732309608488265130' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/732309608488265130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/732309608488265130'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/07/transformers.html' title='收心操:不看會後悔的「Transformers(變形金剛)」'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-6157932786751870865</id><published>2007-06-28T15:17:00.000+08:00</published><updated>2007-06-28T15:18:10.235+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='靈光一閃：突如其來的感觸'/><title type='text'>聰明的男人、女人與傻男女</title><content type='html'>&lt;span style="font-weight: bold;"&gt;聰明的女人選擇會願意愛自己一輩子的男人；&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; 聰明的男人選擇會願意照顧、呵護一輩子的女人；&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;傻男女則是除了會做出聰明男女相反的選擇外還會犯一個相同的錯誤！&lt;/span&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;「愛不對人！！！」&lt;/span&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-6157932786751870865?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/6157932786751870865/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=6157932786751870865' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/6157932786751870865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/6157932786751870865'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/06/blog-post_28.html' title='聰明的男人、女人與傻男女'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-4271039238343769873</id><published>2007-06-27T22:57:00.000+08:00</published><updated>2007-06-28T14:30:11.436+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日劇'/><title type='text'>求婚大作戰-最終回：打開奇跡之門</title><content type='html'>&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/pgNGkaNSomg"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/pgNGkaNSomg" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;這是 健 與 禮 小時候的一段話。&lt;br /&gt;&lt;/span&gt;健：「我會負責的，會一輩子照顧禮的」&lt;br /&gt;禮：「拜託你了！」&lt;br /&gt;&lt;br /&gt;妖精對著健說：「&lt;br /&gt;你要繼續尋找奇跡之門啊！&lt;br /&gt;無論如何都想改變命運，&lt;br /&gt;唯有這樣持續祈禱方能開啟奇跡之門，&lt;br /&gt;打開那道門的鑰匙就在你心中，&lt;br /&gt;只是你沒注意到罷了。&lt;br /&gt;」&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_156fzn8x8fb" style="width: 400px;" /&gt; &lt;/div&gt; &lt;span style="font-weight: bold;font-size:100%;" &gt;回顧過往 健 與 禮 的對話。&lt;/span&gt;&lt;br /&gt;健：「人生裡有沒有想要重新來過的時候，有沒有後悔的事情」&lt;br /&gt;禮：「我啊，高中的時候一直在想，我們為什麼是青梅竹馬呢？如果不是青梅竹馬的話，可能會更加坦率一些吧！可能就不用這麼痛苦地一直暗戀了。想了很多，但我明白了是不應該否定這一點。想著雖然那個時候覺得很痛苦，很失敗，但如果沒有這一點的話，就沒有今天的我在這裡笑著。這麼想就覺得沒有什麼值得後悔的事情。我覺得能和健認識真的太好了！是不是覺得現在我很少見的坦率一回了呢！雖然知道以後還有各種各樣的事，只有健的存在是永遠不變的。雖然到現在在健的面前一直不能坦率，但是我覺得因為有健，才會有現在的我。謝謝你！真的很感謝你！」&lt;br /&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_158d97qfndq" style="width: 400px;" /&gt; &lt;/div&gt; 健心想：「禮沒有後悔過去，而是活在當下，接受了過去的一切，毫不動搖地活在當下。對於想要重新來過的我來說，禮的純潔，十分耀眼，刺痛了心裡。為什麼小時候，那麼容易就能辦到的事情，越長大就變得越困難呢？跟失敗比起來，根本沒有做的後悔會痛苦好幾倍。現在目的地不知道是否有奇跡的大門，但覺得應該試著想相信我自己。」&lt;br /&gt;&lt;br /&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_157cp7nsxc6" style="width: 400px;" /&gt; &lt;/div&gt; &lt;span style="font-weight: bold;font-size:100%;" &gt;回到現實 妖精為健 準備了最佳的舞台。&lt;/span&gt;&lt;br /&gt;妖精：「&lt;br /&gt;重要的，不是感嘆過去的現在，而是改變現在，面向未來的意志。&lt;br /&gt;我為你準備了，總算能表達自己回到過去，經歷拼命磨練的痛苦洗練的答案合適的地方。&lt;br /&gt;祈願吧！你祈願我就替你實現。&lt;br /&gt;尋求吧！你尋求我就替你發掘。&lt;br /&gt;叩門吧！你叩門我就替你打開。&lt;br /&gt;好了，挺起胸膛，走下去！&lt;br /&gt;」&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Bkyr5j1iF5Q"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Bkyr5j1iF5Q" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_159356gf4gf" style="width: 400px;" /&gt; &lt;/div&gt; &lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;婚禮上健的致辭。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;健三：「&lt;br /&gt;我和禮從小學開始就是同學，&lt;br /&gt;昨天在小學畢業紀念冊上看到，禮在上面寫到將來夢想成為一個可愛的新娘，&lt;br /&gt;現在看來對他可不可愛還有很多疑問，這暫且不論，總之她能實現自己從小的夢想&lt;br /&gt;…………………………&lt;br /&gt;雖然對不起多田先生，我想過如果禮放棄結婚就好了。&lt;br /&gt;我也想過搶走禮，14年中，歡樂的時候也好、痛苦的時候也好、&lt;br /&gt;難過的時候也好，都一起度過的禮。&lt;br /&gt;真心覺得能讓他幸福的只有我，一點兒不順心就馬上鬧彆扭的禮、&lt;br /&gt;因為我逃避掃除和工作而常常生氣的禮，倔強，一點兒也不坦率的禮。&lt;br /&gt;最了解她的是我，看起來堅強，其實很細膩的禮。&lt;br /&gt;自己的事總是放在第二位，比誰都重視朋友的禮。&lt;br /&gt;一直在身邊的禮，最需要他的是我。&lt;br /&gt;但是，最終只是在心裡想著，在禮面前從來沒有坦白過。&lt;br /&gt;一直在身邊，想著隨時都可以說的話。&lt;br /&gt;最終一次都沒有說出口。&lt;br /&gt;只有那麼一句話，但是一次都沒有說出口。&lt;br /&gt;我…我喜歡過禮。&lt;br /&gt;說真的，現在也喜歡著禮！&lt;br /&gt;但是，禮在今天和多田先生結婚了。&lt;br /&gt;雖然很不甘心，但是他甘要結婚了。&lt;br /&gt;禮的存在，在我的心裡十分重要。&lt;br /&gt;這些話，為了說出口花了好長的時間。&lt;br /&gt;禮，恭禧你結婚，請你過得幸福。&lt;br /&gt;沒有幸福的話，不幸福的話，我可真的不原諒你哦！&lt;br /&gt;」&lt;br /&gt;&lt;br /&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_160c8pfd5pc" style="width: 400px;" /&gt; &lt;/div&gt; &lt;span style="font-weight: bold;font-size:100%;" &gt;禮內心的掙扎。&lt;/span&gt;&lt;br /&gt;禮：「&lt;br /&gt;我的身旁，總是有岩瀨健。&lt;br /&gt;我的回憶，也總有著健的身影。&lt;br /&gt;健的溫柔，總像無意間在哪兒繞了點路。&lt;br /&gt;要稍稍慢一拍才會傳達給我…&lt;br /&gt;如今的我才能察覺到那份笨拙的溫柔。&lt;br /&gt;當時的自己，總是無法那麼坦率。&lt;br /&gt;明明很開心卻說不出口。&lt;br /&gt;好鄙視這樣的自己。&lt;br /&gt;害怕被傷害，而沒能鼓起勇氣到最後的人…是我&lt;br /&gt;沒能一直相信健的溫柔就中途放棄的人…是我&lt;br /&gt;決定了不再回頭，就單方面閉上眼的人…也是我&lt;br /&gt;健他總是一直在認真的投球，沒能好好接住的人…是我。&lt;br /&gt;我們的人生，總是不斷錯過。&lt;br /&gt;害怕再這樣繼續錯過&lt;br /&gt;不要再搖擺，不要再猶豫&lt;br /&gt;那時明明就決定了&lt;br /&gt;要是…要是那時候&lt;br /&gt;能對自己誠實一點的話&lt;br /&gt;是不是就能把一直沒能說出口的話&lt;br /&gt;"我喜歡你"這樣一句話…說出口了呢？&lt;br /&gt;」&lt;br /&gt;&lt;br /&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_161zxph2gv" style="width: 400px;" /&gt; &lt;/div&gt; &lt;span style="font-weight: bold;font-size:100%;" &gt;妖精給予禮的最後協助，打開奇跡之門。&lt;/span&gt;&lt;br /&gt;妖精：「&lt;br /&gt;J.S韋斯曾經說過&lt;br /&gt;男人無法放棄初戀&lt;br /&gt;女人則無法放棄最後的愛&lt;br /&gt;曾有個男人展開一段重寫過去悔恨的旅程&lt;br /&gt;他拼命努力想改變過去&lt;br /&gt;無奈奇跡之門終究沒有打開&lt;br /&gt;在旅程的最後他發現了&lt;br /&gt;再怎麼改變過去，自己還是不會改變&lt;br /&gt;於是他想到了，比起感嘆過去的現在&lt;br /&gt;改變現在，面向未來的意志才是最重要的。&lt;br /&gt;你不覺得，現在開始還來得及嗎？&lt;br /&gt;」&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vnzucU8lzn0"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vnzucU8lzn0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_162r4gc2vhg" style="width: 400px;" /&gt;&lt;br /&gt; &lt;div style="padding: 1em 0pt; text-align: left;"&gt;     &lt;img src="http://docs.google.com/File?id=ddgh9kcq_163f26p5wcw" style="width: 400px;" /&gt;&lt;br /&gt;   &lt;div style="padding: 1em 0pt; text-align: left;"&gt;       &lt;img src="http://docs.google.com/File?id=ddgh9kcq_164hd6v79hn" style="width: 400px;" /&gt;&lt;br /&gt;     &lt;div style="padding: 1em 0pt; text-align: left;"&gt;         &lt;img src="http://docs.google.com/File?id=ddgh9kcq_1654ht3hcww" style="width: 400px;" /&gt;&lt;br /&gt;       &lt;div style="padding: 1em 0pt; text-align: left;"&gt;           &lt;img src="http://docs.google.com/File?id=ddgh9kcq_166dggxdzgg" style="width: 400px;" /&gt;         &lt;/div&gt;       &lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/nda4rvB79tM"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/nda4rvB79tM" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-4271039238343769873?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/4271039238343769873/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=4271039238343769873' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/4271039238343769873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/4271039238343769873'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/06/blog-post_27.html' title='求婚大作戰-最終回：打開奇跡之門'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-110064192662049865</id><published>2007-06-27T16:52:00.000+08:00</published><updated>2007-06-27T16:54:24.561+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='開發：Portal(Liferay)'/><title type='text'>Liferay Portal單一使用者登入</title><content type='html'>&lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;在啟動&lt;/span&gt;&lt;span lang="EN-US"&gt;Liferay&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;後，如果同一個使用者連續開啟&lt;/span&gt;&lt;span lang="EN-US"&gt;Browser&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;進行登入後結果會是如何，真正實作後會發現，我們同樣使用&lt;/span&gt;&lt;span lang="EN-US"&gt;test@liferay.com&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;這個帳號進行二次登入後，在&lt;/span&gt;&lt;span lang="EN-US"&gt;Session&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;中會有二個&lt;/span&gt;&lt;span lang="EN-US"&gt;Session&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;的記錄，並且這二個同樣帳號的使用者可進行完全符合該帳號權限的操作，那我們要如何限制使用者帳號只能進行單一的登入呢？&lt;/span&gt; &lt;/p&gt; &lt;span class="fullpost"&gt; &lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_151dcds7sg8" style="width: 400px;" /&gt; &lt;/div&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;圖：預設狀況下，同一使用者進行二次登入的結果。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;如果手邊有&lt;/span&gt;&lt;span lang="EN-US"&gt;Liferay&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;Source   Code&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;的話，可以找一下，在原始碼&lt;/span&gt;&lt;span lang="EN-US"&gt;[portal-ejbclassesportal.properties]&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;中的設定。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt;portal.properties&lt;/span&gt; &lt;/p&gt; &lt;table style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;   &lt;tbody&gt;   &lt;tr&gt;     &lt;td style="border: 0.5pt solid windowtext; padding: 0cm 1.4pt; width: 484.65pt;" valign="top" width="646"&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;# Set the         following to true if users are allowed to have simultaneous         logins&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;# from         different sessions.&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;    &lt;/span&gt;#&lt;/span&gt;       &lt;/p&gt;       &lt;p class="MsoNormal"&gt;         &lt;span lang="EN-US"&gt;&lt;span style=""&gt;            &lt;/span&gt;auth.simultaneous.logins=true&lt;/span&gt;       &lt;/p&gt;     &lt;/td&gt;   &lt;/tr&gt;   &lt;/tbody&gt; &lt;/table&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;這個設定主要用途在於設定是否允許相同帳號的使用者同時間進行登入，換句話說就是允許同一使用者進行多次的登入，因為預設為&lt;/span&gt;&lt;span lang="EN-US"&gt;true&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;，所以才會有上述的狀況出現。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;若不希望同一時使用者進行多次登入的話可將該設定改為&lt;/span&gt;&lt;span lang="EN-US"&gt;false&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;即可，但在原始碼中修改並不明智，畢竟你修改了預設的設定，比較聰明的方法為，在已經佈署的&lt;/span&gt;&lt;span lang="EN-US"&gt;Liferay   Portal&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;上進行調整，你可以開啟&lt;/span&gt;&lt;span lang="EN-US"&gt;[%LiferayPortal%webappsROOTWEB-INFclassesportal-ext.properties]&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;這個延伸設定檔，在當中進行設定將會覆蓋掉預設的設定。將其修改為&lt;/span&gt;&lt;span lang="EN-US"&gt;auth.simultaneous.logins=false&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;後重新啟動&lt;/span&gt;&lt;span lang="EN-US"&gt;liferay&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;，再次進行二次相同帳號使用者登入。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;實作後會覺得有些吊詭的情況，還是允許二次相同帳號的登入如下圖：&lt;/span&gt; &lt;/p&gt; &lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_151dcds7sg8" style="width: 400px;" /&gt; &lt;/div&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;圖：還是一樣的狀況&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;但當我們將第一次登入帳號的&lt;/span&gt;&lt;span lang="EN-US"&gt;Browser&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;進行任何操作時將會發現出現結果如下：&lt;/span&gt; &lt;/p&gt; &lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_152f674h4hm" style="width: 400px;" /&gt; &lt;/div&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;圖：警告有相同的帳號用不同的&lt;/span&gt;&lt;span lang="EN-US"&gt;Session&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;登入。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;這個意思就代表了第一次登入的使用者因為在之後已有其他相同的使用者進行了登入，因此被踢出了&lt;/span&gt;&lt;span lang="EN-US"&gt;Portal&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;系統。這時我們再檢查一次第二次登入的&lt;/span&gt;&lt;span lang="EN-US"&gt;Browser&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;Session&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;資訊：&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;div style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=ddgh9kcq_153g43kq699" style="width: 400px;" /&gt; &lt;/div&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;圖：得到滿意的結果，因先前登入的&lt;/span&gt;&lt;span lang="EN-US"&gt;User&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;已被踢出，所以只有一個使用者登入。&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span lang="EN-US"&gt; &lt;p&gt;&lt;/p&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;   &lt;span style="font-family:細明體;"&gt;好，最後我們來個結論，這個設定只會限制在&lt;/span&gt;&lt;span lang="EN-US"&gt;Liferay   Portal&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;中無論使用&lt;/span&gt;&lt;span lang="EN-US"&gt;PC&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;的&lt;/span&gt;&lt;span lang="EN-US"&gt;IP&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;為何，使用者只能進行單一的登入，這麼看來似乎很像達成了&lt;/span&gt;&lt;span lang="EN-US"&gt;SSO(   Single Sign On   )&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;單一使用者簽入的任務，但其實不然，&lt;/span&gt;&lt;span lang="EN-US"&gt;SSO&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;是基於多個系統的單一簽入，因此多個系統一定會共用一個驗證中心，有興趣的話可以找一下&lt;/span&gt;&lt;span lang="EN-US"&gt;Liferay   Portal&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;與&lt;/span&gt;&lt;span lang="EN-US"&gt;CAS&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;進行&lt;/span&gt;&lt;span lang="EN-US"&gt;SSO&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;的資料。在本例中，因為&lt;/span&gt;&lt;span lang="EN-US"&gt;Liferay   Portal&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;只是單一一個系統，因此談不上&lt;/span&gt;&lt;span lang="EN-US"&gt;SSO&lt;/span&gt;&lt;span style="font-family:細明體;"&gt;。&lt;/span&gt; &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-110064192662049865?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/110064192662049865/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=110064192662049865' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/110064192662049865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/110064192662049865'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/06/liferay-portal.html' title='Liferay Portal單一使用者登入'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-7069233086189424352</id><published>2007-06-25T14:43:00.000+08:00</published><updated>2007-06-27T22:24:09.763+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='靈光一閃：突如其來的感觸'/><title type='text'>專家、高手與好顧問</title><content type='html'>&lt;span style="font-weight: bold;"&gt;專家只是訓練有素的狗、高手只是有好習慣的工程師…&lt;br /&gt;&lt;br /&gt;而好顧問則是什麼事都沒做，卻用了影響力讓公司朝正確方向前進。&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-7069233086189424352?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/7069233086189424352/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=7069233086189424352' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/7069233086189424352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/7069233086189424352'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/06/blog-post_25.html' title='專家、高手與好顧問'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-455466271456436180</id><published>2007-06-25T13:53:00.000+08:00</published><updated>2007-06-25T13:58:54.603+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='開發：Maven1'/><category scheme='http://www.blogger.com/atom/ns#' term='發表文章_刊登於RunPC'/><title type='text'>(2006.04月號－147期)_實踐專案管理，使用Maven</title><content type='html'>&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在小型專案與一般於企業中建置的&lt;/span&gt;&lt;/span&gt;J2EE&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;專案中，經常因導入的&lt;/span&gt;&lt;/span&gt;AP Server&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;平台的不同而統一使用特定的&lt;/span&gt;&lt;/span&gt;IDE&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;開發環境，例如：&lt;/span&gt;&lt;/span&gt;IBM&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;WebSphere&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用&lt;/span&gt;&lt;/span&gt;WSAD&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;Oracle&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;OC4J&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用&lt;/span&gt;&lt;/span&gt;JDeveloper&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;WebLogic&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用&lt;/span&gt;&lt;/span&gt;Workshop&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;等。&lt;/span&gt;&lt;/span&gt;&lt;p class="western" style="margin-bottom: 0in;"&gt; &lt;/p&gt;  &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;當進行大型專案開發，並分割出多數的系統模組都委外進行開發時，每一間委外廠商可能都使用不同的開發工具與&lt;/span&gt;&lt;/span&gt;IDE&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行開發，因此如何管理、建置、佈署專案就是一門學問了。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;br /&gt;&lt;span class="fullpost"&gt;  &lt;br /&gt;&lt;p class="western" style="margin-bottom: 0in;"&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;而以往&lt;/span&gt;&lt;/span&gt;J2EE&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;專案依&lt;/span&gt;&lt;/span&gt;IDE&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;開發環境不同有不同的建置與佈署邏輯，而這些建置與佈署方式彼此並不相容，例如在&lt;/span&gt;&lt;/span&gt;WSAD&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;建置的設定，無法移植至&lt;/span&gt;&lt;/span&gt;JDeveloper&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;Workshop&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用，反之亦然，這對日後的維護上也將更形困難，我們沒辦法保證，當時開發時的&lt;/span&gt;&lt;/span&gt;IDE&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與目前維護時使用的&lt;/span&gt;&lt;/span&gt;IDE&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;開發工具是相同的。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;若欲將各模組委外進行開發，管理跨&lt;/span&gt;&lt;/span&gt;J2EE&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;平台建置的大型專案，&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;是個很好的選擇，&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;可以撰寫腳本進行所有動作，要求委外廠商進行模組開發使用&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;也不是問題，因為目前業界大多數也是如此進行開發的。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;但問題在於其&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;建構人員必須非常熟悉專案建置邏輯，並且善用一些開放原始碼元件協同進行開發、測試與佈署，若只是單純使用&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;基本腳本功能的話，則頂多也只是將原先手動進行複製、刪除、編譯、封裝&lt;/span&gt;&lt;/span&gt;JAR&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;WAR&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;EAR&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的動作轉為自動化而已，實質上並沒有太大的意義，還不如撰寫批次檔進行自動化來得簡單方便。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;遺憾的是，於&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中協同其他元件進行&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;功能的擴充並沒有想像中的簡單，參考設定 &lt;span style="font-family:Times New Roman, serif;"&gt;1&lt;/span&gt;中可以發現，於&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中欲使用&lt;/span&gt;&lt;/span&gt;Cactus&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行容器測試，必須進行以下步驟。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;步驟&lt;/span&gt;&lt;/span&gt;1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;：首先必須於&lt;/span&gt;&lt;/span&gt;init&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中設定&lt;/span&gt;&lt;/span&gt;cactus&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的擴充標籤&lt;/span&gt;&lt;/span&gt;runservertests&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;步驟&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;：&lt;/span&gt;&lt;/span&gt;testwar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中進行原始碼的編譯與封裝。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;步驟&lt;/span&gt;&lt;/span&gt;3&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;：&lt;/span&gt;&lt;/span&gt;prepare.test.tomcat.40&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中複製出&lt;/span&gt;&lt;/span&gt;tomcat&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;環境並進行佈署。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;步驟&lt;/span&gt;&lt;/span&gt;4&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;：&lt;/span&gt;&lt;/span&gt;test.tomcat.40&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中使用&lt;/span&gt;&lt;/span&gt;runservertests&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;擴充標籤執行&lt;/span&gt;&lt;/span&gt;start.tomcat.40&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;啟動&lt;/span&gt;&lt;/span&gt;tomcat&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、執行&lt;/span&gt;&lt;/span&gt;test&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行容器測試、最後執行&lt;/span&gt;&lt;/span&gt;stop.tomcat.40&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;關閉&lt;/span&gt;&lt;/span&gt;tomcat&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;基本上，建構人員並不想建置這麼複雜的設定、不想引入這些與專案原始碼無關並且只供測試用的&lt;/span&gt;&lt;/span&gt;jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔、不想了解&lt;/span&gt;&lt;/span&gt;tomcat&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;伺服容器的結構，更不用說怎麼去啟動與關閉&lt;/span&gt;&lt;/span&gt;tomcat&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;了。但若專案欲於&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;上使用&lt;/span&gt;&lt;/span&gt;Cactus&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，這一切似乎是無可避免的，一旦加入的擴充元件愈多，&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本將愈來愈複雜，目前&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中只加入了&lt;/span&gt;&lt;/span&gt;tomcat&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的設定，試想當專案需要於&lt;/span&gt;&lt;/span&gt;WebLogic&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;Resin&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;JBoss&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行測試時，撰寫的&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的腳本檔將會有多複雜與難以維護。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;另外，在設定 &lt;span style="font-family:Times New Roman, serif;"&gt;1&lt;/span&gt;中我們也發現，多個專案中運行&lt;/span&gt;&lt;/span&gt;Cactus&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;時的設定都是大同小異的，因此可以將其抽出作為&lt;/span&gt;&lt;/span&gt;template&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，並以&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;ENTITY&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;方式進行引入，於多個專案中使用。這是個很好的解決方案，解決了設定上的複雜性，卻還是免不了必須在專案中放置相依的&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔，當建構範圍愈來愈大相依&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔的管理也更加麻煩。更何況&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Ant&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中只包含建置邏輯的腳本，雖然目前在各&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;IDE&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;開發環境中幾乎都已支援&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Ant&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，但&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Ant&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並無法反向建置出各&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;IDE&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;開發環境的設定。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;當使用版本控制程式進行管理時，相依&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔愈多將使納入版本管理的程式愈顯龐大，但實際上該納入控管的只有原始碼而已，所有&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔應該抽出並且共用才對。而若將&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;IDE&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;開發環境的設定納入控管則會造成災難，開發人員都會希望自己的開發環境是方便且友善的，為了如此的目的多多少少都會修改其相關設定，當每一位開發人員都有權利對&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;IDE&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定進行&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;commit&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;時，我們將發現開發環境的設定將會是一團亂，甚至於造成專案無法正常開啟。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;總結上面所述，跨&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;J2EE&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;平台的專案管理工具最好能符合以下條件。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;ul&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;由建置設定檔反向產生個別&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;IDE&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;開發環境設定，並且由建置人員將&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;IDE&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定檔排除在版本控制之外。&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;將所有相依的&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔統一放置於貯藏庫&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;(repository)&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中，於建置專案的同時進行連結與&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Classpath&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的引用。&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;將所有經常使用的建置邏輯抽出成為&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;template&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，並強迫使用統一的建置邏輯，才不會因為不同的建置人員而寫出不同的建置腳本檔，而使日後維護更加艱難。&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;將所有第三方協同專案開發的套件進行封裝，成為一個外掛模組。例如將&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Cactus&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;封裝成為&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Plug-in&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，而之後只需簡易的呼叫&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Plug-in&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行協同作業而無須理會原先該套件使用上有多複雜。&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;筆者於&lt;/span&gt;&lt;/span&gt;139&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;期的&lt;/span&gt;&lt;/span&gt;RunPC&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中直接使用&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行了簡易專案開發的示範，從本期開始將與讀者一同分享，如何使用&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;完成上述的要求，並且更進一步的超越使其成為專案管理與建置工具的最佳實踐。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;a name="_Ref126436669"&gt;&lt;/a&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定 &lt;span style="font-family:Times New Roman, serif;"&gt;1&lt;/span&gt; &lt;/span&gt;&lt;/span&gt; &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;於&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中使用&lt;/span&gt;&lt;/span&gt;Cactus&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;target name="init"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;taskdef name="runservertests" classname="..."&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   [...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/span&gt;cactus&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;擴充標籤&lt;/span&gt;&lt;/span&gt;...] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/taskdef&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;target name="test.tomcat.40" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   depends="prepare.test.tomcat.40"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;runservertests &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   testURL="[cactus&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試網址&lt;/span&gt;&lt;/span&gt;]" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   startTarget="start.tomcat.40" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stopTarget="stop.tomcat.40" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   testTarget="test"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;target name="prepare.test.tomcat.40" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   depends="check.test.tomcat.40,testwar"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   [...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/span&gt;Tomcat&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;環境並將測試&lt;/span&gt;&lt;/span&gt;War&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔進行佈署&lt;/span&gt;&lt;/span&gt;...] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;copy file="[...]/test.war" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   tofile="[...]/webapps/test.war"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;target name="testwar" depends="compile"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;war warfile="..." webxml="..."&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   [...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行封裝&lt;/span&gt;&lt;/span&gt;War&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔&lt;/span&gt;&lt;/span&gt;...] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/war&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;target name="start.tomcat.40"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;java classname="..." fork="yes"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   [...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/span&gt;Classpath&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並啟動&lt;/span&gt;&lt;/span&gt;tomcat...] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/java&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;target name="stop.tomcat.40"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;java classname="..." fork="yes"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   [...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/span&gt;Classpath&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並關閉&lt;/span&gt;&lt;/span&gt;tomcat...] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/java&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;target name="test"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;junit fork="yes"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;classpath&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   [...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/span&gt;cactus&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;所需要的&lt;/span&gt;&lt;/span&gt;Classpath...] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/classpath&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;formatter type="plain" usefile="false"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;test name="[cactus&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試單元&lt;/span&gt;&lt;/span&gt;]"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/junit&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的起源&lt;/span&gt;&lt;/span&gt; &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;曾經是筆者認為絕佳的建置工具，畢竟&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;為&lt;/span&gt;&lt;/span&gt;Another Neat Tool(&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;另一個很棒的工具&lt;/span&gt;&lt;/span&gt;)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的縮寫。經過多次專案的歷練後發現，要建置與維護多個&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本的專案將非常的不易。而&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的起源最初是由於進行&lt;/span&gt;&lt;/span&gt;Jakarta Turbine&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;專案，原先專案中每一個&lt;/span&gt;&lt;/span&gt;check in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;到&lt;/span&gt;&lt;/span&gt;CVS&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的不同的&lt;/span&gt;&lt;/span&gt;JAR&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔都擁有他們自己的&lt;/span&gt;&lt;/span&gt;build files&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，在進行維護上相當的困難，因此能夠進行很簡單的建置，並且定義出一個建置多個&lt;/span&gt;&lt;/span&gt;project&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的標準、一個對&lt;/span&gt;&lt;/span&gt;project&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;構成清晰的描述、一個簡單的方式發佈&lt;/span&gt;&lt;/span&gt;project&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的資訊與一個能夠通過幾個不同的&lt;/span&gt;&lt;/span&gt;project&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;去分享不同的&lt;/span&gt;&lt;/span&gt;JAR&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔的方式就成為&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;這個專案的目標。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;現在的&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;將可以協助開發人員更容易的進行日常工作的建立與更輕易的理解所有&lt;/span&gt;&lt;/span&gt;Java-based&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;開發的專案。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;因此可以在最短時間內使開發人員導入目前專案的開發。並且提供以下幾個特點。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;ul&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使專案建置的過程更加容易&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;提供一個通用的專案建置系統&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;提供建立高品質的專案開發資訊&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;提供最佳化實踐的專案開發指南&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;允許以通透的方式進行新功能的整合&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;理念上&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;是一個管理與整合專案開發的建置工具，在使用上基於&lt;/span&gt;&lt;/span&gt;XML&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;概念的&lt;/span&gt;&lt;/span&gt;Project Object Model (POM-&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;專案元件模型&lt;/span&gt;&lt;/span&gt;)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的設計，並且實際上&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的架構與核心是非常微小的，幾乎所有的功能都是由&lt;/span&gt;&lt;/span&gt;Plugins&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;所提供，因此，在&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中對於&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的應用非常重要。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   Maven1.x&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;環境設定&lt;/span&gt;&lt;/span&gt; &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;相容於大多數的&lt;/span&gt;&lt;/span&gt;OS&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;平台，讀者可參考設定 &lt;span style="font-family:Times New Roman, serif;"&gt;2&lt;/span&gt;與設定 &lt;span style="font-family:Times New Roman, serif;"&gt;3&lt;/span&gt;進行&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;環境的指定並執行&lt;/span&gt;&lt;/span&gt;maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;確認是否正確執行。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;首次執行時，&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;預設將&lt;/span&gt;&lt;/span&gt;[MAVEN_HOME]/plugins&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下所有&lt;/span&gt;&lt;/span&gt;jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔進行解壓縮放置於&lt;/span&gt;&lt;/span&gt;${user.home}/.maven/cache&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;路徑下，在&lt;/span&gt;&lt;/span&gt;Windows&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中是置於&lt;/span&gt;&lt;/span&gt;C:Documents and Settings[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;登入帳號&lt;/span&gt;&lt;/span&gt;] .mavencache&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，於&lt;/span&gt;&lt;/span&gt;Linux&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;則是置於&lt;/span&gt;&lt;/span&gt;/home/[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;登入帳號&lt;/span&gt;&lt;/span&gt;] /.maven/cache&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下，這些所謂的&lt;/span&gt;&lt;/span&gt;plugins&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;大多是基於&lt;/span&gt;&lt;/span&gt;Jelly&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;語言所定義的建置腳本，也將是日後我們最常使用的套件。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;對於相依&lt;/span&gt;&lt;/span&gt;jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔的管理則提供了&lt;/span&gt;&lt;/span&gt;Remote &amp; Local Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行集中的管理，預設&lt;/span&gt;&lt;/span&gt;Remote Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;指向&lt;/span&gt;&lt;/span&gt;http://www.ibiblio.org/maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;網站而&lt;/span&gt;&lt;/span&gt;Local Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;置於&lt;/span&gt;&lt;/span&gt;${user.home}/.maven/ repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下，&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;運行過程中相依的檔案會經由&lt;/span&gt;&lt;/span&gt;Remote Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下載至&lt;/span&gt;&lt;/span&gt;Local Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;存放。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;將&lt;/span&gt;&lt;/span&gt;plugins&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;local repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;置於&lt;/span&gt;&lt;/span&gt;${user.home}/.maven/cache&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;${user.home}/.maven/ repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，原意在跨平台環境下都能指向開發人員登入後&lt;/span&gt;&lt;/span&gt;User Home&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的資料放置路徑，但通常在實際開發中我們會希望將其路徑指向特定位置。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;a name="_Ref126494933"&gt;&lt;/a&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定 &lt;span style="font-family:Times New Roman, serif;"&gt;2&lt;/span&gt; &lt;/span&gt;&lt;/span&gt; Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;於&lt;/span&gt;&lt;/span&gt;Windows&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;平台設定&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   set MAVEN_HOME=[maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;放置路徑&lt;/span&gt;&lt;/span&gt;]maven&lt;br /&gt;  set PATH=%MAVEN_HOME%bin;%PATH% &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;a name="_Ref126494947"&gt;&lt;/a&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定 &lt;span style="font-family:Times New Roman, serif;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;於&lt;/span&gt;&lt;/span&gt;Linux&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;平台設定&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   export MAVEN_HOME= [maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;放置路徑&lt;/span&gt;&lt;/span&gt;] /maven&lt;br /&gt;  export PATH=${PATH}:${MAVEN_HOME}/bin &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;參數設定與優先權&lt;/span&gt;&lt;/span&gt; &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在此我們可以參考圖 &lt;span style="font-family:Times New Roman, serif;"&gt;1&lt;/span&gt;進行參數的修改，該圖說明了&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中參數優先權的順序，在&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中當使用&lt;/span&gt;&lt;/span&gt;property&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤進行設定之後，將無法再次修改其參數值，而&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的差異在於&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;依照設定檔放置的位置不同擁有其不同的優先權。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;讀者可自行解壓縮&lt;/span&gt;&lt;/span&gt;[MAVEN_HOME]/lib/maven.jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，當中可以發現名為&lt;/span&gt;&lt;/span&gt;defaults.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，該檔為所有預設參數放置的位置。另外在我們建置的專案中皆可包含二個設定檔，分別為&lt;/span&gt;&lt;/span&gt;project.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;build.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，並且&lt;/span&gt;&lt;/span&gt;build.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;優先權高於&lt;/span&gt;&lt;/span&gt;project.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，也就是說當這二個檔案中使用相同參數時&lt;/span&gt;&lt;/span&gt;build.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;所設定的值會替代&lt;/span&gt;&lt;/span&gt;project.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的值。但這二個檔案的用意究竟為何？一般初次接觸&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的人都會搞混，觀念上來說&lt;/span&gt;&lt;/span&gt;project.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;所存的參數多為專案所需使用的參數，&lt;/span&gt;&lt;/span&gt;build.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;所設定的參數則為建置專案時所需的參數。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;以另外一個觀點來說，假設於目前專案開發階段，我們將程式碼納入版本控管，並在一部測試伺服主機上進行自動化的每日構建與測試，則我們可以將這部測試機或正式機上所需的建置參數指定給&lt;/span&gt;&lt;/span&gt;project.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並將該檔納入版本控管當中。因此在進行&lt;/span&gt;&lt;/span&gt;Daily Build&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;時可以從&lt;/span&gt;&lt;/span&gt;project.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;取得參數。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;而開發人員於自己的開發環境中進行&lt;/span&gt;&lt;/span&gt;check out&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;原始碼後，一樣可以從版本控制系統中取得&lt;/span&gt;&lt;/span&gt;project.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，但該檔的設定並不一定與目前開發人員的環境相同，因此建置上可能會發生問題，為此開發人員可自行建立&lt;/span&gt;&lt;/span&gt;build.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並將設定上的不同處進行覆寫，來完成專案建置與測試。而&lt;/span&gt;&lt;/span&gt;build.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;我們通常不納入版本控管當中。另外&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中協同多專案進行開發是非常容易的，所以目前進行開發的專案，有可能是父專案中的子專案，也因此繼承了父專案的相關屬性，在父專案下亦可包含&lt;/span&gt;&lt;/span&gt;project.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;build.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;二個設定檔。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在&lt;/span&gt;&lt;/span&gt;User home&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的路徑下，也就是&lt;/span&gt;&lt;/span&gt;C:Documents and Settings[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;登入帳號&lt;/span&gt;&lt;/span&gt;]&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，是屬於優先權次高的設定檔，通常在此進行對預設參數的覆寫，以取代原始的預設值，參考設定 &lt;span style="font-family:Times New Roman, serif;"&gt;4&lt;/span&gt;在這裏重新指定了&lt;/span&gt;&lt;/span&gt;maven.home.local&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;maven.repo.remote&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，透過&lt;/span&gt;&lt;/span&gt;maven.home.local&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;參數的覆寫，相對的也指定了&lt;/span&gt;&lt;/span&gt;.maven/cache&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;.maven/ repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的路徑，這一點可以從&lt;/span&gt;&lt;/span&gt;maven.jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中的&lt;/span&gt;&lt;/span&gt;defaults.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的設定&lt;/span&gt;&lt;/span&gt;maven.repo.local=${maven.home.local}/repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;maven.plugin.unpacked.dir = ${maven.home.local}/cache&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;找到解答。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;若為了加速下載速度或是企業內部網路受限的環境下而必須設定代理伺服器可使用設定 &lt;span style="font-family:Times New Roman, serif;"&gt;4&lt;/span&gt;中&lt;/span&gt;&lt;/span&gt;maven.proxy&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;相關參數進行設定，該設定中亦支援&lt;/span&gt;&lt;/span&gt;NTLM&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;授權。但在網路管制較嚴格的企業中，代理伺服器的設定可能還是無法使&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;順利進行檔案下載作業，則這時必須求助於網管人員調整其網路權限。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用&lt;/span&gt;&lt;/span&gt;Command line&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;方式進行設定的參數將覆蓋之前所有的設定，參考設定 &lt;span style="font-family:Times New Roman, serif;"&gt;6&lt;/span&gt;中我們運行了&lt;/span&gt;&lt;/span&gt;plugin:download&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並覆寫參數&lt;/span&gt;&lt;/span&gt;maven.repo.remote&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;以及其他參數。使用方式同&lt;/span&gt;&lt;/span&gt;java&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;參數設定&lt;/span&gt;&lt;/span&gt;-Dproperty=value&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，擁有最高的優先權。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;a name="_Ref126645629"&gt;&lt;/a&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定 &lt;span style="font-family:Times New Roman, serif;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; User home&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下的&lt;/span&gt;&lt;/span&gt;build.properties &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   #&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/span&gt;cache&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;放置路徑&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   maven.home.local=${maven.home}/.maven &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   #&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/span&gt;remote repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;網址&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   maven.repo.remote=file:E:/maven/maven.remote.repository, &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   http://www.ibiblio.org/maven, &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   http://maven-plugins.sourceforge.net &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   #Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用代理伺服器&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   maven.proxy.host=[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;代理伺服器網址&lt;/span&gt;&lt;/span&gt;] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   maven.proxy.port=[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;代理伺服器&lt;/span&gt;&lt;/span&gt;Port] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   maven.proxy.username=[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;帳號&lt;/span&gt;&lt;/span&gt;] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   maven.proxy.password=[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;密碼&lt;/span&gt;&lt;/span&gt;] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   maven.proxy.ntlm.username=[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;帳號&lt;/span&gt;&lt;/span&gt;] &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   maven.proxy.ntlm.password=[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;密碼&lt;/span&gt;&lt;/span&gt;] &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;" align="center"&gt;   &lt;img name="graphics1" src="http://docs.google.com/File?id=ddgh9kcq_147dqw2w4kv" align="bottom" border="0" height="575" width="462" /&gt; &lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;a name="_Ref126638436"&gt;&lt;/a&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;圖 &lt;span style="font-family:Times New Roman, serif;"&gt;1&lt;/span&gt; 參數優先權設定順序&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;資料結構、&lt;/span&gt;&lt;/span&gt;groupId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;artifactId &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;提供了許多的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，讓專案建構變得非常簡單。但&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;對於建置專案也有限制，其限制就是每個專案﹙在&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中一個專案是指帶有&lt;/span&gt;&lt;/span&gt;project.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的一個資料夾﹚只能生成一個成品（&lt;/span&gt;&lt;/span&gt;artifact&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;）。但這個限制對於複雜的專案架構上並沒有問題，因為&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;支援多專案的建置。一個&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;專案可以由子專案，每個子專案可以建置產生自己的成品，最頂層的專案可以將子專案的成品打包進行封裝生成&lt;/span&gt;&lt;/span&gt;JAR&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;WAR&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;EAR&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。並且&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在專案之間還提供了繼承（&lt;/span&gt;&lt;/span&gt;inheritance&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;）。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用了&lt;/span&gt;&lt;/span&gt;groupId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;artifactId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的觀念，參考資料結構 &lt;span style="font-family:Times New Roman, serif;"&gt;1&lt;/span&gt;，當進行小型專案的建置時，我們只需要類似&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;artifact-id-implement&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;或&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;artifact-id-war&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;簡易的建出&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;JAR&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;或&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;WAR&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;即可，這時&lt;/span&gt;&lt;/span&gt;groupId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;artifactId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;通常是相同的。但若進行大型專案的建置，將可能將企業邏輯進行抽像化，產生介面、實作與其共用元件，而多個介面、實作、共用元件配合&lt;/span&gt;&lt;/span&gt;WAR&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;EAR&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的建置就可對大型專案進行封裝與佈署，如此的分層架構規劃下，許多&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;建置的&lt;/span&gt;&lt;/span&gt;artifact&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;都將可以輕易的在各專案的建置下重覆使用，而這時的&lt;/span&gt;&lt;/span&gt;groupId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;artifactId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;就必須有不同的名稱。例如&lt;/span&gt;&lt;/span&gt;Spring&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;這個&lt;/span&gt;&lt;/span&gt;Framework&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，其&lt;/span&gt;&lt;/span&gt;groupId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;為&lt;/span&gt;&lt;/span&gt;org.springframework&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，而分別依功能區分了&lt;/span&gt;&lt;/span&gt;spring-aop&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;spring-beans&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;spring-context&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;spring-dao…&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;等的&lt;/span&gt;&lt;/span&gt;artifactId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="border: 1px solid rgb(128, 128, 128); padding: 0.01in 0.06in; background: rgb(239, 239, 239) none repeat scroll 0% 50%; margin-bottom: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;span lang="zh-TW"&gt;註：關於&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;project.xml&lt;/span&gt;&lt;span lang="zh-TW"&gt;中&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;groupId&lt;/span&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;artifactId&lt;/span&gt;&lt;span lang="zh-TW"&gt;的設定請參考&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;139&lt;/span&gt;&lt;span lang="zh-TW"&gt;期的&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Run PC&lt;/span&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;a name="_Ref126914127"&gt;&lt;/a&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;資料結構 &lt;span style="font-family:Times New Roman, serif;"&gt;1&lt;/span&gt; &lt;/span&gt;&lt;/span&gt; Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;資料夾結構&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;group-id&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;|-- artifact-id-interface&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| |-- src/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | |-- main/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | | |-- java/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | | | `-- ...&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | | `-- resources/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | | `-- ...&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | `-- test/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | |-- java/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | | `-- ...&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | `-- resources/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | `-- ...&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| |-- project.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| |-- maven.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| |-- project.properties&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| `-- build.properties&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;|&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;|-- artifact-id-implement&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| `-- ...&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;結構同上&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;...&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;|&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;|-- artifact-id-war&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| |-- src/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | |-- java/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | |-- resources/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | `-- webapp/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| |-- test/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | |-- java/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | `-- resources/&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| |-- project.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| |-- maven.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| |-- project.properties&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| `-- build.properties&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;|&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;|-- project.xml &lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;|-- maven.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;|-- project.properties&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;`-- build.properties&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;建置&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的組件與其核心架構&lt;/span&gt;&lt;/span&gt; &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的基本概念就是&lt;/span&gt;&lt;/span&gt;Project&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，每一個目錄包含有&lt;/span&gt;&lt;/span&gt;project.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的目錄都是一個&lt;/span&gt;&lt;/span&gt;Project&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，而另一個概念就是&lt;/span&gt;&lt;/span&gt;Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。當運行&lt;/span&gt;&lt;/span&gt;maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;命令時，將會從&lt;/span&gt;&lt;/span&gt;Remote repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中複製於&lt;/span&gt;&lt;/span&gt;project.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中&lt;/span&gt;&lt;/span&gt;dependency&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤所相依的&lt;/span&gt;&lt;/span&gt;jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔到&lt;/span&gt;&lt;/span&gt;Local repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，然後建構專案，封裝成品。參考設定 &lt;span style="font-family:Times New Roman, serif;"&gt;5&lt;/span&gt;與圖 &lt;span style="font-family:Times New Roman, serif;"&gt;2&lt;/span&gt;，&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;依&lt;/span&gt;&lt;/span&gt;groupId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;建立一個子目錄，在&lt;/span&gt;&lt;/span&gt;groupId&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;資料夾中依所需的&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;artifactId&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行下載指定&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;type&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的檔案，這裏所指的&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;type&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;有&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;ejb&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;plugin…&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;等設定，若未指定則預設為&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。在設定 5的範例中將會建立&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;groupId&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;為&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;org.springframework&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的資料夾並於預設&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;type&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;為&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的條件下建立&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;jars&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;資料夾並下載指定規則為&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;artifactid&amp;gt;-&amp;lt;version&amp;gt;.&amp;lt;type&amp;gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;spring-aop-1.2.6.jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;spring-beans-1.2.6.jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;spring-context-1.2.6.jar&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;三個檔案於該資料夾內。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的角色是相當明顯的，每個專案不再需要各自包含自己所依賴的第三方套件，&lt;/span&gt;&lt;/span&gt;Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;將會協助開發人員在多個專案間共用所有套件。而另一方面每個專案也可以自己建置成品，依&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的觀念可使用&lt;/span&gt;&lt;/span&gt;install&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;將套件安裝到&lt;/span&gt;&lt;/span&gt;Local repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，使用&lt;/span&gt;&lt;/span&gt;deploy&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;將套件佈署到&lt;/span&gt;&lt;/span&gt;Remote repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。使用這種方式可以幫助開發者用一種標準的方式在專案間共用自製的套件。並且相互依賴的進行專案間持續整合（&lt;/span&gt;&lt;/span&gt;continuous integration&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;）。若透過&lt;/span&gt;&lt;/span&gt;Cruise Control&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;工具。專案可以持續的建置，最新釋出的成品可以重覆佈署到&lt;/span&gt;&lt;/span&gt;Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中。在建置主機上運行持續性整合，將會定時的持續建構、發佈成品到應用伺服器中、進行自動測試並檢驗建置狀態。參考圖 &lt;span style="font-family:Times New Roman, serif;"&gt;3&lt;/span&gt;顯示了在&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;建置過程中&lt;/span&gt;&lt;/span&gt;project.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;各自的角色。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;a name="_Ref126979210"&gt;&lt;/a&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定 &lt;span style="font-family:Times New Roman, serif;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;於&lt;/span&gt;&lt;/span&gt;project.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;dependency&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;...&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;artifactId&amp;gt;spring-aop&amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;version&amp;gt;1.2.6&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;artifactId&amp;gt;spring-beans&amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;version&amp;gt;1.2.6&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;artifactId&amp;gt;spring-context&amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;version&amp;gt;1.2.6&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;...&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;img name="graphics2" src="http://docs.google.com/File?id=ddgh9kcq_148dk5xbwcw" align="bottom" border="0" height="296" width="669" /&gt; &lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;a name="_Ref126978764"&gt;&lt;/a&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;圖 &lt;span style="font-family:Times New Roman, serif;"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;資料夾結構&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-top: 0.08in; background-color: rgb(255, 255, 255);"&gt;   &lt;img name="graphics3" src="http://docs.google.com/File?id=ddgh9kcq_149c2944jhd" align="bottom" border="0" height="390" width="607" /&gt; &lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;a name="_Ref126929396"&gt;&lt;/a&gt;&lt;a name="_Ref126929391"&gt;&lt;/a&gt; &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;圖 &lt;span style="font-family:Times New Roman, serif;"&gt;3&lt;/span&gt; 建置&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;相關組件&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   Maven Plug-in &lt;/h1&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中幾乎所有功能都是由&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;所提供的，在&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中包含了多個&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，而針對每個&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;可以因應多個&lt;/span&gt;&lt;/span&gt;property&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的設定呈現不同的實作結果。例如&lt;/span&gt;&lt;/span&gt;Maven Jar Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中原先在執行&lt;/span&gt;&lt;/span&gt;maven jar:jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;這個&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;之後，將進行原始碼編譯、測試並依&lt;/span&gt;&lt;/span&gt;artifactid-version.jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;規則封裝成&lt;/span&gt;&lt;/span&gt;jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔，而當我們在進行參數設定並加入&lt;/span&gt;&lt;/span&gt;maven.jar.final.name=xxxx.jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;後重新執行，則最後封裝結果的檔案將會是&lt;/span&gt;&lt;/span&gt;xxxx.jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;究竟目前在本機上有多少的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;可用，在此我們可以執行&lt;/span&gt;&lt;/span&gt;maven -g&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;列出所有的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，亦可以使用&lt;/span&gt;&lt;/span&gt;maven -g &amp;gt; goal.txt&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;重導至檔案中慢慢查看，若已經知道欲使用的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;卻不知該&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;提供多少&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，可使用&lt;/span&gt;&lt;/span&gt;maven -P [plugin name]&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;則可列出指定的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中所有的&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，&lt;/span&gt;&lt;/span&gt;maven -g &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;maven -P &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;列出格式參考資料結構 &lt;span style="font-family:Times New Roman, serif;"&gt;2&lt;/span&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;  &lt;br /&gt; &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   Maven -g&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;-P&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;參數可以清楚的知道有多少的&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;可使用，但&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中有多少&lt;/span&gt;&lt;/span&gt;property&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;就沒有參數可以協助列出以供查看了，關於這個部分可以連至&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;官方網站&lt;/span&gt;&lt;/span&gt;http://maven.apache.org/maven-1.x/reference/plugins&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;參考詳細的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;說明文件。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;  &lt;br /&gt; &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在預先安裝中就已經包含了大多數的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;了，但若欲使用的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;有&lt;/span&gt;&lt;/span&gt;bug&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;或欲使用的功能於本機上的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;尚未提供，則可至&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;官方網站中任選以下方式進行下載並安裝，。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;ul&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;方式&lt;/span&gt;&lt;/span&gt;1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;：手動下載指定版本&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;jar&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，置於&lt;/span&gt;&lt;/span&gt;[MAVEN_HOME]/plugins&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下即可。&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;方式&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;：參考設定 &lt;span style="font-family:Times New Roman, serif;"&gt;6&lt;/span&gt;執行&lt;/span&gt;&lt;/span&gt;plugin:download&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並指定所需的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行手動下載與安裝。&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p class="western" style="margin-bottom: 0in;"&gt;       &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;方式&lt;/span&gt;&lt;/span&gt;3&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;：參考設定 &lt;span style="font-family:Times New Roman, serif;"&gt;7&lt;/span&gt;執行&lt;/span&gt;&lt;/span&gt;maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;任一&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的同時進行&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行自動下載與安裝。&lt;/span&gt;&lt;/span&gt;     &lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="border: 1px solid rgb(128, 128, 128); padding: 0.01in 0.06in; background: rgb(239, 239, 239) none repeat scroll 0% 50%; margin-bottom: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;span lang="zh-TW"&gt;註：&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Maven&lt;/span&gt;&lt;span lang="zh-TW"&gt;中的&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;goal&lt;/span&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Ant&lt;/span&gt;&lt;span lang="zh-TW"&gt;腳本中的&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;target&lt;/span&gt;&lt;span lang="zh-TW"&gt;是意義相同的，所指的都是預先定義好的任務，而&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Maven&lt;/span&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;goal&lt;/span&gt;&lt;span lang="zh-TW"&gt;是由&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Jelly&lt;/span&gt;&lt;span lang="zh-TW"&gt;（基於&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;XML&lt;/span&gt;&lt;span lang="zh-TW"&gt;的標記語言）編寫的一系列命令腳本，而使用&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;goal&lt;/span&gt;&lt;span lang="zh-TW"&gt;的語法為&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;maven [plugin name]:[goal name]&lt;/span&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;資料結構 &lt;span style="font-family:Times New Roman, serif;"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; maven -g &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;maven -P &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;輸出格式&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;__ __&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| / |__ _Apache__ ___&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| |/| / _`  V / -_) '  ~ intelligent projects ~&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;|_| |___,_|_/___|_||_| v. 1.0.2&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Available [Plugins] / Goals&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;===========================&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;[plugin name1] &lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;針對&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;plugin name1&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的描述&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;goal name1 ..... goal name1&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用描述&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;goal name2 ..... goal name2&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用描述&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;goal name3 ..... goal name3&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用描述&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;...&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;[plugin name2] &lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;針對&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;plugin name2&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的描述&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;...&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;a name="_Ref126729124"&gt;&lt;/a&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定 &lt;span style="font-family:Times New Roman, serif;"&gt;6&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;手動下載&lt;/span&gt;&lt;/span&gt;Plug-in &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   maven plugin:download &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   -Dmaven.repo.remote=http://www.ibiblio.org/maven, http://cvs.apache.org/repository/ &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   -DgroupId=maven &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   -DartifactId=maven-jar-plugin &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   -Dversion=1.7 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定 &lt;span style="font-family:Times New Roman, serif;"&gt;7&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;於&lt;/span&gt;&lt;/span&gt;POM&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中設定自動下載&lt;/span&gt;&lt;/span&gt;Plug-in &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;...&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; text-indent: 0.14in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt; maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt; maven-jar-plugin&lt;span style="font-family:細明體, MingLiU, monospace;"&gt; &amp;lt;/artifactId&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;version&amp;gt;1.7&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;type&amp;gt;plugin&amp;lt;/type&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; text-indent: 0.14in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;...&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   Maven Goal &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;除了之前提過的&lt;/span&gt;&lt;/span&gt;project.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;Repository&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;之外，在圖 &lt;span style="font-family:Times New Roman, serif;"&gt;3&lt;/span&gt;中我們可以看到&lt;/span&gt;&lt;/span&gt;maven.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔的設置，這個檔案主要用途在於延伸、擴展與客製化&lt;/span&gt;&lt;/span&gt;Goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，並且在這個檔案中我們會使用到&lt;/span&gt;&lt;/span&gt;preGoal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;postGoal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;三個標籤進行&lt;/span&gt;&lt;/span&gt;Goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的定義。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;參考設定 &lt;span style="font-family:Times New Roman, serif;"&gt;8&lt;/span&gt;中&lt;/span&gt;&lt;/span&gt;project&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤的&lt;/span&gt;&lt;/span&gt;default&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;屬性設定為&lt;/span&gt;&lt;/span&gt;buildWeb&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，在&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中的&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;和&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中的&lt;/span&gt;&lt;/span&gt;target&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;是相同的概念，而且&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中的&lt;/span&gt;&lt;/span&gt;default&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;屬性的設定亦是相同於&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。這個設定意味著在目前專案的目錄下，直接執行&lt;/span&gt;&lt;/span&gt;maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;指令，這時將會執行的&lt;/span&gt;&lt;/span&gt;default&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;為&lt;/span&gt;&lt;/span&gt;buildWeb&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，在這個設定中&lt;/span&gt;&lt;/span&gt;buildWeb&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;直接使用&lt;/span&gt;&lt;/span&gt;attainGoal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤去執行另外一個&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;為&lt;/span&gt;&lt;/span&gt;war Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中的&lt;/span&gt;&lt;/span&gt;war&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;這個&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;從這個例子中我們可知，我們可以在&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤中撰寫所需的執行的&lt;/span&gt;&lt;/span&gt;Jelly&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本，當然這個腳本目前也相容於&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的寫法，並且在&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中還可以使用&lt;/span&gt;&lt;/span&gt;attainGoal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;去執行其他&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。例如&lt;/span&gt;&lt;/span&gt;war:war&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;這個&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;依順序也會去執行&lt;/span&gt;&lt;/span&gt;java:compile&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;test:test&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;war:webapp…&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;這幾個&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   preGoal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤則代表了在指定的&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;執行之前所要執行的建構規則，如之前所提&lt;/span&gt;&lt;/span&gt;war:war&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;運行過程中會去執行&lt;/span&gt;&lt;/span&gt;java:compile&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，而本例中在編譯之前將先行呼叫&lt;/span&gt;&lt;/span&gt;xdoclet:webdoclet&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;這個&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;協助在建置過程中產生&lt;/span&gt;&lt;/span&gt;web&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;相關的設定檔。因此使用&lt;/span&gt;&lt;/span&gt;preGoal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行功能的擴展就無須直接修改&lt;/span&gt;&lt;/span&gt;java:compile&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;這個&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;同樣的&lt;/span&gt;&lt;/span&gt;postGoal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的意義在於將在&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;執行之後所運行的建構規則，在本例中當&lt;/span&gt;&lt;/span&gt;war:war&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;完成後將產生一個&lt;/span&gt;&lt;/span&gt;war&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔，透過&lt;/span&gt;&lt;/span&gt;postGoal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;功能的延伸的撰寫我們就可以進行簡易的&lt;/span&gt;&lt;/span&gt;tomcat&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的佈署動作了。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中無論是&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;preGoal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;postGoal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;都可以嵌入任何&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;task,&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。雖然給了&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;極大的靈活性，但是也很容易造成誤用，反而將之前使用&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行的設定、建置、佈署動作方式原封不動的搬到&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;來了，也就是說，只是在&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的結構下依然故我的撰寫&lt;/span&gt;&lt;/span&gt;Ant&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的腳本，而造成在&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下卻完全用不到&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的好處。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;建議在一般情況下，當找不到任何適當的的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;時再自行撰寫，畢竟&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;最大的好處在於有無數的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;可以使用，並且每一個&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;都是開放原始碼的心血結晶。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="margin-top: 0.08in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定 &lt;span style="font-family:Times New Roman, serif;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; maven.xml &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;?xml version="1.0" encoding="Big5"?&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;project xmlns:j="jelly:core" xmlns:ant="jelly:ant" default="buildWeb"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;preGoal name="java:compile"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;attainGoal name="xdoclet:webdoclet" /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   ...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在指定的&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;之前執行建構規則&lt;/span&gt;&lt;/span&gt;... &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/preGoal&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;goal name="buildWeb"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;attainGoal name="war:war" /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   ...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;建立一個新的或覆寫一個&lt;/span&gt;&lt;/span&gt;goal... &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/goal&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;postGoal name="war:war"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;copy file="${maven.build.dir}/${pom.artifactId}.war" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   todir="${tomcat.home.webapps}"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   ...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在指定的&lt;/span&gt;&lt;/span&gt;goal&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;之後執行建構規則&lt;/span&gt;&lt;/span&gt;... &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/postGoal&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/project&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   Maven1.x&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;Maven2.x&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的差異&lt;/span&gt;&lt;/span&gt; &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;目前上過&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;官方網站的讀者應該已經注意到，&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;已經&lt;/span&gt;&lt;/span&gt;Release&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;了，雖然&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;Maven1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在概念上是非常相近的，但&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在架構上是對於&lt;/span&gt;&lt;/span&gt;Maven1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;完全的重寫，也因此將完全不相容。&lt;/span&gt;&lt;/span&gt;Maven1 Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的部分也無法直接在&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;上使用，而且因為效能考量下原先在&lt;/span&gt;&lt;/span&gt;Maven1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;建立&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;受到重用的&lt;/span&gt;&lt;/span&gt;Jelly&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;語言，將不會在&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中出現，取而代之的將是回歸使用&lt;/span&gt;&lt;/span&gt;Java&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的開發。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;讀者看到這裏是否覺得，即然如此這時專案的開發應該全數移轉到&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;上才是，也該放棄&lt;/span&gt;&lt;/span&gt;Maven1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;了。這也是當筆者看到&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的感想，但是實際上運作幾個&lt;/span&gt;&lt;/span&gt;Project&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;後發現，雖然&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;提供了不少相對於&lt;/span&gt;&lt;/span&gt;Maven1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;增加的新功能與特色，而且目前版本也尚稱穩定，但它最大的問題在於可用的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;還不多，而少數的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;目前還有&lt;/span&gt;&lt;/span&gt;Bug&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;這是理所當然的，想當初&lt;/span&gt;&lt;/span&gt;Maven1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;也是經過二、三年的時間才延伸出這些為數可觀又好用的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，若要&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;能夠成長到一個地步則還需要一段時間，但讀者無需擔心，目前&lt;/span&gt;&lt;/span&gt;Maven1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;建置的資料夾結構移到&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;還是可以共用的，若日後需移轉到&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;時，只需加上&lt;/span&gt;&lt;/span&gt;pom.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並依&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;規範設定就可以完成相容於&lt;/span&gt;&lt;/span&gt;Maven1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;Maven2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的專案了。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="background: rgb(255, 255, 255) none repeat scroll 0% 50%; margin-bottom: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;&lt;b&gt;相關資源&lt;/b&gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   1. http://maven.apache.org/ Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;官方網站&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   2. http://www.theserverside.com/articles/article.tss?l=MavenMagic &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; text-indent: 0.14in; margin-bottom: 0in;"&gt;   Srikanth Shenoy &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;於 &lt;/span&gt;&lt;/span&gt;TheServerSide.com&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;發表的&lt;/span&gt;&lt;/span&gt;MavenMagic&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;文章&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   3. Maven: A Developer's Notebook &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   By Vincent Massol, Timothy M. O'Brien &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5927278193230729286-455466271456436180?l=jazzlu.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jazzlu.blogspot.com/feeds/455466271456436180/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5927278193230729286&amp;postID=455466271456436180' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/455466271456436180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5927278193230729286/posts/default/455466271456436180'/><link rel='alternate' type='text/html' href='http://jazzlu.blogspot.com/2007/06/200604147maven.html' title='(2006.04月號－147期)_實踐專案管理，使用Maven'/><author><name>Johnny Lu</name><uri>http://www.blogger.com/profile/04460858671316270026</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://2.bp.blogspot.com/-Bj9HQwV6vzo/Taqf62gO4zI/AAAAAAAAANo/uLR1hI-HLsc/s220/%25E6%25A0%2597%25E8%2589%25B2%25E4%25BE%25AF%25E9%25B3%25A5.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5927278193230729286.post-1191517378593528756</id><published>2007-06-25T13:37:00.000+08:00</published><updated>2007-06-25T13:41:20.988+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='開發：Maven1'/><category scheme='http://www.blogger.com/atom/ns#' term='開發：WebTest'/><category scheme='http://www.blogger.com/atom/ns#' term='發表文章_刊登於RunPC'/><title type='text'>(2005.11月號－142期)_CanooWebTest實作(下)</title><content type='html'>&lt;p class="western" style="margin-bottom: 0in;"&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在上一期的內容中我們簡單的介紹了&lt;/span&gt;&lt;/span&gt;WebTest&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，並且使用了&lt;/span&gt;&lt;/span&gt;Maven&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;協同&lt;/span&gt;&lt;/span&gt;WebTest&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行簡易腳本測試，而本期將更深入的探討其腳本製作上的考量與進行模組化的腳本製作。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;h1 class="western"&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;序言&lt;/span&gt;&lt;/span&gt; &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;經過上一期的的說明，相信讀者對&lt;/span&gt;&lt;/span&gt;WebTest&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;已經有了進一步的認識，但在眾多的自訂標籤中如何適當的運用來協助進行測試，才是重要的課題。接下來筆者將進行進階版本的測試案例撰寫，並且重覆進行改寫，藉以循序漸進的導引讀者了解&lt;/span&gt;&lt;/span&gt;WebTest&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;於實務上應用的特性，以利於未來在實際應用上以模組化、彈性化、容易維護的角度進行測試案例的撰寫。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;註：本次範例請參考資料結構&lt;/span&gt;&lt;/span&gt;1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，完整程式碼請至&lt;/span&gt;&lt;/span&gt;RunPC&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;網站下載。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;資料結構&lt;/span&gt;&lt;/span&gt;1 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;Jpetstore_WebTest&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;+--webtest &lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本檔資料夾&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| +--config &lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;客製化屬性放置路徑&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--login.properties&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--shopping.properties&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| +--modules &lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試用模組放置路徑&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--checkout.ent&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--login.ent&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--logout.ent&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--set.init.ent&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--set.config.ent&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--shopping.ent&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| +--testsuit1 &lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試案例&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;1&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--login.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--newAccount.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--webtest.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| +--testsuit2 &lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試案例&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;2&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--shopping_dogs.properties&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--shopping_fish.properties&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--shopping.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--webtest.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| +--testsuit3 &lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試案例&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;3&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--login_shopping_checkout.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| | +--webtest.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;| +--webtest.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;+--project.properties&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;+--project.xml&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試案例一&lt;/span&gt;&lt;/span&gt; &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在上一期的實作中，當&lt;/span&gt;&lt;/span&gt;webtest.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本檔撰寫完成之後，即可透過&lt;/span&gt;&lt;/span&gt;maven webtest&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行功能測試，這是因為在&lt;/span&gt;&lt;/span&gt;Webtest Plug-in&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中預設執行路徑指定在&lt;/span&gt;&lt;/span&gt;${basedir}/webtest&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下的&lt;/span&gt;&lt;/span&gt;*.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔的緣故，因此若將撰寫完成的腳本檔置於&lt;/span&gt;&lt;/span&gt;${basedir}/webtest&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的資料夾中，無需指定腳本檔名&lt;/span&gt;&lt;/span&gt;WebTest&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;即可進行所有腳本的測試。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;而從另一方面來說，以這種方式將無法指定腳本執行順序，雖然我們可以指定&lt;/span&gt;&lt;/span&gt;maven.webtest.file=Test*.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;執行特定腳本檔，但顯然彈性應用上還是不夠，因此比較建議的方式為建立一個只包含執行順序內容的腳本檔，並在執行時指定該腳本為功能測試的進入點。撰寫方式參考腳本&lt;/span&gt;&lt;/span&gt;1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，在本期的所有測試案例中都將指定&lt;/span&gt;&lt;/span&gt;webtest.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;做為腳本執行順序檔，例如腳本&lt;/span&gt;&lt;/span&gt;1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;即依順序執行了，新增帳號與登入這二個測試腳本。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;就目前所知預設的&lt;/span&gt;&lt;/span&gt;JPetStore&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的範例中並未建立帳號相關資訊，在此我們使用&lt;/span&gt;&lt;/span&gt;WebTest&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行建立帳號的測試腳本，參考腳本&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;可知所有的腳本檔中至少必須包含二個實體檔供&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;XML&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本使用&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;ENTITY&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的方式進行引入，分別是&lt;/span&gt;&lt;/span&gt;webtestmodulesset.init.ent&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;webtestmodulesset.config.ent&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，這二個檔案在上一期中已經介紹過，在此不再贅述。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;第&lt;/span&gt;&lt;/span&gt;12&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;行&lt;/span&gt;&lt;/span&gt;&amp;lt;testSpec&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤是&lt;/span&gt;&lt;/span&gt;WebTest&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的測試進入點，這個標籤中必須包含了&lt;/span&gt;&lt;/span&gt;&amp;lt;config&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤的網站連結設定與&lt;/span&gt;&lt;/span&gt;&amp;lt;steps&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤的測試步驟。在此要注意的是每一個&lt;/span&gt;&lt;/span&gt;testSpec&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤都擁有各自的&lt;/span&gt;&lt;/span&gt;Session&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，不同的&lt;/span&gt;&lt;/span&gt;testSpec&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;區塊內容都定義者在不同&lt;/span&gt;&lt;/span&gt;Session&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;內的動作。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;第&lt;/span&gt;&lt;/span&gt;15&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;行&lt;/span&gt;&lt;/span&gt;&amp;lt;invoke&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤則是透過&lt;/span&gt;&lt;/span&gt;URL&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的方式進行網頁請求的連結，若&lt;/span&gt;&lt;/span&gt;invoke&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的網頁不存在則會發生&lt;/span&gt;&lt;/span&gt;StepFailedException&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，對於配置基礎驗證（&lt;/span&gt;&lt;/span&gt;Basic Authentication&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;）的網站，也可透過&lt;/span&gt;&lt;/span&gt;username&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與&lt;/span&gt;&lt;/span&gt;password&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;屬性設定進行登入，&lt;/span&gt;&lt;/span&gt;url&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;則代表欲連結網頁的相對路徑。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;第&lt;/span&gt;&lt;/span&gt;24&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;行&lt;/span&gt;&lt;/span&gt;&amp;lt;repeat&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤代表著重覆次數的操作，在本範例中我們進行了&lt;/span&gt;&lt;/span&gt;10&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;次的帳號建立動作，經由&lt;/span&gt;&lt;/span&gt;27&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;行&lt;/span&gt;&lt;/span&gt;invoke&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;將網頁導至新增帳號表單，並透過&lt;/span&gt;&lt;/span&gt;&amp;lt;setinputfield&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤對指定的欄位設值，在&lt;/span&gt;&lt;/span&gt;33&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;行中可以發現引用了&lt;/span&gt;&lt;/span&gt;EL&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;語法&lt;/span&gt;&lt;/span&gt;#{count}&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;取得目前已重覆次數作為帳號名稱的區隔，這種寫法跟程式&lt;/span&gt;&lt;/span&gt;for(int i=0 ; i&amp;lt;10 ; i++)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中取得&lt;/span&gt;&lt;/span&gt;i&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的做法是相同的，預設是透過&lt;/span&gt;&lt;/span&gt;#{count}&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;取得重覆次數。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;第&lt;/span&gt;&lt;/span&gt;41&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;行&lt;/span&gt;&lt;/span&gt;&amp;lt;clickbutton&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤則是模擬了滑鼠按下&lt;/span&gt;&lt;/span&gt;Submit&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;按鈕的動作，將表單資料送出。當所需欄位資料輸入完成送出的同時，系統將建立該帳號並自動進行登入。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;第&lt;/span&gt;&lt;/span&gt;44&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;行&lt;/span&gt;&lt;/span&gt;&amp;lt;verifyxpath&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤，在說明該標籤之前，我們知道帳號已經建立並且登入，而如何確定真的登入了，這時就該判斷回應的網頁上是否出現了所需的訊息，例如使用者未登入之前，網頁上出現會有&lt;/span&gt;&lt;/span&gt;[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;登入&lt;/span&gt;&lt;/span&gt;]&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的連結，已登入時則有&lt;/span&gt;&lt;/span&gt;[&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;登出&lt;/span&gt;&lt;/span&gt;]&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的連結。若這些訊息只是單純的字串時我們可使用&lt;/span&gt;&lt;/span&gt;&amp;lt;verifytext&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;來驗證，如&lt;/span&gt;&lt;/span&gt;&amp;lt;verifytext stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;驗證是否登入&lt;/span&gt;&lt;/span&gt;" text="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;登出&lt;/span&gt;&lt;/span&gt;" /&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，但若驗證訊息若不是文字的話，&lt;/span&gt;&lt;/span&gt;verifytext&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;就無法進行檢查了。在本例中登入與登出的連結皆是以圖片顯示，這時就必需使用&lt;/span&gt;&lt;/span&gt;XPath&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;協助對&lt;/span&gt;&lt;/span&gt;HTML&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;結構進行查詢。在本例中&lt;/span&gt;&lt;/span&gt;&amp;lt;verifyxpath stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;確認是否已登入&lt;/span&gt;&lt;/span&gt;" xpath="//img[@src='../images/sign-out.gif']"/&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;意謂著驗證網頁中是否包含了&lt;/span&gt;&lt;/span&gt;IMG&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並且&lt;/span&gt;&lt;/span&gt;src&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;屬性指向&lt;/span&gt;&lt;/span&gt;../images/sign-out.gif&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;圖片的物件。讀者若對&lt;/span&gt;&lt;/span&gt;XPath&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;有興趣可參考&lt;/span&gt;&lt;/span&gt;http://www.w3.org/TR/xpath&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;官方網站或至&lt;/span&gt;&lt;/span&gt;http://www.purpletech.com/xpe/index.jsp&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下載&lt;/span&gt;&lt;/span&gt;XPath Explorer&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行&lt;/span&gt;&lt;/span&gt;XML Path Language&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的學習。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;到目前為止我們已經說明了測試案例一所需標籤的使用，而測試流程的建立則必須由測試人員進行實際的系統操作並評估於何處加入檢查點，以了解系統是否如預期的回應。測試人員可一邊進行系統操作，一邊進行腳本建立，建立腳本所需的資訊如連結網址、填入欄位名稱、點選按鈕屬性等都是由使用者端的網頁得來的，有時無可避免測試人員必須檢視&lt;/span&gt;&lt;/span&gt;HTML&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;原始碼以了解更多的訊息，但畢竟都比白箱測試來得簡單多了。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試案例一撰寫完成後於&lt;/span&gt;&lt;/span&gt;Console&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下執行&lt;/span&gt;&lt;/span&gt;maven webtest -Dmaven.webtest.file=testsuit1/webtest.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行測試與報表的建立。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;1 testsuit1webtest.xml &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;?xml version="1.0" encoding="Big5"?&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;project name="WebTest" basedir="." default="all"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;target name="all" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;ant antfile="newAccount.xml" dir="."/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;ant antfile="login.xml" dir="."/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/project&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;2 testsuit1newAccount.xml&lt;/span&gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   01 &amp;lt;?xml version="1.0" encoding="Big5"?&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   02 &amp;lt;!DOCTYPE project [ &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   03 &amp;lt;!ENTITY init SYSTEM "../modules/set.init.ent"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   04 &amp;lt;!ENTITY config SYSTEM "../modules/set.config.ent"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   05 ]&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   06 &amp;lt;project name="newAccount" basedir="." default="all"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   07 &amp;amp;init; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   08 &amp;lt;target name="all" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   09 &amp;lt;antcall target="newAccountTest"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   10 &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   11 &amp;lt;target name="newAccountTest" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   12 &amp;lt;testSpec name="newAccountTest" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   13 &amp;amp;config; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   14 &amp;lt;steps&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   15 &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   16 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;連結「&lt;/span&gt;&lt;/span&gt;JPetstore&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;首頁」網址&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   17 url="shop/index.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   18 &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   19 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;連結「登錄」網頁&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   20 url="shop/signonForm.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   21 &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   22 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;連結「新增帳號」網頁&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   23 url="shop/newAccount.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   24 &amp;lt;repeat &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   25 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;新增指定人數帳號&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   26 count="10"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   27 &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   28 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;連結「新增帳號」網頁&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   29 url="shop/newAccount.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   30 &amp;lt;setinputfield &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   31 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;輸入&lt;/span&gt;&lt;/span&gt;User ID" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   32 name="account.username" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   33 value="TestID#{count}" /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   34 &amp;lt;setinputfield &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   35 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;輸入&lt;/span&gt;&lt;/span&gt;New password" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   36 name="account.password" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   37 value="0000" /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   38 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   39 ...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中間省略&lt;/span&gt;&lt;/span&gt;... &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   40 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   41 &amp;lt;clickbutton &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   42 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;按&lt;/span&gt;&lt;/span&gt;[Submit]&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;送出&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   43 name="submit"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   44 &amp;lt;verifyxpath &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   45 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;確認是否已登入&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   46 xpath="//img[@src='../images/sign-out.gif']"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   47 &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   48 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行登出&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   49 url="shop/signoff.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   50 &amp;lt;/repeat&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   51 &amp;lt;/steps&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   52 &amp;lt;/testSpec&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   53 &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   54 &amp;lt;/project&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試案例二&lt;/span&gt;&lt;/span&gt; &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試案例二中，我們將進行購物車的操作，在尚未進行腳本撰寫之前先行於系統上進行寵物商品的導覽，確定要購買的分類&lt;/span&gt;&lt;/span&gt;(Category)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、產品&lt;/span&gt;&lt;/span&gt;(Product)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、項目&lt;/span&gt;&lt;/span&gt;(Item)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，並製作如測試參數&lt;/span&gt;&lt;/span&gt;1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與測試參數&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的屬性檔。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;接著撰寫腳本&lt;/span&gt;&lt;/span&gt;4&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並在&lt;/span&gt;&lt;/span&gt;testsuit2webtest.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中置入測試參數檔進行腳本的執行，在腳本&lt;/span&gt;&lt;/span&gt;3&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中我們可以發現本次的測試進行了二次測試腳本的執行，並分別以&lt;/span&gt;&lt;/span&gt;shopping_fish.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;shopping_dogs.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行測試參數的設定。腳本&lt;/span&gt;&lt;/span&gt;4&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;第&lt;/span&gt;&lt;/span&gt;22&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;行&lt;/span&gt;&lt;/span&gt;&amp;lt;clicklink&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤模擬按下&lt;/span&gt;&lt;/span&gt;Link&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的動作，並在該檔中進行了&lt;/span&gt;&lt;/span&gt;${category.id}&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;${product.id}&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;${item.id} &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;取得&lt;/span&gt;&lt;/span&gt;ANT&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;Property&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，因此在每一次進行&lt;/span&gt;&lt;/span&gt;shopping.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本載入的同時會依據給予的&lt;/span&gt;&lt;/span&gt;properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;檔的不同，設予不同的測試參數，在此相同的測試腳本就能重覆的利用。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;但這樣的寫法在實際的執行上卻發生了問題，我們進行了二次購物車的動作並購買了商品， 照理來說應該在購物車上顯示二項商品才是，不過在這裏無論進行了多少次的購物動作，購買的商品都只有最後一項，前面購買的商品都會被忽略。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;請參考腳本&lt;/span&gt;&lt;/span&gt;4&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;第&lt;/span&gt;&lt;/span&gt;12&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;行，筆者在前面曾經提過每一個&lt;/span&gt;&lt;/span&gt;testSpec&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤都擁有各自的&lt;/span&gt;&lt;/span&gt;Session&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，不同的&lt;/span&gt;&lt;/span&gt;testSpec&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;區塊內容都定義者在不同&lt;/span&gt;&lt;/span&gt;Session&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;內的動作，這就表示了在&lt;/span&gt;&lt;/span&gt;webtest.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中進行的二次腳本，是屬於二次的購買動作，並不屬於一次的操作情節。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;因此讀者在實作的同時必須注意，腳本檔中可以撰寫多個不同的&lt;/span&gt;&lt;/span&gt;testSpec&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，但每一個&lt;/span&gt;&lt;/span&gt;testSpec&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;都是獨立的測試情節，所有的操作是不可分割的。另外使用&lt;/span&gt;&lt;/span&gt;ANT&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;Property&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並不適合作為測試參數使用，因為在&lt;/span&gt;&lt;/span&gt;ANT&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中&lt;/span&gt;&lt;/span&gt;Property&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;一旦設定了值，就無法再次變更，這種特性作為動態參數的傳遞並不恰當。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;若要執行測試案例二，可於&lt;/span&gt;&lt;/span&gt;Console&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下達&lt;/span&gt;&lt;/span&gt;maven webtest -Dmaven.webtest.file=testsuit2/webtest.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;指令，筆者將在測試案例三進行改寫。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;3 testsuit2webtest.xml &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;?xml version="1.0" encoding="Big5"?&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;project name="WebTest" basedir="." default="all"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;target name="all" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;ant antfile="shopping.xml" dir="."&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;property file="shopping_fish.properties"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/ant&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;ant antfile="shopping.xml" dir="."&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;property file="shopping_dogs.properties"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/ant&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/project&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;4 testsuit2shopping.xml &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   01&amp;lt;?xml version="1.0" encoding="Big5"?&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   02&amp;lt;!DOCTYPE project [ &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   03&amp;lt;!ENTITY init SYSTEM "../modules/set.init.ent"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   04&amp;lt;!ENTITY config SYSTEM "../modules/set.config.ent"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   05]&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   06&amp;lt;project name="shopping" basedir="." default="all"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   07 &amp;amp;init; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   08 &amp;lt;target name="all" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   09 &amp;lt;antcall target="shopping" /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   10 &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   11 &amp;lt;target name="shopping" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   12 &amp;lt;testSpec name="shopping" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   13 &amp;amp;config; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   14 &amp;lt;steps&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   15 &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   16 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;連結「&lt;/span&gt;&lt;/span&gt;JPetstore&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;首頁」網址&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   17 url="shop/index.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   18 &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   19 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;瀏覽選購，連結「&lt;/span&gt;&lt;/span&gt;${category.id}&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;」網頁&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   20 url="shop/viewCategory.do?categoryId=${category.id}" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   21 /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   22 &amp;lt;clicklink stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;點選&lt;/span&gt;&lt;/span&gt;Product" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   23 label="${product.id}" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   24 /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   25 &amp;lt;clicklink stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;點選&lt;/span&gt;&lt;/span&gt;Item" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   26 label="${item.id}" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   27 /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   28 &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   29 stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;點選&lt;/span&gt;&lt;/span&gt;[${item.id}]&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;加入購物車&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   30 url="shop/addItemToCart.do?workingItemId=${item.id}" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   31 /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   32 &amp;lt;/steps&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   33 &amp;lt;/testSpec&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   34 &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   35&amp;lt;/project&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試參數&lt;/span&gt;&lt;/span&gt;1 testsuit2shopping_dogs.properties &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   category.id=DOGS &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   product.id=K9-DL-01 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   item.id= EST-10 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試參數&lt;/span&gt;&lt;/span&gt;2 testsuit2shopping_fish.properties &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   category.id=FISH &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   product.id=FI-FW-02 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   item.id=EST-21 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試案例三&lt;/span&gt;&lt;/span&gt; &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;參考腳本&lt;/span&gt;&lt;/span&gt;6&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，在測試案例三中，我們將購物流程抽離獨立成單一的實體檔&lt;/span&gt;&lt;/span&gt;modulesshopping.ent&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;，在腳本&lt;/span&gt;&lt;/span&gt;5&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行實體檔引入的動作並透過&lt;/span&gt;&lt;/span&gt;configshopping.properties&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行參數的設值，參考測試參數&lt;/span&gt;&lt;/span&gt;3&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;5&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;第&lt;/span&gt;&lt;/span&gt;25~30&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;行&lt;/span&gt;&lt;/span&gt;&amp;lt;storeDynamicProperty&amp;gt;&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;標籤，有別於&lt;/span&gt;&lt;/span&gt;ANT&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的&lt;/span&gt;&lt;/span&gt;Property&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的設定，使用該標籤的參數，可以在腳本檔中重覆定義值而達到動態設定參數進行測試的目的，當使用&lt;/span&gt;&lt;/span&gt;storeDynamicProperty&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;設定參數後取得動態參數值則必須使用&lt;/span&gt;&lt;/span&gt;#{ }EL&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;語法，請注意與&lt;/span&gt;&lt;/span&gt;ANT&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;內定的&lt;/span&gt;&lt;/span&gt;${ }&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;語法的不同。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;除了購物動作之外，在本例中也將登入&lt;/span&gt;&lt;/span&gt;(login)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、登出&lt;/span&gt;&lt;/span&gt;(logout)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、付款&lt;/span&gt;&lt;/span&gt;(checkout)&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的動作抽離出成單一實體模組，以供未來進行新增測試案例時重覆使用，因此我們在腳本&lt;/span&gt;&lt;/span&gt;5&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中完成了一個完整的&lt;/span&gt;&lt;/span&gt;Scenario&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。請參考腳本&lt;/span&gt;&lt;/span&gt;7&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;8&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、&lt;/span&gt;&lt;/span&gt;9&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;與圖&lt;/span&gt;&lt;/span&gt;1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試案例三撰寫完成後於&lt;/span&gt;&lt;/span&gt;Console&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;下執行&lt;/span&gt;&lt;/span&gt;maven webtest -Dmaven.webtest.file=testsuit1/webtest.xml&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;即可完成整個&lt;/span&gt;&lt;/span&gt;Scenario&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的測試。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;5 testsuit3login_shopping_checkout.xml &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   01&amp;lt;?xml version="1.0" encoding="Big5"?&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   02&amp;lt;!DOCTYPE project [ &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   03&amp;lt;!ENTITY init SYSTEM "../modules/set.init.ent"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   04&amp;lt;!ENTITY config SYSTEM "../modules/set.config.ent"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   05&amp;lt;!ENTITY login SYSTEM "../modules/login.ent"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   06&amp;lt;!ENTITY shopping SYSTEM "../modules/shopping.ent"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   07&amp;lt;!ENTITY checkout SYSTEM "../modules/checkout.ent"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   08&amp;lt;!ENTITY logout SYSTEM "../modules/logout.ent"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   09]&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   10&amp;lt;project name="login_shopping_checkout" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   11 basedir="." default="all"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   12 &amp;lt;property file="../config/login.properties"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   13 &amp;lt;property file="../config/shopping.properties"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   14 &amp;amp;init; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   15 &amp;lt;target name="all" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   16 &amp;lt;antcall target="login_shopping_checkout" /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   17 &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   18 &amp;lt;target name="login_shopping_checkout" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   19 &amp;lt;testSpec &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   20 name="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試情節：&lt;/span&gt;&lt;/span&gt;1&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;登入&lt;/span&gt;&lt;/span&gt;2&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;購物&lt;/span&gt;&lt;/span&gt;3&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;付款&lt;/span&gt;&lt;/span&gt;4&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;登出&lt;/span&gt;&lt;/span&gt;" &amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   21 &amp;amp;config; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   22 &amp;lt;steps&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   23 &amp;amp;login; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   24 &amp;lt;group stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行購物&lt;/span&gt;&lt;/span&gt;"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   25 &amp;lt;storeDynamicProperty &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   26 name="category.id" value="${category01.id}"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   27 &amp;lt;storeDynamicProperty &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   28 name="product.id" value="${product01.id}"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   29 &amp;lt;storeDynamicProperty &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   30 name="item.id" value="${item01.id}"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   31 &amp;shopping; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   32 &amp;lt;storeDynamicProperty &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   33 name="category.id" value="${category02.id}"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   34 &amp;lt;storeDynamicProperty &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   35 name="product.id" value="${product02.id}"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   36 &amp;lt;storeDynamicProperty &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   37 name="item.id" value="${item02.id}"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   38 &amp;shopping; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   39 ...&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;中間省略&lt;/span&gt;&lt;/span&gt;... &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   40 &amp;lt;/group&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   41 &amp;amp;checkout; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   42 &amp;amp;logout; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   43 &amp;lt;/steps&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   44 &amp;lt;/testSpec&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   45 &amp;lt;/target&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   46&amp;lt;/project&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;6 modulesshopping.ent &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;?xml version="1.0" encoding="Big5"?&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;連結「&lt;/span&gt;&lt;/span&gt;JPetstore&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;首頁」網址&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   url="shop/index.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行瀏覽並選購，連結「&lt;/span&gt;&lt;/span&gt;#{category.id}&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;」網頁&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   url="shop/viewCategory.do?categoryId=#{category.id}" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;clicklink stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;點選&lt;/span&gt;&lt;/span&gt;Product" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   label="#{product.id}" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;clicklink stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;點選&lt;/span&gt;&lt;/span&gt;Item" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   label="#{item.id}" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;點選&lt;/span&gt;&lt;/span&gt;[#{item.id}]&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;加入購物車&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   url="shop/addItemToCart.do?workingItemId=#{item.id}" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   /&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試參數&lt;/span&gt;&lt;/span&gt;3 configshopping.properties &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   category01.id=FISH &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   product01.id=FI-FW-02 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   item01.id=EST-21 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   category02.id=DOGS &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   product02.id=K9-DL-01 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   item02.id=EST-10 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   category03.id=CATS &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   product03.id=FL-DSH-01 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   item03.id=EST-14 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   category04.id=REPTILES &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   product04.id=RP-SN-01 &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   item04.id=EST-12 &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;7 moduleslogin.ent &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;?xml version="1.0" encoding="Big5"?&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;group stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;使用者登入&lt;/span&gt;&lt;/span&gt;"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;連結「&lt;/span&gt;&lt;/span&gt;JPetstore&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;首頁」網址&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   url="shop/index.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;連結「登錄」網頁&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   url="shop/signonForm.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;setinputfield &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;輸入&lt;/span&gt;&lt;/span&gt;Username" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   name="username" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   value="${username}" /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;setinputfield &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;輸入&lt;/span&gt;&lt;/span&gt;Password" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   name="password" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   value="${password}" /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;clickbutton &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;按&lt;/span&gt;&lt;/span&gt;[Submit]&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;送出&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   name="update"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;verifyxpath &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;確認是否已登入&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   xpath="//img[@src='../images/sign-out.gif']"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/group&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;8 moduleslogout.ent &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;?xml version="1.0" encoding="Big5"?&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;group stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;登出&lt;/span&gt;&lt;/span&gt;"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行登出&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   url="shop/signoff.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;verifyxpath &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;確認是否已登出&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   xpath="//img[@src='../images/sign-in.gif']"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/group&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;腳本&lt;/span&gt;&lt;/span&gt;9 modulescheckout.ent &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;?xml version="1.0" encoding="Big5"?&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;group stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;付款&lt;/span&gt;&lt;/span&gt;"&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;連結「付款」網址&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   url="shop/checkout.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;查看&lt;/span&gt;&lt;/span&gt;[Checkout Summary]&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;並按下&lt;/span&gt;&lt;/span&gt;[Continue]" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   url="shop/newOrder.do"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;invoke &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;進行付款&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   url="shop/newOrder.do?_finish=true"/&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;verifytext stepid="&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;確認是否出現訂購完成訊息&lt;/span&gt;&lt;/span&gt;" &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   text="Thank you, your order has been submitted" /&amp;gt; &lt;/p&gt; &lt;p style="border: 1px solid rgb(0, 0, 0); padding: 0.01in 0.06in; margin-bottom: 0in;"&gt;   &amp;lt;/group&amp;gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="color:#000000;"&gt;&lt;img name="graphics1" src="http://docs.google.com/File?id=ddgh9kcq_145cbrwps44" align="bottom" border="1" height="396" width="645" /&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;圖&lt;/span&gt;&lt;/span&gt;1 &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;測試案例順序圖。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;h1 class="western"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;結語&lt;/span&gt;&lt;/span&gt; &lt;/h1&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;在這二期的文章中，筆者所介紹的都是以自動化測試為主的工具。讀者心中可能會有所疑惑：&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   1.&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;自動化測試是否真的能夠為軟體開發帶來實質的效益嗎？&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   2.&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;自動化測試是否能完全取代人工測試？&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   3.&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;目前的商業測試工具多數都有「錄製&lt;/span&gt;&lt;/span&gt;/&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;播放」的功能，對於需要撰寫腳本檔的測試工具並沒有實務上的用途。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;第一點的答案是肯定的關於「軟體測試自動化」已經被許多的軟體測試專家驗證是可行的，並且反覆的運用在許多軟體開發過程中。大多數參與軟體測試的專家也同意自動化測試不只是值得的同時也是必要的。但在建構自動化測試的之前，必須備有一套「正規」的人工測試流程。並且從商業功能規格或設計文件中擷取必要的測試案例與建立可獨立的測試環境。再者必須了解到不是所有的測試都適合或值得自動化。例如將過度複雜的測試自動化可能會花費更多的成本。請謹記，將自動化的重點放在主要的測試個案上。只有會重複執行的測試才需要自動化。對於只做一次的測試能免則免。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;自動化測試最實際的應用與目的是自動化回歸測試。也就是說，我們必須要保存所有測試個案的結果，而且這些測試個案是可以重複執行於每次應用軟體被變更後，以確保應用軟體的變更沒有產生任何因為不小心所造成的影響。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;而對於第二點來說自動化測試並不會取代人工測試或是縮減測試人員的數量。自動化測試工具就只是工具，幫助測試人員可以將軟體測試工作做得更好。自動化測試工具可以幫測試人員執行那些無聊，但是又必須一直重複執行的測試個案。讓測試人員有更多時間去設計更好、更能有效找到問題的測試個案。自動化測試主要意義在於利用策略、工具以及產出等，減少人工介入非技術性 &lt;/span&gt;&lt;/span&gt;( unskilled )&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、重複性 &lt;/span&gt;&lt;/span&gt;( repetitive )&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;、冗長 &lt;/span&gt;&lt;/span&gt;( redundant ) &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;的測試動作。&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;  &lt;br /&gt;&lt;/p&gt; &lt;p class="western" style="margin-bottom: 0in;"&gt;   &lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;最後須要帶給各位的觀念是雖然多數的商業測試工具都有「錄製&lt;/span&gt;&lt;/span&gt;/&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;播放」測試案例的功能，但以「錄製&lt;/span&gt;&lt;/span&gt;/&lt;span style="font-family:細明體, MingLiU, monospace;"&gt;&lt;span lang="zh-TW"&gt;播放」的方式實施自動化儘量能免則免，原因在於基本上透過錄製建立的腳本，裡面的資料都可能是硬編碼，而當應用軟體資料變動、軟體功能變動，意味這些硬編碼的資料可能也需要修改，甚至必須重新錄製腳本。並且維護這些錄製的腳本，成本是非常高的，對於軟
