欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Maven入門--較復(fù)雜的實(shí)例

系統(tǒng) 1940 0

本文將使用一個(gè)較復(fù)雜的實(shí)例,講述如何定制目錄布局(即不使用Maven標(biāo)準(zhǔn)目錄布局),以及講述一些關(guān)鍵插件的使用(配置)。為了方便其它朋友能夠方便地使用該實(shí)例,后臺數(shù)據(jù)庫使用開源的面向?qū)ο髷?shù)據(jù)庫-- db4o ,該數(shù)據(jù)庫無需安裝,已包含在與本文配套的實(shí)例中,文末附有該實(shí)例的下載鏈接。(2007.01.02最后更新)
注:轉(zhuǎn)載時(shí)請注明原作者(jiangshachina)及出處( http://www.blogjava.net/jiangshachina )!

1 實(shí)例的構(gòu)想
文章開頭的摘要已經(jīng)講述了,本文仍然將以一個(gè)實(shí)例描述如何使用Maven, 該實(shí)例將使用非Maven標(biāo)準(zhǔn)的目錄結(jié)構(gòu),并將呈現(xiàn)一些關(guān)鍵的Maven插件的配置與應(yīng)用。 該實(shí)例是一個(gè)基于db4o的數(shù)據(jù)庫Web應(yīng)用。該應(yīng)用本身十分簡單,即從db4o數(shù)據(jù)庫中查詢出若干記錄并將它們顯現(xiàn)在Web頁面中。
??? 該實(shí)例仍然由一個(gè)普通應(yīng)用工程(demo-app)與一個(gè)Web應(yīng)用工程(demo-web),以及這兩個(gè)工程的父工程(demo)構(gòu)成,最終的目標(biāo)是將Web應(yīng)用工程制作成war文件,并部署到JBoss服務(wù)器中。啟動服務(wù)器后,能夠在頁面中看到正確的查詢結(jié)果。
??? 該實(shí)例使用Eclipse3.2 + JDK1.5.0_10 + Windows2000開發(fā)。當(dāng)然這僅僅只是我個(gè)人的開發(fā)平臺,但該實(shí)例并不受限于此平臺;由于我選擇使用db4o針對JDK1.5的產(chǎn)品包,所以該實(shí)例只能運(yùn)行在JDK1.5.0或更高版本的JDK/JRE中; 該工程中的所有文件都使用UTF-8編碼方式。

2 demo工程
demo工程是其它兩個(gè)工程的父工程,它的主要職責(zé)是預(yù)定義子工程所需要依賴的jar文件(artifact),以及針對子工程所使用的插件進(jìn)行通用配置。該工程完整的POM文件如下所示:

<project >
??? <modelVersion> 4.0.0 </modelVersion>
??? <groupId>mvn.demo</groupId>
??? <artifactId>demo</artifactId>
??? <packaging>pom</packaging>
??? <version>
1.0 -SNAPSHOT</version>
??? <description>Maven?Demo?Project</description>

??? <modules>
??????? <module>demo-app</module>
??????? <module>demo-web</module>
??? </modules>

??? <dependencyManagement>
??????? <dependencies>
??????????? <dependency>
??????????????? <groupId>mvn.demo</groupId>
??????????????? <artifactId>demo-app</artifactId>
??????????????? <version>${project.version}</version>
??????????? </dependency>
??????????? <dependency>
??????????????? <groupId>mvn.demo</groupId>
??????????????? <artifactId>demo-web</artifactId>
??????????????? <version>${project.version}</version>
??????????? </dependency>
??????????? <dependency>
??????????????? <groupId>com.db4o</groupId>
??????????????? <artifactId>db4o-java5</artifactId>
??????????????? <version>
5.5 </version>
??????????? </dependency>
??????????? <dependency>
??????????????? <groupId>javax.servlet</groupId>
??????????????? <artifactId>servlet-api</artifactId>
??????????????? <version>
2.4 </version>
??????????????? <scope>provided</scope>
??????????? </dependency>
??????????? <dependency>
??????????????? <groupId>commons-configuration</groupId>
??????????????? <artifactId>commons-configuration</artifactId>
??????????????? <version>
1.2 </version>
??????????????? <exclusions>
??????????????????? <exclusion>
??????????????????????? <groupId>dom4j</groupId>
??????????????????????? <artifactId>dom4j</artifactId>
??????????????????? </exclusion>
??????????????????? <exclusion>
??????????????????????? <groupId>xml-apis</groupId>
??????????????????????? <artifactId>xml-apis</artifactId>
??????????????????? </exclusion>
??????????????????? <exclusion>
??????????????????????? <groupId>xalan</groupId>
??????????????????????? <artifactId>xalan</artifactId>
??????????????????? </exclusion>
??????????????????? <exclusion>
??????????????????????? <groupId>xerces</groupId>
??????????????????????? <artifactId>xercesImpl</artifactId>
??????????????????? </exclusion>
??????????????? </exclusions>
??????????? </dependency>
??????? </dependencies>
??? </dependencyManagement>

??? <dependencies>
??????? <dependency>
??????? <groupId>junit</groupId>
???????? <artifactId>junit</artifactId>
?????????? <version>
3.8.1 </version>
????? <scope>test</scope>
??? </dependency>
??? </dependencies>

??? <build>
??????? <plugins>
??????????? <plugin>
??????????????? <groupId>org.apache.maven.plugins</groupId>
??????????????? <artifactId>maven-resources-plugin</artifactId>
??????????????? <configuration>
??????????????????? <encoding>UTF-
8 </encoding>
??????????????? </configuration>
??????????? </plugin>

??????????? <plugin>
??????????????? <groupId>org.apache.maven.plugins</groupId>
??????????????? <artifactId>maven-compiler-plugin</artifactId>
??????????????? <configuration>
??????????????????? <source>
1.5 </source>
??????????????????? <target>
1.5 </target>
??????????????????? <encoding>UTF-
8 </encoding>
??????????????? </configuration>
??????????? </plugin>

??????????? <plugin>
??????????????? <groupId>org.apache.maven.plugins</groupId>
??????????????? <artifactId>maven-jar-plugin</artifactId>
??????????????? <configuration>
??????????????????? <archive>
??????????????????????? <addMavenDescriptor>false</addMavenDescriptor>
??????????????????? </archive>
??????????????? </configuration>
??????????? </plugin>

??????????? <plugin>
??????????????? <groupId>org.apache.maven.plugins</groupId>
??????????????? <artifactId>maven-war-plugin</artifactId>
??????????????? <configuration>
??????????????????? <archive>
??????????????????????? <addMavenDescriptor>false</addMavenDescriptor>
??????????????????? </archive>
??????????????? </configuration>
??????????? </plugin>

??????????? <plugin>
??????????????? <groupId>org.apache.maven.plugins</groupId>
??????????????? <artifactId>maven-javadoc-plugin</artifactId>
??????????????? <configuration>
??????????????????? <charset>UTF16</charset>
??????????????? </configuration>
??????????? </plugin>
??????? </plugins>
??? </build>
</project>

??? 預(yù)定義工程的依賴關(guān)系,就是把會被子工程依賴的artifact的詳細(xì)信息(groupId,artifactId,version,...)先聲明到<dependencyManagement>中。然后子工程只需要聲明使用某個(gè)artifact就可以了,即那時(shí)只需要設(shè)置groupId和artifactId(甚至更少)就可以了。 <dependencyManagement>中聲明的artifact并不一定真的會被使用到
2.1 聲明依賴關(guān)系
??? 根據(jù)實(shí)際情況, 該實(shí)例 需要使用db4o針對java5的產(chǎn)品包(jar文件)。由于該jar文件并不存在于Maven的中央倉庫中,所以我們不能直接通過Maven獲得該jar文件。我們只能另外下載db4o-5.5(Java版)的壓縮包,然后從壓縮包內(nèi)獲得db4o-java5.jar。得到該jar后,必須先將它安裝到Maven的本地倉庫中(安裝方法參見資源[1],主題"向本地倉庫安裝文件時(shí)要生成POM文件"),以備后面的使用。此處將該artifact的groupId定義為com.db4o,artifactId定義為db4o-java5,version自然就是5.5了(請見上述POM腳本)。
??? 由于該實(shí)例最終是一個(gè)Web應(yīng)用,所以它至少需要依賴Servlet的包(servlet-api-2.4.jar),還需要commons-configuration-1.2.jar。這兩個(gè)artifact都已經(jīng)存在于Maven中央倉庫中,所以我查找到它們后,按照Maven中央倉庫的命名將它們聲明到了<dependencyManagement>中(請見上述POM腳本)。junit是進(jìn)行單元測試時(shí)使用的artifact,(假設(shè))它肯定會被每個(gè)工程使用,所以沒有將它設(shè)置到 <dependencyManagement>中,而直接設(shè)置到了 <dependency>中。
??? 細(xì)心的朋友肯定已經(jīng)發(fā)現(xiàn)了,針對 commons-configuration的依賴聲明處多了一些語句。從表面上看,應(yīng)該是排除了4個(gè)artifact(dom4j, xml-apis xalan xerces )。不錯(cuò),就是排除了這4個(gè)jar文件(artifact)。如果有興趣的話,可以將整個(gè)<exclusions>元素刪除,然后再嘗試一下制作war文件。你會發(fā)現(xiàn)在WEB-INF/lib目錄下存在著這4個(gè)artifact對應(yīng)的jar文件。那我為什么要將它們“排除”呢?因?yàn)椋鼈兪嵌嘤嗟模〖矗鼈儗τ谖业倪@個(gè)Web應(yīng)用來說,根本就是無用的!
??? Maven2加入了一個(gè)很好的特性: 自動加載“依賴的依賴(Transitive Dependency)” 。以commons-configuration為例。為了能夠讓它運(yùn)行正常,我們實(shí)際上還需要其它一些jar(artifact),如commons-collections,commons-lang,...。但這些artifact我都沒有“顯示”地聲明需要依賴它們,但Maven會自動加載,因?yàn)?commons-configuration的POM文件將它們聲明為了dependency 。
??? 既然那個(gè)4個(gè)artifact是commons-configuration的依賴,為什么會認(rèn)為它們是無用的呢?實(shí)際上,它們就不應(yīng)該被聲明到commons-configuration的依賴關(guān)系中。這是commons-configuration開發(fā)者的失誤,他們沒有將依賴關(guān)系整理清晰,而將一些確實(shí)既不是runtime,更不是compile-time需要的artifact放入到了依賴關(guān)系中。在Maven中央倉庫中存在著很多這種情況,所以我們有時(shí)需要弄清楚“哪些文件是我們真正需要的,哪些是可以被清除的”。但有時(shí)候,很難做到一個(gè)不漏。正是由于這一原因,自動加載Transitive Dependency這一極好的特性,有時(shí)讓人十分無奈 ^_^
2.2 對插件進(jìn)行基本配置
我們可以把對插件的全局性(如針對整個(gè)項(xiàng)目的)設(shè)置放到較高層次的POM文件中,因?yàn)樗鼈儽辉O(shè)置后,子工程們就會自然遵守它們,而且可以使每個(gè)子工程的情況都是一樣的。
??? 在第1節(jié)中,已經(jīng)表明該工程使用JDK1.5平臺,并且所有文件都使用UTF-8的編碼方式。而Maven默認(rèn)使用JDK1.3級別的javac編譯器;默認(rèn)使用本地編碼方式(簡體中文Windows操作系統(tǒng)默認(rèn)使用GBK編碼方式)處理文件。這樣就必須對Maven進(jìn)行適當(dāng)設(shè)置,以滿足工程的實(shí)際需要。
??? 針對資源文件的處理,Maven使用maven-resources-plugin插件,需要將它的編碼方式設(shè)置為UTF-8。編譯Java源文件,是使用maven-compiler-plugin插件,需要將它的source(Java源文件)與target(class文件)的級別都設(shè)置為1.5,另外還要將它的encoding方式設(shè)置為UTF-8。(詳細(xì)設(shè)置請見POM腳本)

