国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Maven 專題之一

2019-11-18 11:23:55
字體:
供稿:網(wǎng)友

 

1  maven和ant的比較

 第一:每次和別人說maven的時候,很多會認(rèn)為是全新的東西而不肯放棄ant。其實,ant腳本是可以直接運行在maven中的。

假如要說maven和ant有什么差別,我覺得最大的差別就是在于maven的編譯以及所有的腳本都有一個基礎(chǔ),就是POM(PRoject object model)。這個模型定義了項目的方方面面,然后各式各樣的腳本在這個模型上工作,而ant完全是自己定義,顯然maven更勝一籌。

第二:Maven對所依靠的包有明確的定義,如使用那個包,版本是多少,一目了然。而ant則通常是簡單的inclde 所有的jar。導(dǎo)致的最終結(jié)果就是,你根本無法確定JBoss中的lib下的common-logging 是哪個版本的,唯一的方法就是打開 META-INF 目錄下MANIFEST.MF。估計JBoss遲早會轉(zhuǎn)向Maven的。

第三:Maven是基于中心倉庫的編譯,即把編譯所需要的資源放在一個中心倉庫里,如jar,tld,pom,等。當(dāng)編譯的時候,maven會自動在倉庫中找到相應(yīng)的包,假如本地倉庫沒有,則從設(shè)定好的遠(yuǎn)程倉庫中下載到本地。這一切都是自動的,而ant需要自己定義了。這個好處導(dǎo)致的結(jié)果就是,用maven編譯的項目在發(fā)布的時候只需要發(fā)布源碼,小得很,而反之,ant的發(fā)布則要把所有的包一起發(fā)布,顯然maven又勝了一籌。

第四:maven有大量的重用腳本可以利用,如生成網(wǎng)站,生成javadoc,sourcecode reference,等。而ant都需要自己去寫。試試 maven site 的效果。

第五:maven目前不足的地方就是沒有象ant那樣成熟的GUI界面,不過mavengui正在努力中。目前使用maven最好的方法還是命令行,又快又方便。

 

最后,總結(jié)一下,轉(zhuǎn)向maven會為你節(jié)省更多的時間。

 

2. build.properties 和project.properties

  build.properties 用來方編譯信息比較好,project.properties用來放項目信息比較好。

Build.properties的實例,把他放在用戶目錄下(C:/Documents and Settings/user),就可以使用所有項目都共享這個信息。

maven.repo.local=f:/java/repository

maven.repo.remote=http://mirrors.sunsite.dk/maven/

 

#maven.proxy.host=127.0.0.1

#maven.proxy.port=80

 

maven.compile.target = 1.4

maven.compile.source = 1.4

 

3 如何進行多個項目的開發(fā)。

 

在用Maven進行一個項目下有多個子項目開發(fā)的時候,常用的就是MulitProject 腳本 <maven:reactor >。

 

舉例來看,下圖就是一個項目中的子項目,該子項目又有兩個子項目,只要在project中定義了繼續(xù)關(guān)系,1.0能夠?qū)aven.xml中的腳本及project.properties 和build.properties中的屬性 傳播到子項目中去,這個特性似乎在RC版本中沒有完全實現(xiàn)。

 

 知道了Maven 的這些特性,就可以將大量的公共腳本寫在maven。xml中,子項目就可以很方便的調(diào)用了。

 

         <!--==================================================================-->

<!-- Hibernate Doclet-->

<!--==================================================================-->

<goal descr

<taskdef name="hibernatedoclet"

classname="xdoclet.modules.hibernate.HibernateDocletTask"

classpathref="maven.dependency.classpath"/>

<echo>+---------------------------------------------------+</echo>

<echo> Hibernate Doclet......                                       </echo>

<echo>+---------------------------------------------------+</echo>

<mkdir dir="${project.xdoclet.hibernate.destDir}"/>

<hibernatedoclet destdir="${project.xdoclet.hibernate.destDir}"

mergedir="${project.xdoclet.hibernate.mergeDir}"

excludedtags="${project.xdoclet.hibernate.excludedtags}"

