顯示具有 開發:Maven2 標籤的文章。 顯示所有文章
顯示具有 開發:Maven2 標籤的文章。 顯示所有文章

2007年8月7日 星期二

Maven2 Report使用cobertura-maven-plugin

簡介一下Maven2cobertura-maven-plugin進行Cobertura Report的使用。

更詳細的用法請參考:http://mojo.codehaus.org/cobertura-maven-plugin/

簡易使用法:

基本上只要在reporting標籤中使用進行plugin的設定即可。之後在執行maven site時就會產生測試覆蓋率的報表資料。

<reporting>

</plugins>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.0</version>
</plugin>

</plugins>

</reporting>


為何我在這裏特別指定了Plugin的版本。
因為截至目前為止cobertura這個Plugin版本最新為2.1。
但釋出的2.1版中對於產生的報表結果有些問題。
基本上應該經過Maven2中的對Plugin的參數設定才能產生出想要的結果。

但一般使用上並不需要那麼繁覆,而2.0版本只要單純設好Plugin即可產出想要的測試覆蓋率結果。

Read More......

2007年7月11日 星期三

Maven2 Report使用javancss-maven-plugin

簡介一下Maven2javancss-maven-plugin進行Report的使用。

更詳細的用法請參考:http://mojo.codehaus.org/javancss-maven-plugin/index.html

簡易使用法:

基本上只要在reporting標籤中使用進行plugin的設定即可。之後在執行maven site時就會產生javancss的報表資料。

<reporting>

</plugins>

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>javancss-maven-plugin</artifactId>

</plugin>

</plugins>

</reporting>

較複雜的使用法:

雖然設定簡單,但目前這個plugin還不是很穩定,不穩定的原因大多出現在中文問題上。

Javancss會針對*.java檔中的註解與非註解進行分析處理,但在使用”//”註解型式中包含中文的話,偶爾會發生無法進行完整分析的狀況,通常使用”/**/”來進行註解的話大多能解決問題,但若是還無法順利產生javancss報表的話,可以透過自行設定那些檔要引入進行處理,那些檔要排除分析來處理,不過中文問題通常是在Windows系統發生的,Linux似乎就沒有這個狀況。

<reporting>

</plugins>

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>javancss-maven-plugin</artifactId>

<configuration>

<includes>

<include>**/*foo.java</include>

</includes>

<excludes>

<exclude>**/LdapManager.java</exclude>

<exclude>**/Pending.java</exclude>

<exclude>**/AuthManager.java</exclude>

<exclude>**/BusTypeController.java</exclude>

<exclude>**/SetAuthorityController.java</exclude>

</excludes>

</configuration>

</plugin>

</plugins>

</reporting>

Read More......

Maven2 Report使用maven-javadoc-plugin

簡介一下Maven2maven-javadoc-plugin進行Report的使用。

更詳細的用法請參考:http://maven.apache.org/plugins/maven-javadoc-plugin/

簡易使用法:

基本上只要在reporting標籤中使用進行plugin的設定即可。之後在執行maven site時就會產生javadoc的文件資料。

<reporting>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-javadoc-plugin</artifactId>

</plugin>

</plugins>

</reporting>

較複雜的使用法:

一般而言使用簡易的方式即可,但總有某些時候會出問題。

l 狀況一:
系統是使用MS950編碼的系統,但java程式卻是用UTF-8
解法:使用encoding標籤,指定*.java檔是使用何種編碼。

l 狀況二:
產生的javadoc api文件,但開啟後卻是亂碼(必須在瀏覽器中指定編碼後才正常)
解法:使用charset標籤,指定在網頁上是使用何種編碼。

l 狀況三:
某些*.javajavadoclet撰寫有問題,導致無法順利產生JavaDoc API文件。
或者某些*.java文件並不想產生相關的java api文件時。
解法:使用excludePackageNames標籤,排除不希望產生apipackage

l 狀況四:
除了javadoclet預設的@parameter外,希望自行定義的@parameter資訊也能顯示於Java Doc API中。
解法:使用tags標籤,在其中指定tagnameplacementhead屬性即可。

<reporting>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-javadoc-plugin</artifactId>

<configuration>

<encoding>UTF-8</encoding>

<charset> UTF-8</charset>

<excludePackageNames>org.*:arch.common.*</excludePackageNames>

<tags>

<tag>

<name>hibernate.id</name>

