Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          pom作為項目對象模型。通過xml表示maven項目,使用pom.xml來實現。主要描述了項目:包括配置文件;開發者需要遵循的規則,缺陷管理系統,組織和licenses,項目的url,項目的依賴性,以及其他所有的項目相關因素。
          快速察看:
          Java代碼 復制代碼
          1. <project> ??
          2. ????<modelVersion>4.0.0</modelVersion> ??
          3. ??
          4. ????<!--?The?Basics?--> ??
          5. ????<groupId>...</groupId> ??
          6. ????<artifactId>...</artifactId> ??
          7. ????<version>...</version> ??
          8. ????<packaging>...</packaging> ??
          9. ????<dependencies>...</dependencies> ??
          10. ????<parent>...</parent> ??
          11. ????<dependencyManagement>...</dependencyManagement> ??
          12. ????<modules>...</modules> ??
          13. ????<properties>...</properties> ??
          14. ??
          15. ????<!--?Build?Settings?--> ??
          16. ????<build>...</build> ??
          17. ????<reporting>...</reporting> ??
          18. ??
          19. ????<!--?More?Project?Information?--> ??
          20. ????<name>...</name> ??
          21. ????<description>...</description> ??
          22. ????<url>...</url> ??
          23. ????<inceptionYear>...</inceptionYear> ??
          24. ????<licenses>...</licenses> ??
          25. ????<organization>...</organization> ??
          26. ????<developers>...</developers> ??
          27. ????<contributors>...</contributors> ??
          28. ??
          29. ????<!--?Environment?Settings?--> ??
          30. ????<issueManagement>...</issueManagement> ??
          31. ????<ciManagement>...</ciManagement> ??
          32. ????<mailingLists>...</mailingLists> ??
          33. ????<scm>...</scm> ??
          34. ????<prerequisites>...</prerequisites> ??
          35. ????<repositories>...</repositories> ??
          36. ????<pluginRepositories>...</pluginRepositories> ??
          37. ????<distributionManagement>...</distributionManagement> ??
          38. ????<profiles>...</profiles> ??
          39. </project>??
          ?

          ?

          ?

          ?

          ?

          ?

          ?

          Java代碼 復制代碼
          1. <!--?The?Basics?--> ??
          2. ????<groupId>...</groupId> ??
          3. ????<artifactId>...</artifactId> ??
          4. ????<version>...</version> ??
          5. ????<packaging>...</packaging> ??
          6. ????<dependencies>...</dependencies> ??
          7. ????<parent>...</parent> ??
          8. ????<dependencyManagement>...</dependencyManagement> ??
          9. ????<modules>...</modules> ??
          10. ????<properties>...</properties>??
          ?



          基本內容:
          ????POM包括了所有的項目信息。
          maven?相關:
          pom定義了最小的maven2元素,允許groupId,artifactId,version。所有需要的元素

          groupId:項目或者組織的唯一標志,并且配置時生成的路徑也是由此生成,如org.codehaus.mojo生成的相對路徑為:/org/codehaus/mojo?
          artifactId:?項目的通用名稱?
          version:項目的版本?
          packaging:?打包的機制,如pom,?jar,?maven-plugin,?ejb,?war,?ear,?rar,?par?
          classifier:?分類
          POM關系:
          主要為依賴,繼承,合成
          ??依賴關系:
          ??<dependencies>
          ????<dependency>
          ??????<groupId>junit</groupId>
          ??????<artifactId>junit</artifactId>
          ??????<version>4.0</version>
          ??????<type>jar</type>
          ??????<scope>test</scope>
          ??????<optional>true</optional>
          ????</dependency>
          ????...
          ??</dependencies>

          groupId,?artifactId,?version:描述了依賴的項目唯一標志
          可以通過以下方式進行安裝:

          使用以下的命令安裝:?
          mvn?install:install-file??Dfile=non-maven-proj.jar??DgroupId=some.group??DartifactId=non-maven-proj??Dversion=1?
          創建自己的庫,并配置,使用deploy:deploy-file?
          設置此依賴范圍為system,定義一個系統路徑。不提倡。
          type:相應的依賴產品包形式,如jar,war?
          scope:用于限制相應的依賴范圍,包括以下的幾種變量:
          compile?:默認范圍,用于編譯?
          provided:類似于編譯,但支持你期待jdk或者容器提供,類似于classpath?
          runtime:在執行時,需要使用?
          test:用于test任務時使用?
          system:需要外在提供相應得元素。通過systemPath來取得
          systemPath:?僅用于范圍為system。提供相應的路徑?
          optional:?標注可選,當項目自身也是依賴時。用于連續依賴時使用
          ???獨占性????
          ???外在告訴maven你只包括指定的項目,不包括相關的依賴。此因素主要用于解決版本沖突問題
          ??<dependencies>
          ????<dependency>
          ??????<groupId>org.apache.maven</groupId>
          ??????<artifactId>maven-embedder</artifactId>
          ??????<version>2.0</version>
          ??????<exclusions>
          ????????<exclusion>
          ??????????<groupId>org.apache.maven</groupId>
          ??????????<artifactId>maven-core</artifactId>
          ????????</exclusion>
          ??????</exclusions>
          ????</dependency>
          表示項目maven-embedder需要項目maven-core,但我們不想引用maven-core

          繼承關系
          ????另一個強大的變化,maven帶來的是項目繼承。主要的設置:
          定義父項目
          <project>
          ??<modelVersion>4.0.0</modelVersion>
          ??<groupId>org.codehaus.mojo</groupId>
          ??<artifactId>my-parent</artifactId>
          ??<version>2.0</version>
          ??<packaging>pom</packaging>
          </project>
          ????packaging?類型,需要pom用于parent和合成多個項目。我們需要增加相應的值給父pom,用于子項目繼承。主要的元素如下:

          依賴型?
          開發者和合作者?
          插件列表?
          報表列表?
          插件執行使用相應的匹配ids?
          插件配置?
          子項目配置
          <project>
          ??<modelVersion>4.0.0</modelVersion>
          ??<parent>
          ????<groupId>org.codehaus.mojo</groupId>
          ????<artifactId>my-parent</artifactId>
          ????<version>2.0</version>
          ????<relativePath>../my-parent</relativePath>
          ??</parent>
          ??<artifactId>my-project</artifactId>
          </project>
          relativePath可以不需要,但是用于指明parent的目錄,用于快速查詢。

          dependencyManagement:
          用于父項目配置共同的依賴關系,主要配置依賴包相同因素,如版本,scope。

          合成(或者多個模塊)
          ????一個項目有多個模塊,也叫做多重模塊,或者合成項目。
          如下的定義:
          <project>
          ??<modelVersion>4.0.0</modelVersion>
          ??<groupId>org.codehaus.mojo</groupId>
          ??<artifactId>my-parent</artifactId>
          ??<version>2.0</version>
          ??<modules>
          ????<module>my-project1<module>
          ????<module>my-project2<module>
          ??</modules>
          </project>

          ?

          ?

          ?

          ?

          Java代碼 復制代碼
          1. <!--?Build?Settings?--> ??
          2. ????<build>...</build> ??
          3. ????<reporting>...</reporting>??
          ?


          build?設置
          ????主要用于編譯設置,包括兩個主要的元素,build和report
          ??build
          ????主要分為兩部分,基本元素和擴展元素集合
          注意:包括項目build和profile?build
          <project>
          ??<!--?"Project?Build"?contains?more?elements?than?just?the?BaseBuild?set?-->
          ??<build>...</build>
          ??<profiles>
          ????<profile>
          ??????<!--?"Profile?Build"?contains?a?subset?of?"Project?Build"s?elements?-->
          ??????<build>...</build>
          ????</profile>
          ??</profiles>
          </project>

          基本元素
          <build>
          ??<defaultGoal>install</defaultGoal>
          ??<directory>${basedir}/target</directory>
          ??<finalName>${artifactId}-${version}</finalName>
          ??<filters>
          ????<filter>filters/filter1.properties</filter>
          ??</filters>
          ??...
          </build>


          defaultGoal:?定義默認的目標或者階段。如install?
          directory:?編譯輸出的目錄?
          finalName:?生成最后的文件的樣式?
          filter:?定義過濾,用于替換相應的屬性文件,使用maven定義的屬性。設置所有placehold的值

          資源(resources)
          ????你項目中需要指定的資源。如spring配置文件,log4j.properties
          <project>
          ??<build>
          ????...
          ????<resources>
          ??????<resource>
          ????????<targetPath>META-INF/plexus</targetPath>
          ????????<filtering>false</filtering>
          ????????<directory>${basedir}/src/main/plexus</directory>
          ????????<includes>
          ??????????<include>configuration.xml</include>
          ????????</includes>
          ????????<excludes>
          ??????????<exclude>**/*.properties</exclude>
          ????????</excludes>
          ??????</resource>
          ????</resources>
          ????<testResources>
          ??????...
          ????</testResources>
          ????...
          ??</build>
          </project>


          resources:?resource的列表,用于包括所有的資源?
          targetPath:?指定目標路徑,用于放置資源,用于build?
          filtering:?是否替換資源中的屬性placehold?
          directory:?資源所在的位置?
          includes:?樣式,包括那些資源?
          excludes:?排除的資源?
          testResources:?測試資源列表
          插件
          ??在build時,執行的插件,比較有用的部分,如使用jdk?5.0編譯等等
          <project>
          ??<build>
          ????...
          ????<plugins>
          ??????<plugin>
          ????????<groupId>org.apache.maven.plugins</groupId>
          ????????<artifactId>maven-jar-plugin</artifactId>
          ????????<version>2.0</version>
          ????????<extensions>false</extensions>
          ????????<inherited>true</inherited>
          ????????<configuration>
          ??????????<classifier>test</classifier>
          ????????</configuration>
          ????????<dependencies>...</dependencies>
          ????????<executions>...</executions>
          ??????</plugin>
          ????</plugins>
          ??</build>
          </project>

          extensions:?true?or?false,是否裝載插件擴展。默認false?
          inherited:?true?or?false,是否此插件配置將會應用于poms,那些繼承于此的項目?
          configuration:?指定插件配置?
          dependencies:?插件需要依賴的包?
          executions:?用于配置execution目標,一個插件可以有多個目標。
          如下:
          ????<plugin>
          ????????<artifactId>maven-antrun-plugin</artifactId>

          ????????<executions>
          ??????????<execution>
          ????????????<id>echodir</id>
          ????????????<goals>
          ??????????????<goal>run</goal>
          ????????????</goals>
          ????????????<phase>verify</phase>
          ????????????<inherited>false</inherited>
          ????????????<configuration>
          ??????????????<tasks>
          ????????????????<echo>Build?Dir:?${project.build.directory}</echo>
          ??????????????</tasks>
          ????????????</configuration>
          ??????????</execution>
          ????????</executions>
          ??????</plugin>
          ??說明:

          id:規定execution?的唯一標志?
          goals:?表示目標?
          phase:?表示階段,目標將會在什么階段執行?
          inherited:?和上面的元素一樣,設置false?maven將會拒絕執行繼承給子插件?
          configuration:?表示此執行的配置屬性

          插件管理
          ????pluginManagement:插件管理以同樣的方式包括插件元素,用于在特定的項目中配置。所有繼承于此項目的子項目都能使用。主要定義插件的共同元素

          擴展元素集合
          主要包括以下的元素:
          Directories
          用于設置各種目錄結構,如下:
          ??<build>
          ????<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
          ????<scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
          ????<testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
          ????<outputDirectory>${basedir}/target/classes</outputDirectory>
          ????<testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
          ????...
          ??</build>

          Extensions

          表示需要擴展的插件,必須包括進相應的build路徑。

          <project>
          ??<build>
          ????...
          ????<extensions>
          ??????<extension>
          ????????<groupId>org.apache.maven.wagon</groupId>
          ????????<artifactId>wagon-ftp</artifactId>
          ????????<version>1.0-alpha-3</version>
          ??????</extension>
          ????</extensions>
          ????...
          ??</build>
          </project>

          Reporting
          ????用于在site階段輸出報表。特定的maven?插件能輸出相應的定制和配置報表。
          ??<reporting>
          ????<plugins>
          ??????<plugin>
          ????????<outputDirectory>${basedir}/target/site</outputDirectory>
          ????????<artifactId>maven-project-info-reports-plugin</artifactId>
          ????????<reportSets>
          ??????????<reportSet></reportSet>
          ????????</reportSets>
          ??????</plugin>
          ????</plugins>
          ??</reporting>

          Report?Sets
          ????用于配置不同的目標,應用于不同的報表
          <reporting>
          ????<plugins>
          ??????<plugin>
          ????????...
          ????????<reportSets>
          ??????????<reportSet>
          ????????????<id>sunlink</id>
          ????????????<reports>
          ??????????????<report>javadoc</report>
          ????????????</reports>
          ????????????<inherited>true</inherited>
          ????????????<configuration>
          ??????????????<links>
          ????????????????<link>http://java.sun.com/j2se/1.5.0/docs/api/</link> ;
          ??????????????</links>
          ????????????</configuration>
          ??????????</reportSet>
          ????????</reportSets>
          ??????</plugin>
          ????</plugins>
          ??</reporting>

          ?

          ?

          ?

          ?

          ?

          Java代碼 復制代碼
          1. <!--?More?Project?Information?--> ??
          2. ????<name>...</name> ??
          3. ????<description>...</description> ??
          4. ????<url>...</url> ??
          5. ????<inceptionYear>...</inceptionYear> ??
          6. ????<licenses>...</licenses> ??
          7. ????<organization>...</organization> ??
          8. ????<developers>...</developers> ??
          9. ????<contributors>...</contributors>??
          ?


          更多的項目信息
          name:項目除了artifactId外,可以定義多個名稱
          description:?項目描述
          url:?項目url
          inceptionYear:創始年份

          Licenses
          <licenses>
          ??<license>
          ????<name>Apache?2</name>
          ????<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> ;
          ????<distribution>repo</distribution>
          ????<comments>A?business-friendly?OSS?license</comments>
          ??</license>
          </licenses>

          ?

          ?

          ?

          ?

          ?

          ?

          ?

          ?

          ?

          ?

          ?

          Java代碼 復制代碼
          1. <!--?Environment?Settings?--> ??
          2. <issueManagement>...</issueManagement> ??
          3. <ciManagement>...</ciManagement> ??
          4. <mailingLists>...</mailingLists> ??
          5. <scm>...</scm> ??
          6. <prerequisites>...</prerequisites> ??
          7. <repositories>...</repositories> ??
          8. <pluginRepositories>...</pluginRepositories> ??
          9. <distributionManagement>...</distributionManagement> ??
          10. <profiles>...</profiles>??
          ?


          Organization
          配置組織信息
          ??<organization>
          ????<name>Codehaus?Mojo</name>
          ????<url>http://mojo.codehaus.org</url> ;
          ??</organization>

          Developers
          配置開發者信息
          <developers>
          ????<developer>
          ??????<id>eric</id>
          ??????<name>Eric</name>
          ??????<email>eredmond@codehaus.org</email>
          ??????<url>http://eric.propellors.net</url> ;
          ??????<organization>Codehaus</organization>
          ??????<organizationUrl>http://mojo.codehaus.org</organizationUrl> ;
          ??????<roles>
          ????????<role>architect</role>
          ????????<role>developer</role>
          ??????</roles>
          ??????<timezone>-6</timezone>
          ??????<properties>
          ????????<picUrl>http://tinyurl.com/prv4t</picUrl> ;
          ??????</properties>
          ????</developer>
          ??</developers>

          Contributors
          ??<contributors>
          ????<contributor>
          ??????<name>Noelle</name>
          ??????<email>some.name@gmail.com</email>
          ??????<url>http://noellemarie.com</url> ;
          ??????<organization>Noelle?Marie</organization>
          ??????<organizationUrl>http://noellemarie.com</organizationUrl> ;
          ??????<roles>
          ????????<role>tester</role>
          ??????</roles>
          ??????<timezone>-5</timezone>
          ??????<properties>
          ????????<gtalk>some.name@gmail.com</gtalk>
          ??????</properties>
          ????</contributor>
          ??</contributors>

          環境設置

          Issue?Management
          ????定義相關的bug跟蹤系統,如bugzilla,testtrack,clearQuest等
          ??<issueManagement>
          ????<system>Bugzilla</system>
          ????<url>http://127.0.0.1/bugzilla</url> ;
          ??</issueManagement>
          Continuous?Integration?Management
          連續整合管理,基于triggers或者timings
          ??<ciManagement>
          ????<system>continuum</system>
          ????<url>http://127.0.0.1:8080/continuum</url> ;
          ????<notifiers>
          ??????<notifier>
          ????????<type>mail</type>
          ????????<sendOnError>true</sendOnError>
          ????????<sendOnFailure>true</sendOnFailure>
          ????????<sendOnSuccess>false</sendOnSuccess>
          ????????<sendOnWarning>false</sendOnWarning>
          ????????<configuration><address>continuum@127.0.0.1</address></configuration>
          ??????</notifier>
          ????</notifiers>
          ??</ciManagement>

          Mailing?Lists
          ??<mailingLists>
          ????<mailingList>
          ??????<name>User?List</name>
          ??????<subscribe>user-subscribe@127.0.0.1</subscribe>
          ??????<unsubscribe>user-unsubscribe@127.0.0.1</unsubscribe>
          ??????<post>user@127.0.0.1</post>
          ??????<archive>http://127.0.0.1/user/</archive> ;
          ??????<otherArchives>
          ????????<otherArchive>http://base.google.com/base/1/127.0.0.1</otherArchive> ;
          ??????</otherArchives>
          ????</mailingList>
          ??</mailingLists>

          SCM
          ??軟件配置管理,如cvs?和svn
          ??<scm>
          ????<connection>scm:svn:http://127.0.0.1/svn/my-project</connection> ;
          ????<developerConnection>scm:svn:https://127.0.0.1/svn/my-project</developerConnection> ;
          ????<tag>HEAD</tag>
          ????<url>http://127.0.0.1/websvn/my-project</url> ;
          ??</scm>

          Repositories

          配置同setting.xml中的開發庫

          Plugin?Repositories
          配置同?repositories

          Distribution?Management
          用于配置分發管理,配置相應的產品發布信息,主要用于發布,在執行mvn?deploy后表示要發布的位置
          1?配置到文件系統
          <distributionManagement>
          <repository>
          <id>proficio-repository</id>
          <name>Proficio?Repository</name>
          <url>file://${basedir}/target/deploy</url>
          </repository>
          </distributionManagement>
          2?使用ssh2配置
          <distributionManagement>
          <repository>
          <id>proficio-repository</id>
          <name>Proficio?Repository</name>
          <url>scp://sshserver.yourcompany.com/deploy</url>
          </repository>
          </distributionManagement>
          3?使用sftp配置
          <distributionManagement>
          <repository>
          <id>proficio-repository</id>
          <name>Proficio?Repository</name>
          <url>sftp://ftpserver.yourcompany.com/deploy</url>
          </repository>
          </distributionManagement>
          4?使用外在的ssh配置
          ????編譯擴展用于指定使用wagon外在ssh提供,用于提供你的文件到相應的遠程服務器。
          <distributionManagement>
          <repository>
          <id>proficio-repository</id>
          <name>Proficio?Repository</name>
          <url>scpexe://sshserver.yourcompany.com/deploy</url>
          </repository>
          </distributionManagement>
          <build>
          <extensions>
          <extension>
          <groupId>org.apache.maven.wagon</groupId>
          <artifactId>wagon-ssh-external</artifactId>
          <version>1.0-alpha-6</version>
          </extension>
          </extensions>
          </build>

          5?使用ftp配置
          <distributionManagement>
          <repository>
          <id>proficio-repository</id>
          <name>Proficio?Repository</name>
          <url>ftp://ftpserver.yourcompany.com/deploy</url>
          </repository>
          </distributionManagement>
          <build>
          <extensions>
          <extension>
          <groupId>org.apache.maven.wagon</groupId>
          <artifactId>wagon-ftp</artifactId>
          <version>1.0-alpha-6</version>
          </extension>
          </extensions>
          </build>

          repository?對應于你的開發庫,用戶信息通過settings.xml中的server取得

          Profiles
          類似于settings.xml中的profiles,增加了幾個元素,如下的樣式:
          ??<profiles>
          ????<profile>
          ??????<id>test</id>
          ??????<activation>...</activation>
          ??????<build>...</build>
          ??????<modules>...</modules>
          ??????<repositories>...</repositories>
          ??????<pluginRepositories>...</pluginRepositories>
          ??????<dependencies>...</dependencies>
          ??????<reporting>...</reporting>
          ??????<dependencyManagement>...</dependencyManagement>
          ??????<distributionManagement>...</distributionManagement>
          ????</profile>
          ??</profiles>

          posted on 2010-05-03 16:55 禮物 閱讀(1545) 評論(0)  編輯  收藏 所屬分類: Maven2
          主站蜘蛛池模板: 万载县| 铜鼓县| 云梦县| 托克逊县| 朝阳县| 东光县| 墨玉县| 策勒县| 巴林左旗| 额敏县| 绥宁县| 白城市| 汤阴县| 广东省| 廊坊市| 精河县| 高清| 通河县| 五台县| 巴林右旗| 墨江| 西昌市| 常宁市| 长岛县| 昔阳县| 城市| 平果县| 上杭县| 阿坝| 永城市| 二连浩特市| 丽水市| 巴青县| 滦平县| 新龙县| 板桥市| 巨野县| 比如县| 迭部县| 博客| 滦南县|