1.Maven dependency 参数

参数名称

枚举值

建议

参数含义

样例

type

jar、war、pom 等

有时候我们引入某一个依赖时,必须指定type,

这是因为用于匹配dependency引用和dependencyManagement部分的最小信息集

实际上是{groupId,artifactId,type,classifier}。

在很多情况下,这些依赖关系将引用没有classifier的jar依赖。

这允许我们将标识设置为{groupId,artifactId},

因为type的默认值是jar,并且默认classifier为null。

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

classifier

jdk16、jdk17、jdk18 等

Classifier可能是最容易被忽略的Maven特性,但它确实非常重要,我们也需要它来帮助规划坐标。

设想这样一个情况,有一个jar项目,就说是 dog-cli-1.0.jar 吧,运行它用户就能在命令行上画一只小狗出来。

现在用户的要求是希望你能提供一个zip包,里面不仅包含这个可运行的jar,还得包含源代码和文档,换句话说,

这是比较正式的分发包。这个文件名应该是怎样的呢?dog-cli-1.0.zip?不够清楚,仅仅从扩展名很难分辨

什么是Maven默认生成的构件,什么是额外配置生成分发包。如果能是dog-cli-1.0-dist.zip就最好了。这里的dist

就是classifier,默认Maven只生成一个构件,我们称之为主构件,那当我们希望Maven生成其他附属构件的时候,

就能用上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 不推荐 默认的值为false 即:子项目必须依赖 <dependency>
  <groupid>ProjectD</groupid>
  <artifactid>ProjectD</artifactid>
  <version>1.0-SNAPSHOT</version>
  <optional>true</optional>
</dependency>

scope

compile、testrunntime

providedsystemimport

compile

默认就是compile : 编译、测试、运行三宗classpath都有效。

test

仅仅参与测试相关的工作,包括测试代码的编译,执行。

runntime

表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。

与compile相比,跳过编译而已。

provided

打包的时候可以不包进去,别的容器会提供。

参与编译,测试,运行等周期,相当于compile 但是在打包阶段做了exclude(排除)的动作。

system

被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用(打包时不打进去)。

import(only available in Maven 2.0.9 or later)

这个是maven2.0.9版本后出的属性,import只能在dependencyManagement的中使用,能解决maven单继承问题,import依赖关系实际上并不参与限制依赖关系的传递性(不常用)。

对于编译、测试、运行 不会产生实际影响

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

systemPath

当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

依赖排除,就是有时候引入某一个依赖的时候,该依赖下有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 文件简介

<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必须是这样写,现在是maven2唯一支持的版本 --> <modelVersion>4.0.0</modelVersion> <!--公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,如com.winner.trace,maven会将该项目打成的jar包放本地路径:/com/winner/trace--> <groupId>com.winner.trace</groupId> <!-- 本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 --> <artifactId>trace-core</artifactId> <!-- 本项目目前所处的版本号 --> <version>1.0.0-SNAPSHOT</version> <!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar --> <packaging>jar</packaging> <!--帮助定义构件输出的一些附属构件,附属构件与主构件对应,有时候需要加上classifier才能唯一的确定该构件不能直接定义项目的classifer,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的--> <classifier>...</classifier> <!--项目的名称, Maven产生的文档用-->  <name>banseon-maven</name>  <!--项目主页的URL, Maven产生的文档用-->  <url>http://www.baidu.com/banseon</url>  <!-- 项目的详细描述, Maven 产生的文档用-->  <description>A maven project to study maven.</description><!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。坐标包括group ID,artifact ID和 version。--> <parent> <!--被继承的父项目的构件标识符--> <artifactId/> <!--被继承的父项目的全球唯一标识符--> <groupId/> <!--被继承的父项目的版本--> <version/> <!--父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项 目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。--> <relativePath/> </parent><!-- 定义本项目的依赖关系 --> <dependencies> <!-- 每个dependency都对应这一个jar包 --> <dependency> <!--一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件,然后引入你的工程。如果别人想引用你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库),就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入,maven就会把你上传的jar包下载到他的本地-->  <groupId>com.winner.trace</groupId> <artifactId>trace-test</artifactId> <version>1.0.0-SNAPSHOT</version> <!--maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化,所以maven中的依赖关系有作用域(scope)的限制。scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围)--> <scope>test</scope> <!-- 设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似  --> <optional>false</optional> <!-- 屏蔽依赖关系。 比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对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 构建配置