<placement>a</placement>

<head>To do something:</head>

</tag>

</tags>

</configuration>

</plugin>

</plugins>

</reporting>

Read More......

2007年6月15日 星期五

Pluto、JetSpeed2、Liferay佈署WicketPortlet相容性比較

需求環境

Portal(Pluto 1.1.3)http://portals.apache.org/pluto/index.html

Portal(JetSpeed2 2.1)http://portals.apache.org/jetspeed-2/

Portal(Liferay 4.2.2)http://www.liferay.com/web/guest/home

Portlet Example(Wicket 1.2.6 Portlet Example-使用SVN取得原始碼)http://svn.apache.org/repos/asf/incubator/wicket/releases/wicket-1.2.6/wicket-portlet-examples

Maven2.0.6http://maven.apache.org/

JDKSun J2SE 1.5





佈署Wicket Portlet Example結果比較

Pluto

1.首頁

2.輸入文字按下[set message]

3.點選[click here]

4.點選[Link to the second page]

5.點選[click]進行計數

6.點選[Back to page1]



JetSpeed2

1.首頁

2.輸入文字按下[set message]

3.點選[click here]

4.點選[Link to the second page]

5.點選[click]進行計數

發生了異常狀況,網址列導至:
http://localhost:8080/wicket-portlet-examples/…

6.點選[Back to page1]

無法進行下一步操作,但可以用到退鍵
回到前面正常頁後繼續執行。



Liferay

1.首頁

2.輸入文字按下[set message]

3.點選[click here]

4.點選[Link to the second page]

5.點選[click]進行計數

6.點選[Back to page1]

經過比較後,讀者們,有沒有什麼結論呢?

Read More......

2007年6月14日 星期四

取得目前有效的POM或Profiles、Settings設定

顯示目前生效的porfiles設定
mvn help:active-profiles -Doutput=/path/to/file

輸出完整的POM內容
mvn help:effective-pom -Doutput=/path/to/file

輸出完整的Setting內容
mvn help:effective-settings -Doutput=/path/to/file

Read More......

2007年6月13日 星期三

Jetspeed2 Tutorial

目前在JetSpeed2的官方網站上
已經有了一篇使用Maven2進行客製化Portal建置的教程:
連結:http://portals.apache.org/tutorials/jetspeed-2/index.html

本例中使用的版本為2.1
這篇教程目前還有一些問題:

  • 使用archtype建立Portal專案
    mvn
    archetype:create
    -DarchetypeGroupId=org.apache.portals.jetspeed-2
    -DarchetypeArtifactId=portal-archetype
    -DarchetypeVersion=2.1
    -DgroupId=org.apache.portals.tutorials
    -DartifactId=jetexpress
    -Dversion=1.0
    -DremoteRepositories=http://www.bluesunrise.com/maven2
    目前這個archtype並未真的釋出,因此若要正常下載archtypd的話,
    必須加上remoteRepositories的設定。
  • 在建立的專案上如此例jetexpress並無法執行mvn相關指令。
    其原因在於<module>etc/dbpsml</module>模組設定不正確。
    所以導致無法順利下載相關套件。
    解決方式,在根資料夾下的pom.xml中的modules設定先註解。
    然後再執行指令,如本例的mvn idea:idea -s settings.xml
    OK後再把註解的其中一個module的註解移除
    再執行mvn idea:idea依次將所有module的註解移除。
    相對的所需的套件會順利下載。
  • 在建立資料庫的etc/build.xml的第304行
    <antcall target="populate-seed-data" inheritall="on" inheritrefs="on"/>
    無法順利執行下去。當註解完成時才能順利Build成功。
  • 當建置完成後對應的Tomcat可啟動但jetexpress這個context無法執行。

事實上這個教程雖然滿正式的。但實際上來說釋出的版本並非穩定的版本。
但這篇文章並非完全不重要,建議讀者從標題為
02. Customizing Your Portal Design
03. Portlet Application Configuration
04. Portlet Development
的教程開始看,將會了解如何在一個發行版的Portal進行客製化設定的動作。

Read More......

2007年6月12日 星期二

使用Pluto與Maven2進行Portlet開發

昨天實作並整理出了一使用Maven2進行Portlets開發的文章,目前用於開發使用的是PlutoPortal實作。