3 demo-app工程
demo-app工程是一個(gè)普通應(yīng)用程序工程,它用于處理和數(shù)據(jù)庫相關(guān)的操作,如針對數(shù)據(jù)庫的增、刪、改、查等基本功能。該工程POM文件的主要內(nèi)容如下所示:

<project >
??? ......

??? <build>
??????? <finalName>app</finalName>
??????? <directory>target</directory>

??????? <sourceDirectory>src/java</sourceDirectory>
??????? <outputDirectory>target/classes</outputDirectory>
??????? <resources>
??????????? <resource>
??????????????? <directory>src/java</directory>
??????????????? <excludes>
??????????????????? <exclude>**/*.java</exclude>
??????????????? </excludes>
??????????? </resource>
??????? </resources>

??????? <testSourceDirectory>src/test/java</testSourceDirectory>
??????? <testOutputDirectory>target/test-classes</testOutputDirectory>
??????? <testResources>
??????????? <testResource>
??????????????? <directory>src/test/java</directory>
??????????????? <excludes>
??????????????????? <exclude>**/*.java</exclude>
??????????????? </excludes>
??????????? </testResource>
??????? </testResources>
??? </build>
</project>

??? 文章的開頭已經(jīng)提到,本實(shí)例將會使用定制的目錄結(jié)構(gòu),但在前面卻一字不提此事,現(xiàn)在將描述如何定制目錄結(jié)構(gòu)。Maven的標(biāo)準(zhǔn)目錄結(jié)構(gòu)其實(shí)是在Super POM中設(shè)置的,由于任何POM都會繼承該P(yáng)OM,所以所有的工作都會默認(rèn)使用標(biāo)準(zhǔn)目錄結(jié)構(gòu)。要定制目錄,其實(shí)就是需要重新設(shè)置相關(guān)參數(shù)的值,即用新值覆蓋Super POM中的值。
[1]<finalName>,該元素指定了工程輸出的artifact的名稱,默認(rèn)值為${artifactId}-${version},此處修改為app。
[2]<directory>,該元素指定了工程輸出的目標(biāo)目錄。默認(rèn)值為target,此處未修改變。
[3]<sourceDirectory>,該元素指定了Java源文件所在的目錄。默認(rèn)值為src/main/java,此處修改為src/java。
[4]<outputDirectory>,該元素指定了編譯后的class文件的放置目錄。默認(rèn)值為target/classes,此處未作改變。
[5]<resources> <resource>,該元素指定了Java源文件使用的資源文件的存放目錄。默認(rèn)值為src/main/resources,此處修改為src/java。由于在編碼Java源文件時(shí),Maven會將資源路徑中的文件全部拷貝到classes目錄。而此時(shí)將Java資源文件目錄與Java源文件目錄,設(shè)置為同一目錄,所以需要將.java文件排除在資源文件的范疇之外( <exclude>**/*.java</exclude> )。
[6]
<testSourceDirectory>,該元素指定了單元測試Java源文件的放置目錄。默認(rèn)值為src/test/java,此處未作修改。
[7]
<testOutputDirectory>,該元素指定了單元測試Java源文件編譯后的class文件放置目錄。默認(rèn)值為 target/test-classes,此處未作改變。
[8]
<testResources> <testResource>,該元素指定了單元測試Java源文件所使用的資源文件的放置目錄。默認(rèn)值為src/test/resources,此處修改為 src/test/java。并且也做了與 設(shè)置<resources> <resource>時(shí)相同的處理(排除Java源文件)。
??? 通過上述設(shè)置后,就可以擁有一個(gè)定制的Maven工程目錄結(jié)構(gòu)了。

4 demo-web工程
demo-web工程是整個(gè)應(yīng)用最終的目標(biāo)輸出,因?yàn)榇颂幍哪康木褪侵谱饕粋€(gè)war文件,然后將它部署到JBoss服務(wù)器中。與demo-app工程相比,demo-web工程的POM文件主要有如下不同內(nèi)容:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> <project >
??? ......
????<build>
??????? ......
????????<plugins>
????????????<plugin>
????????????????<groupId>org.apache.maven.plugins</groupId>
????????????????<artifactId>maven-war-plugin</artifactId>
????????????????<version>
2.0.1 </version>
????????????????<configuration>
????????????????????<webappDirectory>target/${artifactId}</webappDirectory>
????????????????????<warSourceDirectory>src/webapp</warSourceDirectory>
????????????????</configuration>
????????????</plugin>

????????????<plugin>
????????????????<groupId>org.codehaus.mojo</groupId>
????????????????<artifactId>jboss-maven-plugin</artifactId>
????????????????<version>
1.3.1 </version>
????????????????<configuration>
????????????????????<jbossHome>E:/jboss-
4.0.2 </jbossHome>
????????????????????<serverName>default</serverName>
????????????????????<fileName>
????????????????????????${project.build.directory}/${project.build.finalName}.${project.packaging}
????????????????????</fileName>
????????????????</configuration>
????????????</plugin>
????????</plugins>
????</build>
</project>

可以看出不同之處就在于對maven-war-plguin及jboss-maven-plugin插件的配置與使用。
??? Maven使用maven-war-plugin插件對Web工程制作war文件。由于本文使用了定制目錄結(jié)構(gòu),這樣則會使maven-war-plugin無法找到Web工程的Web Root目錄(默認(rèn)是src/main/webapp),所以需要對該插件進(jìn)行適當(dāng)?shù)嘏渲谩?lt;warSourceDirectory>就是Web工程的Web Root目錄,此處設(shè)置為;<webappDirectory>是制作war文件之前,相當(dāng)于是一個(gè)被打開(exploded)的war文件的根目錄(默認(rèn)是target/artifactId-version)。
??? 該工程的腳本中,還使用了一個(gè)JBoss插件。該插件可以將制作好的war文件部署(實(shí)質(zhì)上是拷貝)到指定的JBoss部署目錄中。<jbossHome>是JBoss的安裝根目錄,<serverName>指JBoss Server的名稱,<fileName>是被部署war文件的名稱。

參考資源
[1]Maven入門--概念與實(shí)例. http://www.blogjava.net/jiangshachina/archive/2006/09/01/67080.html
[2]Maven + Continuum Weed. http://www.blogjava.net/jiangshachina/archive/2006/09/11/68944.aspx
[3]Maven POM Reference. http://maven.apache.org/pom.html
[3]db4o. http://www.db4objects.com
本文實(shí)例下載地址-- http://www.blogjava.net/files/jiangshachina/mvn-demo.rar

Maven入門--較復(fù)雜的實(shí)例


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲第一成人在线 | 黄色av.com | 日韩有码在线观看 | 91高清国产视频 | 高清免费国产在线观看 | 日穴视频在线观看 | 日韩一级视频 | 亚洲国产精品久久久久666 | 亚洲成人精品 | 国产精品久久久久久吹潮 | 偷拍自拍网址 | 久久这里只有精品免费看青草 | 波多野结衣一区二区三区88 | 日韩国产在线 | 一级黄色毛片 | 日本在线观看 | 亚洲天堂视频在线免费观看 | 毛片毛片毛片毛片毛片毛片 | a视频在线观看 | 天天操天天擦 | 九九视屏 | 午夜精品小视频 | 国产成年网站v片在线观看 中文字幕在线免费视频 | 欧美视频网址 | 青青草娱乐在线 | 国产高清精品在线 | 欧美国产一区二区 | 久久精精 | 久久精品视频免费观看 | 秋霞久久国产精品电影院 | 牛牛碰在线视频 | 久久亚洲这里只有精品18 | 九七婷婷狠狠成人免费视频 | 天堂成人A片永久免费网站 奇米影视四色7777 | 成人国内精品久久久久影院 | 日韩有码在线播放 | 中文字幕免费在线观看 | 欧美精品 在线观看 | 欧美黄色网 | 国产aaa毛片| 丁香六月伊人 |