在想移blog後,是不是要依抽象類別來分,如Maven、Ant甚至Git放到CM,Regex也包括Shell Script。臨時支援他人寫的程式,跳過Ant直接接觸Maven的我,注記一下Ant在manifest.mf生成dependency jar list的方法。
原來的Ant Script摘錄如下:
在想移blog後,是不是要依抽象類別來分,如Maven、Ant甚至Git放到CM,Regex也包括Shell Script。臨時支援他人寫的程式,跳過Ant直接接觸Maven的我,注記一下Ant在manifest.mf生成dependency jar list的方法。
原來的Ant Script摘錄如下:
這事發生在我用PC自svn下載之前開發的東東所遇,而到Maven Repository URL去看,其實都有這些jar,但在local裡卻沒下載到,以aspectj-1.6.9為例,只有aspectj-1.6.9.jar.lastUpdated和aspectj-1.6.9.pom.lastUpdated而已.後來直接刪除這個1.6.9目錄再對project clean就下載成功.後來去看了lastUpdated內容,如下:
#Last modified on: Fri Sep 03 14:24:24 CST 2010
看來我對Maven的<build>的<plugin>的來龍去脈還不甚了解,它應該是源自這個repository:http://repo2.maven.org/maven2/org/apache/maven/plugins/。所以maven-compiler-plugin、maven-jar-plugin等都可以應對到這repostiry的出處。
在包成Jar釋給客戶端時,想把不會用到的java檔予以排除編譯之外。其實一開始我就想錯了,真正目的想把不要用到的class不包成jar。所以maven-compiler-plugin是針對*.java的處理,本來預設包成jar時就不會把原始檔放進去,若在<configuration>裡放了<excludes>來排除特定的原始檔,反而把未排除的原始檔包進jar裡,或者在<resources>設定亦同。所以要用maven-jar-plugin來排除特定的class:
在包成Jar或war檔時,如何指定加入或排除額外的檔案,如配置檔、圖檔等。在pom.xml設定如下:
<build> |
這是個有時效期限的資訊。最新版Eclipse 3.6,代號Helios-希臘神話的太陽神,無法啟動M2Eclipse插件。經由http://permalink.gmane.org/gmane.comp.ide.eclipse.plugins.m2eclipse.user/5898查知,Sonatype會釋出相容於Eclipse 3.6的0.10.2版,目前只釋出核心插件,在安裝好0.10.0後,再安裝https://repository.sonatype.org/content/repositories/forge-sites/m2e/0.10.2/S/0.10.2.20100623-1649/,就能正常在Helio下執行M2Eclipse了。
在用第三方的jar時,之前很笨在.m2的repository目錄下手動建置groupId子目錄,其實有現成的語法可以把local的jar檔更新至repository。語法如下:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> |
這樣在mvn package或mvn install時就不會找不到3rd的jar而無法打包。接著如何設定Jar的MANIFEST.MF,指定Main Class以及把reference的jar全部copy出來。可參考如下pom.xml設定:
想不到因為專案關係,接觸可能會派上用場的CORBA。CORBA是跨語言的元件模型,底蘊還摸不清楚,先記下如何使用Maven操作CORBA。
module ChinaApp |
在Eclipse執行Maven的jetty:run過程,總出現以下這行討厭的訊息:
[WARNING] Using platform encoding (MS950 actually) to copy filtered resources, i.e. build is platform dependent!
參觀了http://www.javaworld.com.tw/roller/piaoyi/entry/usefuleclipseplugins,下載幾個plugin來玩玩。本來想找Maven在Native2Ascii的支援,沒想到就有現成的plugin,可以做到編輯時看到的是中文,存檔變成Unicode格式,而且還是兩個:Properties Editor、JInto。前者可以按右鍵選擇看Unicode內容,後者是採Table式編輯。
稍為符合一定程度的開發,像Coverage、Check Style都會有。而我比較在意的是JDepend,日前前老板問過我一事,有無工具可以推導一個Jar的dependency,我印象中沒有,最多從其中最常用的一個找出它在Maven的artifact id。而JDepend似乎就補足這樣的需求,它的Eclipse Plugin的網址是http://andrei.gmxhome.de/eclipse,安裝後,在package按右鍵,點選[Run JDepend analysis](早一點版本只寫JDepend),就會切換到JDepend Perspective,如下:
Product artifact | Group ID | Artifact ID |
Java Activation Framework | javax.activation | activation |
J2EE | javax.j2ee | j2ee |
Java Data Object (JDO) | javax.jdo | jdo |
Java Message Service (JMS) | javax.jms | jms |
JavaMail | javax.mail | |
Java Persistence API (JPA) / EJB 3 | javax.persistence | persistence-api |
J2EE Connector Architecture | javax.resource | connector |
J2EE Connector Architecture API | javax.resource | connector-api |
Java Authentication and Authorization Service (JAAS) | javax.security | jaas |
Java Authorization Contract for Containers | javax.security | jacc |
Servlet API | javax.servlet | servlet-api |
Servlet JavaServer Pages (JSP) | javax.servlet | jsp-api |
Servlet JavaServer Pages Standard Tag Library (JSTL) | javax.servlet | jstl |
JDBC 2.0 Optional Package | javax.sql | jdbc-stdext |
Java Transaction API (JTA) | javax.transaction | jta |
Java XML RPC | javax.xml | jaxrpc |
Portlet | javax.portlet | portlet-api |
Java Naming and Directory Interface (JNDI) | javax.naming | jndi |
參考自http://maven.apache.org/guides/mini/guide-coping-with-sun-jars.html。
晚上游完泳,NB放公司,家裡用PC,把Eclipse該掛的plugin掛上。爭議最大的還是M2Eclipse。一樣還是用Struts2作為練習,結果發現M2Eclipse提供的archtype清單把struts2 archtype starter拿掉了。M2Eclipse還是有保留[Add Archtype]按鈕的功能,變成要手動加上去。M2Eclipse現在是0.10.0版,估計出現1.0版可能要收錢了。
過程中想到M2Eclipse以外的替代品,結果只適合Maven 1.x版。倒是找到如何在M2Eclipse 0.10.0自訂Maven Build另一個方式,一樣以mvn jetty:run為例,我參考這個網址:http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin,在pom.xml的<build>/<plugins>下加了這麼一段:
JBoss想把原本免錢的Hibernate改成商業框架謀利,在官方網站聲明Free凍結到3.2.6.ga版本,作法上無可厚非。而發行Eclipse的Maven plugin-M2Eclipse的廠商Sonatype手段不光明到讓我首次對IT爆粗口。
M2Eclipse到最新的0.10.0版還是Free,但從Run Configuration自訂Maven Build功能卻失去作用了。在0.9.9、0.98版,可以自訂mvn jetty:run的command,而到0.10.0不管怎麼訂都失去作用,而且連舊版plugin站台都拿掉了。而且還有以下功能也失去。
麻煩(Maven)又來了,Hibernate真的比iBATIS難Survey,而它預設用Ant作為建構工具,雖然使用Maven-Ant-Task在DOS下遷移到Maven沒問題,可是在Eclipse上玩Maven-Ant-Task就麻煩了,好在這事發生也早,Google也指示一些改進作法:
以Maven Ant Task初體驗為例在Eclipse上玩,打開build.xml檔,通常右側視窗列出幾個Task讓你按右鍵點選[Run As]/[Ant build.xml](如下圖),一執行ant db這個Task,就會出下列錯誤訊息:
疏樓更迭,技術也更迭。才想把新版的Eclipse 3.5 SR1版上Maven,才知道Maven的Eclipse Plugin搬家了,M2Eclipse的新居是http://m2eclipse.sonatype.org/sites/m2e,版本為0.10.0。還提供一個Extra Plugin:http://m2eclipse.sonatype.org/sites/m2e-extras,官方網站是寫:
結果Extra plugin不起來,原因是要先安裝Subclipse,而Subclipse也升級到1.6,其路徑為http://subclipse.tigris.org/update_1.6.x,據稱是支援到圖形介面了。
Maven可以包含Ant Script,反過來說,Ant可否使用Maven的dependency repostories呢?It's right。使用Maven Ant Task。
使用Maven Ant Task,其Ant版本需在1.7版以上,藉由maven-ant-tasks-x.y.z.jar,其dependency jar檔所放置的repository位置及設定應與Maven2相同,而在Ant的build.xml如何設定dependency jar,寫法如下(取自O'Reilly的Harnessing Hibernate):
試著用OSGi建構工具Pax的pax-create-project去建立一個新Project,它是以Maven為基礎建立。然後在Eclipse import這個Maven Project,結果除了原來那個artifact ID的project以外,還在Project Explorer另外建立4個project:compiled-bundle-settings、provision、shared-plugin-settings、wrapper-bundle-settings,徒增困擾之餘,只好先研究Maven的modules是怎麼回事,使用pax-create-project建出來的目錄結構如下,artifact id是my:
\my
專案處境:某客戶長期使用JDK 1.4開發,預計未來(不知要等多久)升級JDK 5.0,而JUnit 4.x版需要用到JDK 5.0的注釋。需求是如何使用Maven在測試時使用JDK 5.0,交付war檔或jar檔是使用JDK 1.4編譯。
經分析,開發時仍需使用JDK 5.0,才能引入JUnit 4.x,開發過程就避免使用JDK 5.0的語法。是故可以設定不同的Profile。在<Project>根節點加以下內容:
其用意有二:
第一步:下載Nexus,至http://nexus.sonatype.org/downloads/下載nexus-webapp-version-bundle.zip,目前最新版是1.3.6,也可以下載nexus-webapp-version.war自己佈到Tomcat或其它的Web Server。而我用的是Nexus預備的Jetty,把zip檔解壓縮後,切換到Nexus Home目錄下的nexus-webapp-1.3.6\bin\jsw\windows-x86-32,執行Nexus.bat就啟動了。
受命瞭解測試裡的Code Coverage,發現一個不錯的目錄網站http://java-source.net,和http://www.open-open.com一樣,是絕世武功的目錄。
這是題外話,Google大多推薦Cobertura,另外也有推薦Emma,皆以JUnit為基礎。而Emma卻未名列java-source.net裡。這兩個都有下載來踹,各有千秋,也各有適用範圍,我會建議兩個都用。
拜筆記型電腦送修所賜,從NB的Vista改用乾淨PC的XP。也看到Maven在XP work時一些trouble如標題。還有一個情況是,我把在Vista的Maven專案移到XP來,原本Maven預設的remote repository是http://repo1.maven.org/maven2,連到這網址時會自動導到http://repo2.maven.org/maven2,而在Vista使用M2Eclipse,也會自動從repo1導到repo2,可是移到XP來卻不行,得手動建一個repository url指向repo2。直到我做了一個修改,同時把這兩個問題給解決了:
在安裝Maven,需要在Path環境變數加載Maven home/bin目錄,而後來我google要解tools.jar解法,就把Java home/bin目錄加在Maven home/bin目錄之前,結果上述的問題就不再發生了。