addedtags="${project.xdoclet.hibernate.addedtags}"

force="${project.xdoclet.hibernate.force}"

verbose="${project.xdoclet.hibernate.verbose}">

<fileset dir="${project.xdoclet.hibernate.srcDir}">

<include name="**/*.java"/>

</fileset>

<hibernate version="2.0"/>

<!--

<jbossservice

transactionStrategy="${project.xdoclet.hibernate.jbossservice.transactionStrategy}"

userTransactionName ="${project.xdoclet.hibernate.jbossservice.userTransactionName}"

serviceName="${project.xdoclet.hibernate.jbossservice.serviceName}"

jndiName="${project.xdoclet.hibernate.jbossservice.jndiName}"

dataSource="${project.xdoclet.hibernate.jbossservice.dataSource}"

dialect="${project.xdoclet.hibernate.jbossservice.dialect}"

showSql="${project.xdoclet.hibernate.jbossservice.showSql}"

templateFile="${project.xdoclet.hibernate.jbossservice.templateFile}"

/>

-->

<hibernatecfg

transactionManagerLookup="${project.xdoclet.hibernate.cfg.transactionManagerLookup}"

transactionStrategy="${project.xdoclet.hibernate.cfg.transactionStrategy}"

userTransactionName

="${project.xdoclet.hibernate.cfg.userTransactionName}"

jndiName="${project.xdoclet.hibernate.cfg.jndiName}"

dataSource="${project.xdoclet.hibernate.cfg.dataSource}"

dialect="${project.xdoclet.hibernate.cfg.dialect}"

showSql="${project.xdoclet.hibernate.cfg.showSql}" />

</hibernatedoclet>

</goal>

 

在任何一個子項目中,就可以直接調(diào)用project:hibernate-xdoclet腳本了。就可以

 

<maven:reactor 的不足在于,假如你這樣定義

<maven:reactor basedir="${basedir}" postProcessing="true"

includes="portal/project.xml,common/project.xml" goals="project:deploy"

banner="Deploying Service:" ignoreFailures="false" />

 

本來原意是想讓Portal早于common進行編譯,不過reactor實際將先編譯common,再編譯portal。因為他是以名稱來決定編譯次序,顯然是不好的,因為多個子項目之間往往是有先后關(guān)系。解決的方法就是,定義多個reactor 了。

 

4 定義自己的maven.xml 模板

 maven的腳本是基于AOP的,也就是你可以在任何一個goal之前和之后插入自己的代碼,所以maven的腳本沒有固定的寫法。

這里有我寫過的一個maven模板。

<?xml version="1.0" encoding="gb2312"?>

<project default="project:deploy" xmlns:maven="jelly:maven"

xmlns:j="jelly:core" xmlns:util="jelly:util">

<!-- 一般項目分為四個里程碑:初始化、精化、構(gòu)建、部署 -->

<preGoal name="project:deploy">

<attainGoal name="project:inception"/>

<attainGoal name="project:elaboration"/>

<attainGoal name="project:constrUCtion"/>

<attainGoal name="project:transition"/>

</preGoal>

<goal name="project:deploy">

</goal>

<!--完成一些初始化工作 -->

<goal name="project:inception">

<attainGoal name="clean"/>

</goal>

<!-- 主要是xdoclet 產(chǎn)生各種文件-->

<goal name="project:elaboration">

    <attainGoal name="project:ejb-xdoclet"/>

</goal>

<!-- 編譯項目-->

<goal name="project:construction">

<!-- 調(diào)用war 插件 -->

<attainGoal name="war:war"/>

</goal>

<!--

對編譯好的項目進行組合預(yù)備部署

-->

<goal name="project:transition">

</goal>

</project>

 

5 很多公共腳本都不正常

這是很正常的事情,事實上很多腳本 xdoclet,middlegen等都存在一定的問題,假如出現(xiàn)這種情況,最直接的辦法就是把它們的腳本自己封裝一遍,做成適合自己的腳本。

