程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> maven配置篇之pom.xml

maven配置篇之pom.xml

編輯:關於JAVA

說完了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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</address></configuration>
    </notifier>
   </notifiers>
  </ciManagement>

Mailing Lists

 <mailingLists>
   <mailingList>
    <name>User List</name>
    <subscribe>[email protected]</subscribe>
    <unsubscribe>[email protected]</unsubscribe>
    <post>[email protected]</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>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved