鍍金池/ 教程/ Java/ Maven POM
使用Maven構(gòu)建項目
定制庫到Maven本地資源庫
Maven安裝配置
Maven依賴管理
使用Maven創(chuàng)建Web應(yīng)用程序項目
Maven項目文檔
Maven存儲庫
使用Maven創(chuàng)建Java項目
Maven Web應(yīng)用
Maven創(chuàng)建Java項目
部署基于Maven的war文件到Tomcat
定制庫到Maven本地資源庫
Maven POM
Maven啟用代理訪問
轉(zhuǎn)換基于Maven的Java項目支持Eclipse IDE
Maven本地資源庫
Maven項目模板
Maven添加遠(yuǎn)程倉庫
如何從Maven遠(yuǎn)程存儲庫下載?
Maven插件
Maven依賴機制
Maven 構(gòu)建生命周期
將項目安裝到Maven本地資源庫
使用Maven模板創(chuàng)建項目
Maven構(gòu)建自動化
Maven中央存儲庫
Eclipse創(chuàng)建一個Maven Web項目
部署基于Maven的war文件到Tomcat
使用Maven運行單元測試
轉(zhuǎn)換基于Maven的Java項目支持Eclipse IDE
轉(zhuǎn)換基于Maven的Web應(yīng)用程序支持Eclipse IDE
NetBeans IDE集成Maven
Maven中央存儲庫
使用Maven清理項目
使用Maven構(gòu)建和測試Java項目
Maven本地資源庫
Maven依賴機制
使用Maven創(chuàng)建Web應(yīng)用程序項目
使用“mvn site-deploy”部署站點(WebDAV例子)
Maven快照
使用Maven構(gòu)建項目
Maven教程
Maven POM
生成基于Maven的項目文檔站點
使用Maven運行單元測試
Maven 構(gòu)建配置文件
Maven外部依賴
將項目安裝到Maven本地資源庫
Eclipse構(gòu)建Maven項目
啟用Maven的代理訪問
生成基于Maven的項目文檔站點
使用Maven創(chuàng)建Java項目
使用“mvn site-deploy”部署站點(WebDAV例子)
使用Maven模板創(chuàng)建項目
如何從Maven遠(yuǎn)程存儲庫下載?
使用Maven清理項目
Eclispe IDE集成Maven
Maven自動化部署
轉(zhuǎn)換基于Maven的Web應(yīng)用程序支持Eclipse IDE

Maven POM

POM代表項目對象模型。它是 Maven 中工作的基本單位,這是一個 XML 文件。它始終保存在該項目基本目錄中的 pom.xml 文件。
POM 包含的項目是使用 Maven 來構(gòu)建的,它用來包含各種配置信息。
POM 也包含了目標(biāo)和插件。在執(zhí)行任務(wù)或目標(biāo)時,Maven 會使用當(dāng)前目錄中的 POM。它讀取POM得到所需要的配置信息,然后執(zhí)行目標(biāo)。部分的配置可以在 POM 使用如下:

  • project dependencies
  • plugins
  • goals
  • build profiles
  • project version
  • developers
  • mailing list

創(chuàng)建一個POM之前,應(yīng)該要先決定項目組(groupId),它的名字(artifactId)和版本,因為這些屬性在項目倉庫是唯一標(biāo)識的。

POM的例子

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.yiibai.project-group</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
<project>

要注意的是,每個項目只有一個POM文件。

  • 所有的 POM 文件要項目元素必須有三個必填字段: groupId,artifactId,version
  • 在庫中的項目符號是:groupId:artifactId:version
  • pom.xml 的根元素是 project,它有三個主要的子節(jié)點。
節(jié)點 描述
groupId 這是項目組的編號,這在組織或項目中通常是獨一無二的。 例如,一家銀行集團com.company.bank擁有所有銀行相關(guān)項目。
artifactId 這是項目的ID。這通常是項目的名稱。 例如,consumer-banking。 除了groupId之外,artifactId還定義了artifact在存儲庫中的位置。
version 這是項目的版本。與groupId一起使用,artifact在存儲庫中用于將版本彼此分離。 例如:com.company.bank:consumer-banking:1.0,com.company.bank:consumer-banking:1.1

超級POM

所有的POM繼承自父類(盡管明確界定)。這個基礎(chǔ)的 POM 被稱為超級 POM,并包含繼承默認(rèn)值。 Maven使用有效的POM(超級POM加項目配置的配置)執(zhí)行有關(guān)目標(biāo)。它可以幫助開發(fā)人員指定最低配置的詳細(xì)信息寫在 pom.xml 中。雖然配置可以很容易被覆蓋。 一個簡單的方法來看看超級POM的默認(rèn)配置,通過運行下面的命令:mvn help:effective-pom 創(chuàng)建一個 pom.xml 。 在下面的例子中,已經(jīng)創(chuàng)建了一個 pom.xmlC:\MVN\ 項目文件夾中。 現(xiàn)在,打開命令控制臺,進(jìn)入包含 pom.xml 文件夾并執(zhí)行以下 mvn 命令。

C:\MVN\project> mvn help:effective-pom

Maven將開始處理,并顯示有效的 effective-pom 。

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
[INFO]    task-segment: [help:effective-pom] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:effective-pom {execution: default-cli}]
[INFO]

.....

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------

在控制臺顯示結(jié)果:有效POM,繼承,插值,應(yīng)用配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================= -->
<!--                                                                   -->
<!-- Generated by Maven Help Plugin on 2012-07-05T11:41:51             -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/           -->
<!--                                                                   -->
<!-- ================================================================= -->
<!-- ================================================================= -->
<!--                                                                   -->
<!-- Effective POM for project                                         -->
<!-- 'com.companyname.project-group:project-name:jar:1.0'              -->
<!--                                                                   -->
<!-- ================================================================= -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/
2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h
ttp://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.companyname.project-group</groupId>
  <artifactId>project</artifactId>
  <version>1.0</version>
  <build>
    <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
    <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
    <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
    <resources>
      <resource>
        <mergeId>resource-0</mergeId>
        <directory>C:\MVN\project\src\main\resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <mergeId>resource-1</mergeId>
        <directory>C:\MVN\project\src\test\resources</directory>
      </testResource>
    </testResources>
    <directory>C:\MVN\project\target</directory>
    <finalName>project-1.0</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2-beta-2</version>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.0.2</version>         </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-ear-plugin</artifactId>
          <version>2.3.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-ejb-plugin</artifactId>
          <version>2.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.5</version>
        </plugin>
        <plugin>
          <artifactId>maven-plugin-plugin</artifactId>
          <version>2.4.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-rar-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.0-beta-8</version>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>2.0-beta-7</version>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>2.0.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.4.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.1-alpha-2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>

      <plugin>
        <artifactId>maven-help-plugin</artifactId>
        <version>2.1.1</version>
      </plugin>
    </plugins>
  </build>
  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>
  <reporting>
    <outputDirectory>C:\MVN\project\target/site</outputDirectory>
  </reporting>
</project>

在上面的pom.xml 中,可以看到默認(rèn)的項目源文件夾結(jié)構(gòu),輸出目錄,插件,資料庫,報表目錄,Maven將使用它們來執(zhí)行預(yù)期的目標(biāo)。

Maven pom.xml 無須手動寫入。

Maven提供了大量的原型插件以創(chuàng)建項目,包括項目結(jié)構(gòu) 和 pom.xml

如上述詳細(xì)信息中提到 Maven插件Maven創(chuàng)建項目部分。