會基於這樣的實作其原因是,在目前業界所開發的系統來說除了部分產品外,其他不外乎是一些專案的開發,而在專案的開發中多數實作的都是客製化的系統,當然就會有客製化的權限控管、客製化的LayerOut…客製化的…反覆都開發這些東西,老實說…很煩。

而當企業有了許許多多的系統之後,將會發現,每一個系統都要進行一次的登入,每一個系統都是管理個自的權限,進入不同的系統都要再開啟一次瀏覽器,腦袋中要記錄不同的系統的連結網址…老實說也很煩。



為了解決這些混亂的狀況,有什麼解決的辦法,我想該是拿出Portal的時候了吧!
在一些比較知名的
Open Source Portal Server上,都有實作了不錯的權限控管機制(也許開始會有人說,那些權限管理的機制不符合我們的需要),不過試想一下,目前在業界中一些所謂的權限管理的分析是誰提出來的,通常來說是由使用者單位提出,然後由經驗不足,沒有OOAOOD能力的SASD所設計出來的(抱歉!不是一竿子打翻一船人,而是大多數情況皆是如此),而且大多數是由1~2個人就決定了權限的控管,那…各位覺得這樣的權限控管機制可靠嗎、彈性嗎、完完全全符合客戶需要嗎?

在開放原始碼的領域中,許多規格都是大家一起討論出來的,而在實作的Project上也進行了多次的進化,分析、分析再分析;抽象抽象再抽象。因此當我們真正認真去看這些看不懂程式碼的開放原始碼系統時將會發現,原來很多不了解的觀念都能得到解答,得到更佳的設計模式。

再 權限管理的部分亦是如此,經由多次進化的權限控管邏輯,在開放原始碼的社群中將演化成一種分析、設計模式,以應因未來各種不同的挑戰。因此這些權限控管機 制將會做到非常彈性,以符合大部分業界所需要,因此在我來說,我會建議,相關的分析、開發、設計人員盡其心力去了解這些設計理念,並將企業內部所需的權限 管理相關邏輯轉化為與其相近,你將會發現你得到的更多。而且還會發生一種有趣的狀況,以往當我們的企業邏輯做了修改(即便是小幅度的修正),程式卻幾乎難以進行維護,因為程式大部分是由資淺人員所開發,而開發過程中幾近是寫死的,高度藕合性、低度內聚力。維護非常困難。使用了開放原始碼的權限控管系統將會發現,程式很少修改,甚至於只需進行簡單的設定或完全不需調整即可符合需要,非常不可思議。

而網頁的LayerOut呢?之前我們都使用TilesSitemesh進行版面的設定與管理,但在Portal的使用上,LayerOut是由Portal進行統一的設定,不同的人登入可設定自定的版面設定,實際上的LayerOut應該來說…很少。將所有系統整合入Portal中只需登入一次即可使用各種不同的系統,這種夢想化的生活真是非常方便。

扯太多了,有時似乎文思泉湧就會扯出一大堆東西,回歸我所要表達的,Portal雖然方便,但開發Portlet並不容易,並且測試也不方便,每一次的測試都必須啟動一次Portal ServerPortal並不是小程式,每一次的啟動與關閉是非常花時間的,因此若有一個Portal平台啟動快速、方便測試相對的開發就會比較方便。而Pluto正符合我的需要,Pluto嚴格說並不能稱為Portal,只能稱為Portal最簡單的實作參考。但因為符合JSR-168的規範,我們可以將符合該規範的Portlet佈署在其上進行測試,當測試成功後再行佈署於所需的目的Portal Server上即可達成開發快速、測試方便的要求。

接著以下的觀念比較主觀,不認同的人可以不接受,就是事實上若使用不到所有的Portal的功能的話也可以將Portal降級使用,用來開發一般的系統,只是該系統中的所有程式基本上都是Portlet,因此未來當真正進入Portal時代時,程式只需小幅修正即可重用。

目前在我的王道中,Portal將會列入一個考量重點,並盡可能達到開發出的程式系統能符合下列要求:

  1. 在一般系統中能正常執行。

  2. Portal中加入相關繼承或Bridge即可在Portal上執行。

  3. 能在一般系統與Portal系統中進行功能性測試。


Read More......

2007年6月11日 星期一

在Maven2中取得Plug-in資訊

取得指定Plugin相關資訊
mvn help:describe -DgroupId=org.somewhere -DartifactId=some-plugin -Dversion=0.0.0
使用 full 參數顯示所有goal的參數資訊
使用 output 參數輸出至檔案