<build> <!-- 产生的构件的文件名,默认值是${artifactId}-${version}。 --> <finalName>myPorjectName</finalName> <!-- 构建产生的所有文件存放的目录,默认为${basedir}/target,即项目根目录下的target --> <directory>${basedir}/target</directory> <!--当项目没有规定目标(Maven2叫做阶段(phase))时的默认值, --> <!--必须跟命令行上的参数相同例如jar:jar,或者与某个阶段(phase)相同例如install、compile等 --> <defaultGoal>install</defaultGoal> <!--当filtering开关打开时,使用到的过滤器属性文件列表。 --> <!--项目配置信息中诸如${spring.version}之类的占位符会被属性文件中的实际值替换掉 --> <filters> <filter>../filter.properties</filter> </filters> <!--项目相关的所有资源路径列表,例如和项目相关的配置文件、属性文件,这些资源被包含在最终的打包文件里。 --> <resources> <resource> <!--描述了资源的目标路径。该路径相对target/classes目录(例如${project.build.outputDirectory})。举个例子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为org/apache/maven/messages。然而,如果你只是想把资源放到源码目录结构里,就不需要该配置。--> <targetPath>resources</targetPath> <!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。 --> <filtering>true</filtering> <!--描述存放资源的目录,该路径相对POM路径 --> <directory>src/main/resources</directory> <!--包含的模式列表 --> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <!--排除的模式列表 如果<include>与<exclude>划定的范围存在冲突,以<exclude>为准 --> <excludes> <exclude>jdbc.properties</exclude> </excludes> </resource> </resources> <!--单元测试相关的所有资源路径,配制方法与resources类似 --> <testResources> <testResource> <targetPath /> <filtering /> <directory /> <includes /> <excludes /> </testResource> </testResources> <!--项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 --> <sourceDirectory>${basedir}\src\main\java</sourceDirectory> <!--项目脚本源码目录,该目录和源码目录不同,绝大多数情况下,该目录下的内容会被拷贝到输出目录(因为脚本是被解释的,而不是被编译的)。 --> <scriptSourceDirectory>${basedir}\src\main\scripts</scriptSourceDirectory> <!--项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 --> <testSourceDirectory>${basedir}\src\test\java</testSourceDirectory> <!--被编译过的应用程序class文件存放的目录。 --> <outputDirectory>${basedir}\target\classes</outputDirectory> <!--被编译过的测试class文件存放的目录。 --> <testOutputDirectory>${basedir}\target\test-classes</testOutputDirectory> <!--项目的一系列构建扩展,它们是一系列build过程中要使用的产品,会包含在running bulid‘s classpath里面。他们可以开启extensions,也可以通过提供条件来激活plugins。简单来讲,extensions是在build过程被激活的产品-->   <extensions> <!--例如,通常情况下,程序开发完成后部署到线上Linux服务器,可能需要经历打包、将包文件传到服务器、SSH连上服务器、敲命令启动程序等一系列繁琐的步骤。实际上这些步骤都可以通过Maven的一个插件 wagon-maven-plugin 来自动完成下面的扩展插件wagon-ssh用于通过SSH的方式连接远程服务器,类似的还有支持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> <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。 --> <executions> <execution> <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标 --> <id>assembly</id> <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段 --> <phase>package</phase> <!--配置的执行目标 --> <goals> <goal>single</goal> </goals> <!--配置是否被传播到子POM --> <inherited>false</inherited> </execution> </executions> <!--作为DOM对象的配置,配置项因插件而异 --> <configuration> <finalName>${finalName}</finalName> <appendAssemblyId>false</appendAssemblyId> <descriptor>assembly.xml</descriptor> </configuration> <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成true。-->  <extensions>false</extensions> <!--项目引入插件所需要的额外依赖 --> <dependencies> <dependency>...</dependency> </dependencies> <!--任何配置是否被传播到子项目 --> <inherited>true</inherited> </plugin> </plugins> <!--主要定义插件的共同元素、扩展元素集合,类似于dependencyManagement,所有继承于此项目的子项目都能使用。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置-->   <pluginManagement> <plugins>...</plugins> </pluginManagement>
</build>

4.Maven profiles 配置(激活不同环境)

<!--在列的项目构建profile,如果被激活,会重新构建处理 -->
<profiles> <!--根据环境参数或命令行参数激活某个构建处理 (一个项目中可能存在多个) --> <profile> <!--自动触发profile的条件逻辑。Activation是profile的开启钥匙。 --> <activation> <!--profile默认是否激活的标识 --> <activeByDefault>false</activeByDefault> <!--activation有一个内建的java版本检测,如果检测到jdk版本与期待的一样,profile被激活。 --> <jdk>1.7</jdk> <!--当匹配的操作系统属性被检测到,profile被激活。os元素可以定义一些操作系统相关的属性。 --> <os> <!--激活profile的操作系统的名字 --> <name>Windows XP</name> <!--激活profile的操作系统所属家族(如 'windows') --> <family>Windows</family> <!--激活profile的操作系统体系结构 --> <arch>x86</arch> <!--激活profile的操作系统版本 --> <version>5.1.2600</version> </os> <!--如果Maven检测到某一个属性(其值可以在POM中通过${名称}引用),其拥有对应的名称和值,Profile就会被激活。如果值字段是空的,那么存在属性名称字段就会激活profile,否则按区分大小写方式匹配属性值字段--> <property> <!--激活profile的属性的名称 --> <name>mavenVersion</name> <!--激活profile的属性的值 --> <value>2.0.3</value> </property> <!--提供一个文件名,通过检测该文件的存在或不存在来激活profile。missing检查文件是否存在,如果不存在则激活profile。另一方面,exists则会检查文件是否存在,如果存在则激活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 默认处理策略

