日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Maven 参数详情

發(fā)布時(shí)間:2024/3/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Maven 参数详情 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.Maven?dependency?參數(shù)

參數(shù)名稱

枚舉值

建議

參數(shù)含義

樣例

type

jar、war、pom 等

有時(shí)候我們引入某一個(gè)依賴時(shí),必須指定type,

這是因?yàn)橛糜谄ヅ鋎ependency引用和dependencyManagement部分的最小信息集

實(shí)際上是{groupId,artifactId,type,classifier}。

在很多情況下,這些依賴關(guān)系將引用沒有classifier的jar依賴。

這允許我們將標(biāo)識(shí)設(shè)置為{groupId,artifactId},

因?yàn)閠ype的默認(rèn)值是jar,并且默認(rèn)classifier為null。

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<type>jar</type>
</dependency>

classifier

jdk16、jdk17、jdk18 等

Classifier可能是最容易被忽略的Maven特性,但它確實(shí)非常重要,我們也需要它來幫助規(guī)劃坐標(biāo)。

設(shè)想這樣一個(gè)情況,有一個(gè)jar項(xiàng)目,就說是 dog-cli-1.0.jar 吧,運(yùn)行它用戶就能在命令行上畫一只小狗出來。

現(xiàn)在用戶的要求是希望你能提供一個(gè)zip包,里面不僅包含這個(gè)可運(yùn)行的jar,還得包含源代碼和文檔,換句話說,

這是比較正式的分發(fā)包。這個(gè)文件名應(yīng)該是怎樣的呢?dog-cli-1.0.zip?不夠清楚,僅僅從擴(kuò)展名很難分辨

什么是Maven默認(rèn)生成的構(gòu)件,什么是額外配置生成分發(fā)包。如果能是dog-cli-1.0-dist.zip就最好了。這里的dist

就是classifier,默認(rèn)Maven只生成一個(gè)構(gòu)件,我們稱之為主構(gòu)件,那當(dāng)我們希望Maven生成其他附屬構(gòu)件的時(shí)候,

就能用上classifier。常見的classifier還有如dog-cli-1.0-sources.jar表示源碼包,dog-cli-1.0-javadoc.jar表示JavaDoc包等等。

<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<classifier>jdk15</classifier>
</dependency>

optional

true,false不推薦默認(rèn)的值為false?即:子項(xiàng)目必須依賴<dependency>
??<groupid>ProjectD</groupid>
??<artifactid>ProjectD</artifactid>
??<version>1.0-SNAPSHOT</version>
??<optional>true</optional>
</dependency>

scope

compile、testrunntime

providedsystemimport

compile

默認(rèn)就是compile?:?編譯、測(cè)試、運(yùn)行三宗classpath都有效。

test

僅僅參與測(cè)試相關(guān)的工作,包括測(cè)試代碼的編譯,執(zhí)行。

runntime

表示被依賴項(xiàng)目無需參與項(xiàng)目的編譯,不過后期的測(cè)試和運(yùn)行周期需要其參與。

與compile相比,跳過編譯而已。

provided

打包的時(shí)候可以不包進(jìn)去,別的容器會(huì)提供。

參與編譯,測(cè)試,運(yùn)行等周期,相當(dāng)于compile?但是在打包階段做了exclude(排除)的動(dòng)作。

system

被依賴項(xiàng)不會(huì)從maven倉(cāng)庫(kù)抓,而是從本地文件系統(tǒng)拿,一定需要配合systemPath屬性使用(打包時(shí)不打進(jìn)去)。

import(only available in Maven 2.0.9 or later)

這個(gè)是maven2.0.9版本后出的屬性,import只能在dependencyManagement的中使用,能解決maven單繼承問題,import依賴關(guān)系實(shí)際上并不參與限制依賴關(guān)系的傳遞性(不常用)。

對(duì)于編譯、測(cè)試、運(yùn)行 不會(huì)產(chǎn)生實(shí)際影響

<dependency>
<groupId>boot</groupId>
<artifactId>starter-test</artifactId>
<scope>test</scope>
</dependency>