Example:
mvn help:describe -DgroupId=org.apache.maven.plugins -DartifactId=maven-idea-plugin -Dversion=2.0
or
mvn help:describe -DgroupId=org.apache.maven.plugins -DartifactId=maven-idea-plugin -Dfull=true -Doutput=plug.txt

簡易使用法:
mvn help:describe -Dplugin=plugin-prefix -Dfull=true

Example:
mvn help:describe -Dplugin=clean -Dfull=true

Read More......

2007年6月6日 星期三

CruiseControl持續整合Maven2專案

這二天理了一下頭緒,將之前的經驗作了整理。
寫了一篇「CruiseControl持續整合Maven2專案」的心得筆記!

雖然某些部分是剪剪貼貼,不過大概也整理了12頁左右的資料,供我日後參考。
在我的王道中。Maven2將不可或缺,而CI伺服器上CruiseControl還是暫時優勝。

因牽涉到之後這篇心得會是我之後發表文章的基礎。
所以先說聲抱歉了!這篇文章暫不公開。

日後發表了我會再貼上。再次說聲!Sorry哦!

Read More......

2007年5月27日 星期日

使用Maven2佈署wicket-examples

最近打算開始玩Wicket,最好的參考當然是Wicket自帶的wicket-examples。
不過我早已習慣使用Maven2進行所有Project的開發,如何將Wicket的Examples直接拿進Maven使用呢?


其本上Maven2的pom.xml檔設置如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>arch.webapps</groupId>
<artifactId>arch-pom-webapps</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>

<description>
Archetype Web Wicket
進行Jetty測試:
mvn package jetty:run
本範例將會連同wicket-examples一同進行deploy供開發參考。
wicket-examples原始碼,請參考target/wicket-examples
連結網址:
http://localhost:9876/wicket
http://localhost:9876/wicket-examples
</description>

<artifactId>archetype-web-wicket</artifactId>
<packaging>war</packaging>
<name>Arch WebApp Archetype Wicket Project</name>

<!-- 定義在maven2使用的相關參數,在此所指定的參數,下面都有用到 -->
<properties> <web.port>9876</web> <wicket.examples.context.name>wicket-examples</wicket.examples.context.name> <wicket.examples.context.path>${project.build.directory}/${wicket.examples.context.name}</wicket.examples.context.path> </properties>

<build>
<finalName>wicket</finalName>
<plugins>
<!-- 使用
maven-dependency-plugin當maven在process-resources階段時,
進行
dependency:unpack這個Goal,自動下載wicket-examples這個artifact。
並且解開
wicket-examples這個war檔。將解壓縮的資料置於outputDirectory下。 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-wicket-examples</id>
<phase>process-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>wicket</groupId>
<artifactId>wicket-examples</artifactId>
<version>${wicket.version}</version>
<type>war</type>
<outputDirectory>${wicket.examples.context.path}</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>


<!-- 當使用mvn jetty:run時會使用
maven-jetty-plugin。
這邊定義了進行佈署的
contextPath為上面設定的finalName
而除了佈署目前專案的war之外還需要佈署wicket-examples這個context
在jetty中,佈署多個context必須設定於jetty.xml中。
本範例中也指定了Server起來後的port為9876
-->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<contextPath>/${project.build.finalName}</contextPath> <jettyConfig>${project.build.directory}/classes/config/maven/jetty.xml</jettyConfig> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>${web.port}</port> </connector> </connectors>
</configuration>
</plugin>

</plugins>
</build>
</project>

本範例用的jetty.xml設置如下:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
"http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
<Set name="handlers">
<Array type="org.mortbay.jetty.Handler">
<!-- ======================================================= -->
<!-- Configure a test web application with web.xml -->
<!-- ======================================================= -->
<Item>
<New id="pageWebAppContext" class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="contextPath">/${wicket.examples.context.name}</Set> <Set name="war">${wicket.examples.context.path}</Set>
</New>
</Item>
</Array>
</Set>
</Configure>

注意:
contextPath與war屬性的設置,我是使用maven2本身的filtering功能進行替代。

當所有設定皆完成後。可直接運行mvn package jetty:run
將會進行專案的封裝並執行jetty http server。
之後可直接進行

自行建置的專案 http://localhost:9876/wicket
下載下來的範例 http://localhost:9876/wicket-examples

Read More......