Maven的pom配置文件


1.1           Maven的pom配置文件

1.1.1            pom文件內容和作用

Pom.xml文件用來設置項目的項目依賴、插件、項目版本等信息,其中必須的是xml的根元素project 元素和三個必需字段:工程組的標識groupId,工程的名稱artifactId,版本信息version三個元素。

舉例:

<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>

<!-- 公司或者組織的唯一標志,並且配置時生成的路徑也是由此生成, 如com.companyname.project-group,maven會將該項目打成的jar包放本地路徑:/com/companyname/project-group -->

<groupId>com.companyname.project-group</groupId>

<!-- 項目的唯一ID,一個groupId下面可能多個項目,就是靠artifactId來區分的 -->

<artifactId>project</artifactId>

 <!-- 版本號 -->

<version>1.0</version>

 </project>

1.1.2            超級Pom文件的繼承關系

超級pom是項目的默認配置文件,項目中所有子模塊的pom文件都會繼承超級pom文件,在項目文件夾打開命令控制台,進入包含 pom.xml 文件夾,執行命令mvn help:effective-pom,maven會自動掃描工程,生成超級pom文件。

超級pom文件的內容

基礎信息設置

包括pom三要素:<groupId>    <artifactId>  <version>,依賴關系。

構建信息

用來配置源代碼路徑、輸出路徑、資源路徑,依賴插件信息

更多項目信息

 

環境設置

 

 

<project>
  <modelVersion>4.0.0</modelVersion>
<!--maven2.0必須是這樣寫,現在是maven2唯一支持的版本-->
  <!-- 基礎設置 -->
  <groupId>...</groupId>項目唯一標識
  <artifactId>...</artifactId>項目名稱
  <version>...</version>項目版本
  <packaging>...</packaging>打包機制,打包機制,如pom,jar,war,ear,rar,par

 <name>...</name>描述項目的名稱

  <url>...</url>開發團隊的網址
  <dependencies>...</dependencies>依賴關系
  <parent>...</parent>
  <dependencyManagement>...</dependencyManagement>
  <modules>...</modules>
  <properties>...</properties>

  <!--構建設置 -->
 <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>

   
</plugins>

  </build>


  <!-- 更多項目信息 -->
  <name>...</name>
  <description>...</description>
  <url>...</url>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>

  <!-- 環境設置-->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists> 
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>

1.1.3            Pom文件中的依賴dependencies

Dependencies字段用來聲明項目依賴的其他項目和組件,有三要素唯一標識其他項目和組件。需要是maven中心包管理的項目或組件,否則需要自己部署,或者通過設置scope為system並指定路徑,將依賴項目包含進來。有時候各個項目多層依賴,如A依賴B,B依賴C,如果在A中依賴B,默認A依賴C,如果A不想依賴C,可以用exclusions將C排除.

<dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.0</version>

      <type>jar</type>//依賴項目類型

      <scope>test</scope>依賴范圍(作用時間和作用域):test、system等

      <optional>true</optional>false,子項目默認集成,true,子項目需要顯示引入

    </dependency>

    <dependency>

        <groupId>com.alibaba.china.shared</groupId>

        <artifactId>alibaba.apollo.webx</artifactId>

        <version>2.5.0</version>

        <exclusions>

          <exclusion>從依賴的com.alibaba.china.shared排除下面的子項目

            <artifactId>org.slf4j.slf4j-api</artifactId>

            <groupId>com.alibaba.external</groupId>

          </exclusion>

          ....

        </exclusions>

......

</dependencies>

 

dependencyManagement:是用於幫助管理chidren的dependencies的。例如如果parent使用dependencyManagement定義了一個dependencyon junit:junit4.0,那么 它的children就可以只引用 groupId和artifactId,而version就可以通過parent來設置,這樣的好處就是可以集中管理依賴的詳情。

Ø  scope:表示依賴項目的一個作用范圍。scope的主要取值范圍如下(還有一個是在Maven2.0.9以后版本才支持的import,關於import作用域將在后文《Dependency介紹》中做介紹):

compile:這是它的默認值,這種類型很容易讓人產生誤解,以為只有在編譯的時候才是需要的,其實這種類型表示所有的情況都是有用的,包括編譯和運行時。而且這種類型的依賴性是可以傳遞的。

provided:這個跟compile很類似,但是它表示你期望這個依賴項目在運行時由JDK或者容器來提供。這種類型表示該依賴只有在測試和編譯的情況下才有效,在運行時將由JDK或者容器提供。這種類型的依賴性是不可傳遞的。

runtime:這種類型表示該依賴在編譯的時候不是必須的,只有在運行的時候才是必須的。

test:這表示這種依賴只有測試的時候才需要,正常情況下是不需要的。

system:這種類型跟provided類似,唯一不同的就是這種類型的依賴我們要自己提供jar包,這需要與另一個元素systemPath來結合使用。systemPath將指向我們系統上的jar包的路徑,而且必須是給定的絕對路徑。