systemPath

當(dāng)maven依賴本地而非repository中的jar包,sytemPath指明本地jar包路徑

<dependency>?
<groupId>jdk.tools</groupId>?
<artifactId>jdk.tools</artifactId>?
<version>1.7</version>?
<scope>system</scope>?
<systemPath>tools.jar</systemPath></dependency>

exclusions

依賴排除,就是有時(shí)候引入某一個(gè)依賴的時(shí)候,該依賴下有jar包沖突,可以排除掉,不引用該jar<dependency>
<groupId>com.jd.bt</groupId>
<artifactId>bt-middle-common</artifactId>
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>

2. Maven pom.xml 文件簡(jiǎn)介

<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- 模型版本。maven2.0必須是這樣寫,現(xiàn)在是maven2唯一支持的版本 --> <modelVersion>4.0.0</modelVersion> <!--公司或者組織的唯一標(biāo)志,并且配置時(shí)生成的路徑也是由此生成,如com.winner.trace,maven會(huì)將該項(xiàng)目打成的jar包放本地路徑:/com/winner/trace--> <groupId>com.winner.trace</groupId> <!-- 本項(xiàng)目的唯一ID,一個(gè)groupId下面可能多個(gè)項(xiàng)目,就是靠artifactId來區(qū)分的 --> <artifactId>trace-core</artifactId> <!-- 本項(xiàng)目目前所處的版本號(hào) --> <version>1.0.0-SNAPSHOT</version> <!-- 打包的機(jī)制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默認(rèn)為jar --> <packaging>jar</packaging> <!--幫助定義構(gòu)件輸出的一些附屬構(gòu)件,附屬構(gòu)件與主構(gòu)件對(duì)應(yīng),有時(shí)候需要加上classifier才能唯一的確定該構(gòu)件不能直接定義項(xiàng)目的classifer,因?yàn)楦綄贅?gòu)件不是項(xiàng)目直接默認(rèn)生成的,而是由附加的插件幫助生成的--> <classifier>...</classifier> <!--項(xiàng)目的名稱, Maven產(chǎn)生的文檔用--> <name>banseon-maven</name> <!--項(xiàng)目主頁的URL, Maven產(chǎn)生的文檔用--> <url>http://www.baidu.com/banseon</url> <!-- 項(xiàng)目的詳細(xì)描述, Maven 產(chǎn)生的文檔用--> <description>A maven project to study maven.</description><!--父項(xiàng)目的坐標(biāo)。如果項(xiàng)目中沒有規(guī)定某個(gè)元素的值,那么父項(xiàng)目中的對(duì)應(yīng)值即為項(xiàng)目的默認(rèn)值。坐標(biāo)包括group ID,artifact ID和 version。--> <parent> <!--被繼承的父項(xiàng)目的構(gòu)件標(biāo)識(shí)符--> <artifactId/> <!--被繼承的父項(xiàng)目的全球唯一標(biāo)識(shí)符--> <groupId/> <!--被繼承的父項(xiàng)目的版本--> <version/> <!--父項(xiàng)目的pom.xml文件的相對(duì)路徑。相對(duì)路徑允許你選擇一個(gè)不同的路徑。默認(rèn)值是../pom.xml。Maven首先在構(gòu)建當(dāng)前項(xiàng)目的地方尋找父項(xiàng) 目的pom,其次在文件系統(tǒng)的這個(gè)位置(relativePath位置),然后在本地倉(cāng)庫(kù),最后在遠(yuǎn)程倉(cāng)庫(kù)尋找父項(xiàng)目的pom。--> <relativePath/> </parent><!-- 定義本項(xiàng)目的依賴關(guān)系 --> <dependencies> <!-- 每個(gè)dependency都對(duì)應(yīng)這一個(gè)jar包 --> <dependency> <!--一般情況下,maven是通過groupId、artifactId、version這三個(gè)元素值(俗稱坐標(biāo))來檢索該構(gòu)件,然后引入你的工程。如果別人想引用你現(xiàn)在開發(fā)的這個(gè)項(xiàng)目(前提是已開發(fā)完畢并發(fā)布到了遠(yuǎn)程倉(cāng)庫(kù)),就需要在他的pom文件中新建一個(gè)dependency節(jié)點(diǎn),將本項(xiàng)目的groupId、artifactId、version寫入,maven就會(huì)把你上傳的jar包下載到他的本地--> <groupId>com.winner.trace</groupId> <artifactId>trace-test</artifactId> <version>1.0.0-SNAPSHOT</version> <!--maven認(rèn)為,程序?qū)ν獠康囊蕾嚂?huì)隨著程序的所處階段和應(yīng)用場(chǎng)景而變化,所以maven中的依賴關(guān)系有作用域(scope)的限制。scope包含如下的取值:compile(編譯范圍)、provided(已提供范圍)、runtime(運(yùn)行時(shí)范圍)、test(測(cè)試范圍)、system(系統(tǒng)范圍)--> <scope>test</scope> <!-- 設(shè)置指依賴是否可選,默認(rèn)為false,即子項(xiàng)目默認(rèn)都繼承:為true,則子項(xiàng)目必需顯示的引入,與dependencyManagement里定義的依賴類似 --> <optional>false</optional> <!-- 屏蔽依賴關(guān)系。 比如項(xiàng)目中使用的libA依賴某個(gè)庫(kù)的1.0版,libB依賴某個(gè)庫(kù)的2.0版,現(xiàn)在想統(tǒng)一使用2.0版,就應(yīng)該屏蔽掉對(duì)1.0版的依賴 --> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <!-- 為pom定義一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} --> <properties> <file.encoding>UTF-8</file.encoding> <java.source.version>1.5</java.source.version> <java.target.version>1.5</java.target.version> </properties> ... </project>

