<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    閑人野居
    好好學習,天天向上
    posts - 57,  comments - 137,  trackbacks - 0
    ??? 說完了settings.xml配置,下來說一下maven2的主要配置pom.xml
    什么是pom?
    ??? pom作為項目對象模型。通過xml表示maven項目,使用pom.xml來實現。主要描述了項目:包括配置文件;開發者需要遵循的規則,缺陷管理系統,組織和licenses,項目的url,項目的依賴性,以及其他所有的項目相關因素。
    快速察看:
    <project>
    ? <modelVersion>4.0.0</modelVersion>

    ? <!-- The Basics -->
    ? <groupId>...</groupId>
    ? <artifactId>...</artifactId>
    ? <version>...</version>
    ? <packaging>...</packaging>
    ? <dependencies>...</dependencies>
    ? <parent>...</parent>
    ? <dependencyManagement>...</dependencyManagement>
    ? <modules>...</modules>
    ? <properties>...</properties>

    ? <!-- Build Settings -->
    ? <build>...</build>
    ? <reporting>...</reporting>

    ? <!-- More Project Information -->
    ? <name>...</name>
    ? <description>...</description>
    ? <url>...</url>
    ? <inceptionYear>...</inceptionYear>
    ? <licenses>...</licenses>
    ? <organization>...</organization>
    ? <developers>...</developers>
    ? <contributors>...</contributors>

    ? <!-- Environment Settings -->
    ? <issueManagement>...</issueManagement>
    ? <ciManagement>...</ciManagement>
    ? <mailingLists>...</mailingLists>
    ? <scm>...</scm>
    ? <prerequisites>...</prerequisites>
    ? <repositories>...</repositories>
    ? <pluginRepositories>...</pluginRepositories>
    ? <distributionManagement>...</distributionManagement>
    ? <profiles>...</profiles>
    </project>

    基本內容:
    ??? 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>

    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>

    更多的項目信息
    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>

    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 2006-12-30 20:05 布衣郎 閱讀(88192) 評論(3)  編輯  收藏 所屬分類: 配置管理

    FeedBack:
    # re: maven 配置篇 之pom.xml
    # re: maven 配置篇 之pom.xml
    2014-01-02 10:26 | liango
    學習了  回復  更多評論
      
    # re: maven 配置篇 之pom.xml
    2014-03-28 17:14 | 嗚啦啦
    只是拿過來的?   回復  更多評論
      

    <2014年1月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 357202
    • 排名 - 155

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩少妇内射免费播放| 8888四色奇米在线观看免费看| 亚洲一区二区女搞男| 中文无码成人免费视频在线观看| 亚洲情a成黄在线观看动漫尤物| 91九色精品国产免费| 最新亚洲人成无码网www电影| 亚洲无线一二三四区手机| 久久精品视频免费| 亚洲无吗在线视频| 亚洲国产V高清在线观看| 精品无码国产污污污免费网站国产| 久久国产精品亚洲一区二区| 女人张开腿等男人桶免费视频| 一级做a爰全过程免费视频毛片| 亚洲AV综合色区无码一区爱AV| 无码一区二区三区免费视频 | 亚洲欧洲日本精品| 国产大片51精品免费观看| 精品四虎免费观看国产高清午夜| 亚洲性无码一区二区三区| 中文字幕精品亚洲无线码一区应用| 88av免费观看| 久久久久国色AV免费观看| 中文字幕亚洲男人的天堂网络 | 国产亚洲国产bv网站在线| 狠狠综合久久综合88亚洲| 成年私人影院免费视频网站| 国产永久免费高清在线| 亚洲精品永久在线观看| 亚洲精品高清视频| 亚洲成人高清在线| 女人18毛片水最多免费观看| 一级做a爰全过程免费视频| 四虎影视久久久免费| 亚洲色丰满少妇高潮18p| 亚洲va在线va天堂va四虎| 亚洲成人高清在线| 日韩免费观看一级毛片看看| 亚洲大片免费观看| 精品亚洲永久免费精品|