欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Maven入門(mén)--較復雜的實(shí)例
本文將使用一個(gè)較復雜的實(shí)例,講述如何定制目錄布局(即不使用Maven標準目錄布局),以及講述一些關(guān)鍵插件的使用(配置)。為了方便其它朋友能夠方便地使用該實(shí)例,后臺數據庫使用開(kāi)源的面向對象數據庫--db4o,該數據庫無(wú)需安裝,已包含在與本文配套的實(shí)例中,文末附有該實(shí)例的下載鏈接。(2007.01.02最后更新)

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

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

3 demo-app工程
demo-app工程是一個(gè)普通應用程序工程,它用于處理和數據庫相關(guān)的操作,如針對數據庫的增、刪、改、查等基本功能。該工程POM文件的主要內容如下所示:
<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>
    文章的開(kāi)頭已經(jīng)提到,本實(shí)例將會(huì )使用定制的目錄結構,但在前面卻一字不提此事,現在將描述如何定制目錄結構。Maven的標準目錄結構其實(shí)是在Super POM中設置的,由于任何POM都會(huì )繼承該POM,所以所有的工作都會(huì )默認使用標準目錄結構。要定制目錄,其實(shí)就是需要重新設置相關(guān)參數的值,即用新值覆蓋Super POM中的值。
[1]<finalName>,該元素指定了工程輸出的artifact的名稱(chēng),默認值為${artifactId}-${version},此處修改為app。
[2]<directory>,該元素指定了工程輸出的目標目錄。默認值為target,此處未修改變。
[3]<sourceDirectory>,該元素指定了Java源文件所在的目錄。默認值為src/main/java,此處修改為src/java。
[4]<outputDirectory>,該元素指定了編譯后的class文件的放置目錄。默認值為target/classes,此處未作改變。
[5]<resources> <resource>,該元素指定了Java源文件使用的資源文件的存放目錄。默認值為src/main/resources,此處修改為src/java。由于在編碼Java源文件時(shí),Maven會(huì )將資源路徑中的文件全部拷貝到classes目錄。而此時(shí)將Java資源文件目錄與Java源文件目錄,設置為同一目錄,所以需要將.java文件排除在資源文件的范疇之外( <exclude>**/*.java</exclude> )。
[6]
<testSourceDirectory>,該元素指定了單元測試Java源文件的放置目錄。默認值為src/test/java,此處未作修改。
[7]
<testOutputDirectory>,該元素指定了單元測試Java源文件編譯后的class文件放置目錄。默認值為 target/test-classes,此處未作改變。
[8]
<testResources> <testResource>,該元素指定了單元測試Java源文件所使用的資源文件的放置目錄。默認值為src/test/resources,此處修改為 src/test/java。并且也做了與 設置<resources> <resource>時(shí)相同的處理(排除Java源文件)。
    通過(guò)上述設置后,就可以擁有一個(gè)定制的Maven工程目錄結構了。

4 demo-web工程
demo-web工程是整個(gè)應用最終的目標輸出,因為此處的目的就是制作一個(gè)war文件,然后將它部署到JBoss服務(wù)器中。與demo-app工程相比,demo-web工程的POM文件主要有如下不同內容:
<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文件。由于本文使用了定制目錄結構,這樣則會(huì )使maven-war-plugin無(wú)法找到Web工程的Web Root目錄(默認是src/main/webapp),所以需要對該插件進(jìn)行適當地配置。<warSourceDirectory>就是Web工程的Web Root目錄,此處設置為;<webappDirectory>是制作war文件之前,相當于是一個(gè)被打開(kāi)(exploded)的war文件的根目錄(默認是target/artifactId-version)。
    該工程的腳本中,還使用了一個(gè)JBoss插件。該插件可以將制作好的war文件部署(實(shí)質(zhì)上是拷貝)到指定的JBoss部署目錄中。<jbossHome>是JBoss的安裝根目錄,<serverName>指JBoss Server的名稱(chēng),<fileName>是被部署war文件的名稱(chēng)。

參考資源
[1]Maven入門(mén)--概念與實(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
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Maven入門(mén)--概念與實(shí)例
靈活強大的構建系統Gradle
Maven提高篇系列之六
SpringCloud 第十九章:Spring Cloud 組件 Docker 化
Maven 那點(diǎn)事兒
小白都能看懂的 Spring Boot 入門(mén)指南!
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久