3.Maven build 構(gòu)建配置

<build> <!-- 產(chǎn)生的構(gòu)件的文件名,默認(rèn)值是${artifactId}-${version}。 --> <finalName>myPorjectName</finalName> <!-- 構(gòu)建產(chǎn)生的所有文件存放的目錄,默認(rèn)為${basedir}/target,即項(xiàng)目根目錄下的target --> <directory>${basedir}/target</directory> <!--當(dāng)項(xiàng)目沒有規(guī)定目標(biāo)(Maven2叫做階段(phase))時(shí)的默認(rèn)值, --> <!--必須跟命令行上的參數(shù)相同例如jar:jar,或者與某個(gè)階段(phase)相同例如install、compile等 --> <defaultGoal>install</defaultGoal> <!--當(dāng)filtering開關(guān)打開時(shí),使用到的過濾器屬性文件列表。 --> <!--項(xiàng)目配置信息中諸如${spring.version}之類的占位符會(huì)被屬性文件中的實(shí)際值替換掉 --> <filters> <filter>../filter.properties</filter> </filters> <!--項(xiàng)目相關(guān)的所有資源路徑列表,例如和項(xiàng)目相關(guān)的配置文件、屬性文件,這些資源被包含在最終的打包文件里。 --> <resources> <resource> <!--描述了資源的目標(biāo)路徑。該路徑相對(duì)target/classes目錄(例如${project.build.outputDirectory})。舉個(gè)例子,如果你想資源在特定的包里(org.apache.maven.messages),你就必須該元素設(shè)置為org/apache/maven/messages。然而,如果你只是想把資源放到源碼目錄結(jié)構(gòu)里,就不需要該配置。--> <targetPath>resources</targetPath> <!--是否使用參數(shù)值代替參數(shù)名。參數(shù)值取自properties元素或者文件里配置的屬性,文件在filters元素里列出。 --> <filtering>true</filtering> <!--描述存放資源的目錄,該路徑相對(duì)POM路徑 --> <directory>src/main/resources</directory> <!--包含的模式列表 --> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <!--排除的模式列表 如果<include>與<exclude>劃定的范圍存在沖突,以<exclude>為準(zhǔn) --> <excludes> <exclude>jdbc.properties</exclude> </excludes> </resource> </resources> <!--單元測(cè)試相關(guān)的所有資源路徑,配制方法與resources類似 --> <testResources> <testResource> <targetPath /> <filtering /> <directory /> <includes /> <excludes /> </testResource> </testResources> <!--項(xiàng)目源碼目錄,當(dāng)構(gòu)建項(xiàng)目的時(shí)候,構(gòu)建系統(tǒng)會(huì)編譯目錄里的源碼。該路徑是相對(duì)于pom.xml的相對(duì)路徑。 --> <sourceDirectory>${basedir}\src\main\java</sourceDirectory> <!--項(xiàng)目腳本源碼目錄,該目錄和源碼目錄不同,絕大多數(shù)情況下,該目錄下的內(nèi)容會(huì)被拷貝到輸出目錄(因?yàn)槟_本是被解釋的,而不是被編譯的)。 --> <scriptSourceDirectory>${basedir}\src\main\scripts</scriptSourceDirectory> <!--項(xiàng)目單元測(cè)試使用的源碼目錄,當(dāng)測(cè)試項(xiàng)目的時(shí)候,構(gòu)建系統(tǒng)會(huì)編譯目錄里的源碼。該路徑是相對(duì)于pom.xml的相對(duì)路徑。 --> <testSourceDirectory>${basedir}\src\test\java</testSourceDirectory> <!--被編譯過的應(yīng)用程序class文件存放的目錄。 --> <outputDirectory>${basedir}\target\classes</outputDirectory> <!--被編譯過的測(cè)試class文件存放的目錄。 --> <testOutputDirectory>${basedir}\target\test-classes</testOutputDirectory> <!--項(xiàng)目的一系列構(gòu)建擴(kuò)展,它們是一系列build過程中要使用的產(chǎn)品,會(huì)包含在running bulid‘s classpath里面。他們可以開啟extensions,也可以通過提供條件來激活plugins。簡(jiǎn)單來講,extensions是在build過程被激活的產(chǎn)品--> <extensions> <!--例如,通常情況下,程序開發(fā)完成后部署到線上Linux服務(wù)器,可能需要經(jīng)歷打包、將包文件傳到服務(wù)器、SSH連上服務(wù)器、敲命令啟動(dòng)程序等一系列繁瑣的步驟。實(shí)際上這些步驟都可以通過Maven的一個(gè)插件 wagon-maven-plugin 來自動(dòng)完成下面的擴(kuò)展插件wagon-ssh用于通過SSH的方式連接遠(yuǎn)程服務(wù)器,類似的還有支持ftp方式的wagon-ftp插件--> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh</artifactId> <version>2.8</version> </extension> </extensions> <!--使用的插件列表--> <plugins> <plugin> <groupId></groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.5</version> <!--在構(gòu)建生命周期中執(zhí)行一組目標(biāo)的配置。每個(gè)目標(biāo)可能有不同的配置。 --> <executions> <execution> <!--執(zhí)行目標(biāo)的標(biāo)識(shí)符,用于標(biāo)識(shí)構(gòu)建過程中的目標(biāo),或者匹配繼承過程中需要合并的執(zhí)行目標(biāo) --> <id>assembly</id> <!--綁定了目標(biāo)的構(gòu)建生命周期階段,如果省略,目標(biāo)會(huì)被綁定到源數(shù)據(jù)里配置的默認(rèn)階段 --> <phase>package</phase> <!--配置的執(zhí)行目標(biāo) --> <goals> <goal>single</goal> </goals> <!--配置是否被傳播到子POM --> <inherited>false</inherited> </execution> </executions> <!--作為DOM對(duì)象的配置,配置項(xiàng)因插件而異 --> <configuration> <finalName>${finalName}</finalName> <appendAssemblyId>false</appendAssemblyId> <descriptor>assembly.xml</descriptor> </configuration> <!--是否從該插件下載Maven擴(kuò)展(例如打包和類型處理器),由于性能原因,只有在真需要下載時(shí),該元素才被設(shè)置成true。--> <extensions>false</extensions> <!--項(xiàng)目引入插件所需要的額外依賴 --> <dependencies> <dependency>...</dependency> </dependencies> <!--任何配置是否被傳播到子項(xiàng)目 --> <inherited>true</inherited> </plugin> </plugins> <!--主要定義插件的共同元素、擴(kuò)展元素集合,類似于dependencyManagement,所有繼承于此項(xiàng)目的子項(xiàng)目都能使用。該插件配置項(xiàng)直到被引用時(shí)才會(huì)被解析或綁定到生命周期。給定插件的任何本地配置都會(huì)覆蓋這里的配置--> <pluginManagement> <plugins>...</plugins> </pluginManagement> </build>