比如,xdoclet 1.2之前的腳本就不太好用,我就到maven的cache目錄(C:/Documents and Settings/user/.maven/cache),找到想修改的插件目錄,里面都會有plugin.jelly,它是一個xml文件,里面就是腳本了,然后copy到自己的maven.xml中,就可以直接調(diào)用了。

以下,是我寫的自己常用的web xdoclet腳本

 

         <!--==================================================================-->

<!-- WEB Doclet-->

<!--==================================================================-->

<goal description="xdoclet for web " name="project:web-xdoclet" >

<taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask"

classpathref="maven.dependency.classpath"/>

<echo>+---------------------------------------------------+</echo>

<echo> Running WebDoclet...... </echo>

<echo>+---------------------------------------------------+</echo>

<mkdir dir="${project.xdoclet.web.destDir}"/>

<webdoclet destdir="${project.xdoclet.web.destDir}"

mergedir="${project.xdoclet.web.mergeDir}"

excludedtags="${project.xdoclet.web.excludedtags}"

addedtags="${project.xdoclet.web.addedtags}"

force="${project.xdoclet.web.force}"

verbose="${project.xdoclet.web.verbose}">

<fileset dir="${project.xdoclet.web.srcDir}">

<include name="**/*.java"/>

</fileset>

<deploymentdescriptor servletspec="${project.xdoclet.web.version}"

destdir="${project.xdoclet.web.webxml.dir}"

xmlencoding="${project.xdoclet.web.xmlencoding}"

templateFile="${project.xdoclet.web.templateFile}" />

<strutsconfigxml

destdir="${project.xdoclet.web.strutsconfigxml.dir}"

xmlencoding="${project.xdoclet.web.strutsconfigxml.xmlencoding}"

version="${project.xdoclet.web.strutsconfigxml.version}"

templateFile="${project.xdoclet.web.strutsconfigxml.templateFile}"

/>

<jsptaglib jspversion="${project.xdoclet.web.jsptaglib.version}"

destdir="${project.xdoclet.web.jsptaglib.dir}"

shortname="${project.xdoclet.web.jsptaglib.shortname}"

validateXml="${project.xdoclet.web.jsptaglib.validatexml}"

xmlencoding="${project.xdoclet.web.jsptaglib.xmlencoding}"

filename="${project.xdoclet.web.jsptaglib.filename}"

templateFile="${project.xdoclet.web.jsptaglib.templateFile}" />

<!--

<jbosswebxml destdir="${project.xdoclet.web.jbosswebxml.dir}"

mergeDir="${project.xdoclet.web.jbosswebxml.dir}"/>

-->

</webdoclet>

</goal>

 

這個腳本可以生成web.xml struts-config.xml  tld jboss-web.xml ,自己可以根據(jù)需要很方便的修改了。其實不難看出,這些都是ant腳本。所以,假如沒有合適的插件,最好的方法就是自己動手寫一個。

 

6 無法運行maven,報錯為 缺少根組件

 這個錯誤是因為你采用的編輯器(比如:ultraedit)在<?xml 前添加了多余的字符,導(dǎo)致xml解析器無法處理xml文件,這個錯誤經(jīng)常碰到。解決的方法就是把內(nèi)容copy下來,重新paste到新的文件,覆蓋老文件。或者用別的編輯器把多余字符去掉。

 

待續(xù)。。。

 



上一篇:你好,wiki

下一篇:JAR 文件揭密

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 拜城县| 藁城市| 中牟县| 耒阳市| 钦州市| 香河县| 南木林县| 三穗县| 西峡县| 读书| 商南县| 屏南县| 句容市| 友谊县| 石台县| 宝鸡市| 灯塔市| 陇西县| 洪洞县| 南漳县| 海安县| 大方县| 阳泉市| 定边县| 若羌县| 东乡族自治县| 台北市| 双柏县| 普安县| 武清区| 应用必备| 青川县| 普兰店市| 鹤壁市| 鄂尔多斯市| 诸暨市| 扶余县| 洞口县| 龙泉市| 绥芬河市| 兴仁县|