systemPath:上面已經說過了這個元素是在scope的值為system的時候用於指定依賴的jar包在系統上的位置的,而且是絕對路徑。該元素必須在依賴的 jar包的scope為system時才能使用,否則Maven將報錯。

1.1.4            Pom文件中的繼承

父項目和子項目之間可以是繼承關系,子項目pom文件中通過parent節點指定繼承的父項目的三要素,不在同一路徑下時還要用<relativePath>節點去指定相對路徑。,子pom.xml會完全繼承父pom.xml中所有的元素,而且對於相同的元素,一般子pom.xml中的會覆蓋父pom.xml中的元素,但是有幾個特殊的元素它們會進行合並而不是覆蓋。這些特殊的元素是:dependencies、developers、contributors、plugin列表,包括plugin下面的reports、resources。

帶有相對路徑的子項目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/maven-v4_0_0.xsd"> 

  <parent

    <groupId>com.tiantian.mavenTest</groupId> 

    <artifactId>projectA</artifactId> 

<version>1.0-SNAPSHOT</version>

 <relativePath>../projectA/pom.xml</relativePath>

  </parent

 <modelVersion>4.0.0</modelVersion> 

  <groupId>com.tiantian.mavenTest</groupId> 

  <artifactId>projectB</artifactId> 

  <packaging>jar</packaging> 

  <version>1.0-SNAPSHOT</version> 

</project> 

1.1.5            Pom文件的聚合module

聚合和繼承是相關的兩個概念,項目A,B,C,A作為父項目,B和C作為A的子模塊,繼承A的pom文件。而在A的pom文件中在<modules>標識中,添加B和C,在B和C的pom文件中聲明parent為A,並將A的pom.xml中的packaging元素的值為pom。當對項目A進行編譯時,B,C也會同時被編譯。當我們在項目A上使用Maven命令時,實際上這些命令都會在它的子模塊項目B,C上使用。這樣方便大型項目的統一管理。Module中填的是子項目中pom的位置相對於父項目pom文件的相對路徑,就是從父項目pom所在的目錄出發,進入子項目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.tiantian.mavenTest</groupId> 

  <artifactId>A</artifactId> 

  <version>1.0-SNAPSHOT</version> 

  <packaging>pom</packaging> 

  <modules> 

       <module>/B</module> //B在A文件夾下面和A的pom一級,在B文件夾下可以找到B的pom

<module>../C</module> //A和C為同級目錄,所以..退出A,然后在進入C,可以找到C的pom文件。

  </modules> 

</project>

 

1.1.6            Pom屬性

在pom.xml文件中我們可以使用${propertyName}的形式引用屬性。這個propertyName有以下幾種形式:

(1)env.propertyName:這種形式表示引用的是環境變量,比如我們需要引用當前系統的環境變量PATH的時候,就可以使用${env.PATH}。

(2)project.propertyName:這種形式表示引用的是當前這個pom.xml中project根元素下面的子元素的值。比如我們需要引用當前project下面的version的時候,就可以使用${project.version}。

(3)settings.propertyName:這種形式引用的是Maven本地配置文件settings.xml或本地Maven安裝目錄下的settings.xml文件根元素settings下的元素。比如我們需要引用settings下的本地倉庫localRepository元素的值時,我們可以用${settings.localRepository}

(4)java的系統屬性,所有在java中使用java.lang.System.getProperties()能夠獲取到的屬性都可以在pom.xml中引用,比如${java.home}。

(5)pom.xml中properties元素下面的子元素作為屬性。假如在pom.xml中有如下一段代碼<properties><hello.world>helloWorld</hello.world></properties>,那么我們就可以使用${hello.world}引用到對應的helloWorld。

 

 

自己編了一個股票監控軟件,有如下功能,有興趣的朋友可以下載;

(1)   個股監測。監測個股實時變化,可以監測個股大單交易、急速拉升和下降、主力入場和出場、股票最高點和最低點提醒。檢測到最高點、最低點、主力進場點、主力退場點、急速拉升點、急速下跌點,給出語音或者聲音提醒,不用再時刻看着大盤了,給你更多自由的時間;

(2)   大盤監測。監測大盤的走勢,采用上證、深證、創業三大指數的綜合指數作為大盤走勢。並實時監測大盤的最高點和最低點、中間的轉折點。

(3)   股票推薦。還能根據歷史數據長期或短期走勢進行分析,對股市3千多個股票進行分析對比,選出漲勢良好的股票,按照增長速度從大到小排序,推薦給你漲勢良好的股票;

下載地址:

1.0.3版本(修復大盤指數崩潰缺陷)下載地址:

鏈接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取碼:003h

更新鏈接:

https://www.cnblogs.com/bclshuai/p/10621613.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM