学习时笔记,方法自己用时可查阅
一,pop.xml编写
1,在pop.xml中以下四个是基本的元素
modelVsersion 这个在maven2及3来说一般只能是4.0.0
groupId 一般为工程名
artifactId 工程模块名
version 项目版本
二,代码目录强制规定
主代码 : src/main/java/ 包名一般与groupId和artifactId相吻合
主代码资源文件 : src/main/resources/ 放如果properties文件等
默认web资源 : src/main/webapp/ 放jsp,html,css
测试代码 :src/test/java/ 包名一般与groupId和artifactId相吻合
测试代码码资源文件 :src/test/resources
三,maven的主要命令
1,常用
mvn clear
mvn test
mvn clear test
mvn compile
mvn clear compile
mvn package
mvn package install 当install比package多一个打包安装到本地仓库中
2, 生成项目骨架
maven 3
mvn archetype : generate
maven 2
mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate
实际上运行的是 groupId:artifactId:version:generate
... ...
... ...
知识扩展: 按需构建多模块,玩转Maven反应堆
四,依赖关系
1,dependencies结点下dependencie中包含的元素
groupId,artifactId,version:这三个不再多说
type : 依赖的类型,对应项目坐标定义的packaging。大部分情况下,该元素不必声明 ,其默认值 为jar
scope : 依赖的范围
optional : 标记依赖是否可选
exclusions : 用来排队传递性依赖
2,依赖范围(用来控制依赖和三种classpath[编译,测试,运行])
Compile : 编译依赖范围,如果没有指定,则默认为此范围,且对于编译,测试,运行三种classpath都有效
Test : 这种依赖仅对于测试classpath有效。eg: JUnit
Provided : 己提供依赖范围,使用此依赖范围的Maven依赖,仅对于编译和测试classpath有效。eg:serlet-api
Runtime : 运行时依赖。这种依赖对于测试和运行有效。eg: JDBC驱动
System : 系统依赖。这种与Provided范围完全相同,但使用System范围的依赖时必须通过systemPath元素显示地指定 依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且住住与本机系统绑定,可能造成不可移植,因 此应该谨慎使用。systemPath元素可以引用环境变量 需另加:<systemPath>${java.home}/lib/rt.jar</systemPath>
依赖范围 | 编译 | 测试 | 运行 | 例子 |
compile | Y | Y | Y | spring-core |
test | - | Y | - | JUnit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | JDBC驱动 |
system | Y | Y | - | 本地,maven之外的文件 |
3,传递性依赖 【坚列为第一依赖关系,横项为第二依赖关系,交叉为传递关系】
compile | test | provided | runtime | ||
compile | compile | - | - | runtime | |
test | test | - | - | test | |
provided | provided | - | provided | provided | |
runtime | runtime | - | - | runtime |
4,依赖调解 (不同依赖可能引用相同jar包的不同版本,所以maven要排除情况【下面优先级从高到低】)
4.1,路径优先原则(最短原则)
4.2, 第一声明优先(pop.xml中依赖声明顺序,此只适用2.9级以后版本,以下的版本不确定)
5,可选依赖
定意 :项目A依赖于项目B,B依赖于项目C、D但对于C、D的依赖都是可选依赖,那么C、D对A没有任何影响。
出现原因 :可能项目B实现了两种特性,一种依赖于C一种依赖于D,但是C与D的特性是互斥的,所以要配制可选。
pop配制 :<optional>true</optional>
6,排除依赖
原因 : 可能项目有一个第三方依赖,而第三方依赖由于某些原因依赖了另外一个库的不稳定版本,这个不稳定版本可能 对项目产生不可预料的结果,所以要排除这个依赖。
pop 配制 : <exclusions> <exclusion> <groupId>xxx</groupId><artifactId>xxxx</artifactId> </exlusion></exlusions>
7,归类依赖
有些包的依赖它们来自同一项目的不同模块,因此它们的版本是一样的。所以可以考虑用
<properties> <struts.version>2.6</struts.version></properties> ${struts.version} 等来统一版本号
8,优化依赖
查看当前项目己解析的依赖:mvn dependency:list
查看项目的依赖树 :mvn dependency:tree
分析当前项目依赖 :mvn dependency:analyze
打开maven的调式标记 :mvn install -X
====================2013=============================================
1,插件帮助信息
1.1.1使用help:describe 目标来获取Maven插件的信息。通过 plugin 参数你可以指定你想要研究哪个插件,你可以传入插件的前缀(如help 插件就是 maven-help-plugin),或者可以是 groupId:artifact[:version] ,这里 version 是可选的。比如, 下面的命令使用 help 插件的 describe 目标来输出Maven Help 插件的信息。
mvn help:describe -Dplugin=help
1.1.2 如果你想要 Help 插件输出完整的带有参数的目标列表,只要运行带有参数
full 的 help:describe 目标就可以了,像这样:
mvn help:describe -Dplugin=help -Dfull
1.1.3 有时候这些信息显得太多了。这时候你可以获取单个目标的信息,设置 mojo 参数和 plugin 参数。下面的命令列出了Compiler 插件的 compile 目标的所有信息
$ mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull
1.2maven基本插件用法
1.2.1设置插件参数表达式
testFailureIgnore Set this to true to ignore a failure during testing. Its use * Type: boolean * Required: No * Expression: ${maven.test.failure.ignore}
这个表达式可以从命令行通过 -D 参数设置。
$ mvn test -Dmaven.test.failure.ignore=true
1.2.2想要配置 Maven 使其完全跳过单元测试。 可能你有一个很大的系统,单元测试需要花好多分钟来完成,而你不想在生成最终输出前等单元测试完成。只需要使用 Surefire 插件的 skip 参数。 在命令行,只要简单的给任何目标添加maven.test.skip 属性就能跳过测试:
$ mvn install -Dmaven.test.skip=true ... [INFO] [compiler:testCompile] [INFO] Not compiling test sources [INFO] [surefire:test] [INFO] Tests are skipped.
pom.xml配制
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build>
1.2.3如果你正在实践测试驱动开发(TDD),你可能会使用测试失败来衡量你离项目完成有多远。 如果你有失败的单元测试,但你仍然希望产生构建输出,你就必须告诉 Maven 让它忽略测试失败。 当Maven 遇到一个测试失败,它默认的行为是停止当前的构建。 如果你希望继续构建项目,即使 Surefire 插件遇到了失败的单元测试,你就需要设置 Surefire 的testFailureIgnore 这个配置属性为 true。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin> </plugins> </build>
2,pom关于配制数据连接与资源管理信息
2.1 指定maven编译版本与开启pom文件中配制数据库连接
<build> <!-- build后的war包名,如果没写则 artifactId.version.packaging --> <finalName>practice</finalName> <resources> <resource> <directory>src/main/resources</directory> <!-- 这里默认为false,为true时才支持pom.xml文件中配制数据连接信息生效 --> <filtering>false</filtering> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> <filtering>false</filtering> </testResource> </testResources> <!-- 编译版本 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> <pluginManagement> <plugins> <!--支持src/main/resouces下的二进制文件复制 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <nonFilteredFileExtensions> <nonFilteredFileExtension>dll</nonFilteredFileExtension> <nonFilteredFileExtension>so</nonFilteredFileExtension> <nonFilteredFileExtension>dylib</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin> </plugins> </pluginManagement> </build>
<build> <resources> <resource> <!-- 此处可指定自定义的资料文件路径 --> <directory>src/main/java</directory> <filtering>false</filtering> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources> </build>
相关推荐
### 黑马Maven笔记第二天知识点总结 #### Maven的核心优势 **1. 统一管理JAR包** - **节省空间**:Maven通过中央仓库管理所有项目的依赖,避免了重复下载相同JAR包的问题,有效减少了硬盘空间的占用。 - **依赖...
### 黑马Maven笔记详解 #### Maven简介与特点 Maven是一款强大的项目管理和构建工具,作为Apache基金会下的一个开源项目,它完全采用Java语言编写,主要用于管理Java项目。Maven通过标准化项目构建过程和依赖管理...
Maven的安装: (首先保证JDK版本在1.6以上) 1: 通过配置MAVEN_HOME 和 %% %MAVEN_HOME%\bin 然后进行mvn -version 测试 掌握 -Xms 与 -Xmx的相关配置 2: Maven目录分析: 2.1: bin: 含有mvn运行的脚本 2.2...
### Maven核心知识点解析 #### Maven概述与价值 Maven是一个项目管理和综合工具,主要用于Java项目的构建、依赖管理和项目信息管理。通过Maven,开发者可以轻松地处理项目中的多个痛点问题,提升开发效率。 #####...
【标题】:“maven笔记:maven-overlay-实战笔记” 在 Maven 的世界里,"overlay" 是一个重要的概念,主要用于Web项目的构建和部署。Maven overlay 技术允许你将多个项目的输出“重叠”在一起,形成一个新的项目,...
【标题】"maven笔记t-JavaWeb"主要聚焦于Java Web开发中Maven的使用,这是一套关于Maven的教程,旨在帮助开发者理解和掌握这个强大的构建工具。Maven是Apache软件基金会的一个项目,它简化了Java项目的构建、管理和...
** Maven 概述 ** Maven 是一个强大的项目管理和构建工具,主要应用于Java项目。它通过提供一套标准化的构建过程,使得项目的...通过学习Maven笔记,开发者可以更好地掌握这一强大的工具,提升项目开发的专业水平。
【Maven笔记】 Maven是一个强大的Java项目管理工具,它主要解决了在软件开发过程中遇到的一系列问题,如依赖管理、项目构建以及环境一致性等。通过使用Maven,开发者可以更高效地管理和构建Java项目,避免手动复制...
**Maven笔记(2)-- 构建Java Project 及 Maven命令使用** Maven是Apache组织开发的一个项目管理和综合工具,主要用于Java项目构建、依赖管理和项目信息管理。它通过一个统一的构建过程,使得项目的构建变得简单且...
**Maven笔记** Maven是Apache组织开发的一款Java项目管理工具,它的主要功能包括项目构建、依赖管理和仓库管理。Maven使得Java开发更加规范和高效,尤其在大型团队协作中,能够有效地解决版本冲突和自动化构建的...
【尚硅谷Maven课程笔记代码资源】是一份全面学习Maven的资料集合,它涵盖了从基础到高级的各种知识点,旨在帮助开发者深入理解并熟练运用Maven进行自动化构建。该资源包含课件、源码和相关的笔记,使得学习过程更加...
压缩包中的"笔记"和"资料"文件可能包含更深入的Maven教程、最佳实践、常见问题解答和案例研究等内容。学习这些资料有助于提升你在实际项目中的Maven应用能力,解决遇到的问题,并优化构建流程。 综上所述,Maven是...
maven学习笔记maven学习笔记maven学习笔记
** Maven详解:构建Java项目的专业工具 ** Maven是一个基于项目对象模型(Project Object Model,POM)的概念,用于管理并构建Java项目。它通过一个简单的配置文件(pom.xml),自动化项目的构建、报告和依赖管理,...
Maven笔记,内包含Maven核心程序解压和配置,命令行环境,IDEA环境,jar包3下载失败问题的解决方案
Maven 是 Java 项目中一种流行的构建工具,能够帮助开发者更好地管理项目依赖关系、编译、打包和发布。下面是 Maven 的一些知识点: 1. Maven 的必要性:Maven 之所以需要,是因为在没有 Maven 之前,开发者需要...
【Maven笔记1】—— Maven入门 Maven是一款强大的Java项目管理和构建工具,它解决了传统项目构建中的诸多痛点,使得Java开发变得更加规范和高效。在本文中,我们将深入探讨Maven的基本概念、功能以及如何解决上述...