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