优先级

示例

描述

最短路径优先 A->B->C->D1, E->F->D2,D1,D2 分别为 D 的不同版本 默认选择最短路径的那个 jar 包,即 D2。
最先声明优先 A->B->C1, E->F->C2  两个依赖路径长度都是 2,那么就选择最先声明的那个

Maven忽略单元测试 安装:clean install -Dmaven.test.skip=true

Maven 参数详情相关推荐

  1. 荣耀70 Pro+什么时候发布 荣耀70 Pro+配置参数详情

    荣耀数字系列一直都是主打线下的产品,在配置上不是很高,但随着荣耀70系列的曝光,这一系列的配置将有所改变,在性能配置上有很大的提升,那么,荣耀70 Pro+什么时候发布? 荣耀70 Pro+配置如何? ...

  2. Elasticsearch-analysis-pinyin7.6.0--可选参数详情

    Elasticsearch-analysis-pinyin7.6.0--可选参数详情 •keep_first_letter启用此选项时,例如:刘德华> ldh,默认值:true •keep_se ...

  3. 红米9A android版本,红米9A配置参数-参数详情

    红米9A一经上市就受到广大用户的喜欢,红米9a是一款入门级的手机"不是黑科技,但是良心机"是它的宣传语,那么在Redmi系列中拥有较高的性价比的"良心机"到底有 ...

  4. Mysql 配置文件 my.cnf 参数详情参考

    Mysql 配置文件 my.cnf 参数详情参考 参考地址:https://blog.csdn.net/qq_42768234/article/details/110089078 其中有些参数有待查询 ...

  5. 华为荣耀5a是android几,荣耀5A配置怎么样 荣耀畅玩5A参数详情

    6月12日下午,华为荣耀在北京召开新品发布会,正式发布了荣耀畅玩5系列5X.5C之后的第三款机型:荣耀5A,售价699元起.从发布会来看,荣耀5A性价比方面并不算特别抢眼,主要是在长续航.自拍方面表现 ...

  6. 苹果15手机价格和图片颜色 iphone15配置参数详情

    苹果15手机价格和图片颜色 iPhone 15ProMax 价格: 128GB 1199美元 256GB 1299美元 512GB的1499美元 1TB 1699美元 颜色:太空灰.银色.金色,绯红色 ...

  7. maven java 参数_将Maven参数注入Java类

    我想将settings.xml配置文件参数注入Java类.我尝试使用maven-annotation-plugin,但值为null.我想知道这是不是因为这个插件是为Mojo设计的 Setting.xm ...

  8. 设置maven 参数调休_IDEA 使用 Maven构建Spark项目

    上一篇讲了普通构建spark项目 这次分享用Maven构建Spark项目,中间遇到了很多坑!其根本原因是Scala 与 Spark的版本不一致! 本次环境: Java1.8 Scala 2.11.8 ...

  9. iphone7p配置参数详情_华为mate40标准版参数配置-参数详情

    华为mate40标准版距离我们越来越近了,小编也是为大家带来了华为mate40标准版参数配置详情相关信息,想了解的朋友一定不要错过了,跟着小编一起来看看吧. 华为mate40标准版参数配置详情 基本参 ...

最新文章

  1. 只用一张训练图像进行图像的恢复
  2. Sql Server函数全解三数据类型转换函数和文本图像函数
  3. 英特尔在移动芯片为何衰败 看完此文豁然开朗
  4. ASP.net 2.0 Migrating系列 - Master Pages 感触
  5. 随手正则写的 CSDN【只看楼主】功能
  6. 世界公认最好的记忆方法_毕业清单日签 I 世界公认最好的学习方法,没有之一。...
  7. tp5 php7 报500,记一次TP单元测试报500错误的问题
  8. 基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则
  9. [2020.11.3NOIP模拟赛]选数字【容斥】
  10. python网络爬虫的学习
  11. 【Spring框架】全集详解
  12. PHP接入芝麻信用续。
  13. Spotfire 使用IronPython脚本
  14. c++病毒代码(附源码)
  15. WPF应用无法使用Snoop分析的解决办法
  16. 16进制颜色代码对照表
  17. 爬虫 裁判文书网爬取part2
  18. 电脑如何关闭全屏开始屏幕
  19. 荣耀成为华为手机海外出货量增长发动机,小米已不是对手
  20. 密码基础知识(3)---对称密码体制

热门文章

  1. 阿里云ACP认证适合什么样的人考?
  2. 月报总结|Moonbeam 7月份大事一览
  3. 欢迎大家加入Xcode公社
  4. wps里面如何使用计算机,wps表格中怎么在多行之间每行插一行?
  5. Audified U73b 复古压缩器评测:带来复古温暖的色彩
  6. 五险一金 社保基数 住房公积金基数以及个税(By FlyElephant)
  7. Jieba分词并去停用词
  8. java rds 数据库_JDBC(java数据库连接)和阿里云RDS数据库
  9. 微信办公时代,企业文化也能撑起企业的半壁江山?
  10. 菜鸟Axios学习=官网