4.Maven profiles 配置(激活不同環(huán)境)

<!--在列的項(xiàng)目構(gòu)建profile,如果被激活,會(huì)重新構(gòu)建處理 --> <profiles> <!--根據(jù)環(huán)境參數(shù)或命令行參數(shù)激活某個(gè)構(gòu)建處理 (一個(gè)項(xiàng)目中可能存在多個(gè)) --> <profile> <!--自動(dòng)觸發(fā)profile的條件邏輯。Activation是profile的開啟鑰匙。 --> <activation> <!--profile默認(rèn)是否激活的標(biāo)識(shí) --> <activeByDefault>false</activeByDefault> <!--activation有一個(gè)內(nèi)建的java版本檢測(cè),如果檢測(cè)到j(luò)dk版本與期待的一樣,profile被激活。 --> <jdk>1.7</jdk> <!--當(dāng)匹配的操作系統(tǒng)屬性被檢測(cè)到,profile被激活。os元素可以定義一些操作系統(tǒng)相關(guān)的屬性。 --> <os> <!--激活profile的操作系統(tǒng)的名字 --> <name>Windows XP</name> <!--激活profile的操作系統(tǒng)所屬家族(如 'windows') --> <family>Windows</family> <!--激活profile的操作系統(tǒng)體系結(jié)構(gòu) --> <arch>x86</arch> <!--激活profile的操作系統(tǒng)版本 --> <version>5.1.2600</version> </os> <!--如果Maven檢測(cè)到某一個(gè)屬性(其值可以在POM中通過${名稱}引用),其擁有對(duì)應(yīng)的名稱和值,Profile就會(huì)被激活。如果值字段是空的,那么存在屬性名稱字段就會(huì)激活profile,否則按區(qū)分大小寫方式匹配屬性值字段--> <property> <!--激活profile的屬性的名稱 --> <name>mavenVersion</name> <!--激活profile的屬性的值 --> <value>2.0.3</value> </property> <!--提供一個(gè)文件名,通過檢測(cè)該文件的存在或不存在來激活profile。missing檢查文件是否存在,如果不存在則激活profile。另一方面,exists則會(huì)檢查文件是否存在,如果存在則激活profile。--> <file> <!--如果指定的文件存在,則激活profile。 --> <exists>/usr/local/workspace/</exists> <!--如果指定的文件不存在,則激活profile。 --> <missing>/usr/local/workspace/</missing> </file> </activation> <id>jc-dev</id> <properties><profiles.active>jc-dev</profiles.active><maven.test.skip>true</maven.test.skip><scope.jar>provided</scope.jar></properties><!-- 以下屬性跟 pom 根下的其他屬性意義一致(如果被激活則啟用) --><build /> <modules /> <repositories /> <pluginRepositories /> <dependencies /> <reporting /> <dependencyManagement /> <distributionManagement /> </profile> </profiles>

5.Maven 默認(rèn)處理策略

優(yōu)先級(jí)

示例

描述

最短路徑優(yōu)先A->B->C->D1, E->F->D2,D1,D2 分別為 D 的不同版本默認(rèn)選擇最短路徑的那個(gè) jar 包,即 D2。
最先聲明優(yōu)先A->B->C1, E->F->C2?兩個(gè)依賴路徑長(zhǎng)度都是 2,那么就選擇最先聲明的那個(gè)

Maven忽略單元測(cè)試 安裝:clean install -Dmaven.test.skip=true

總結(jié)

以上是生活随笔為你收集整理的Maven 参数详情的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。