一 : pom文件 由下面四个部分组成
1 项目基本信息:这个配置会指导maven构建出相应的组件,并把他存在maven资源库中
2 构建配置:<build>中包含执行maven构建周期目标所需要的插件及相应配置,要配置构建插件,需要把它放在pom.xml文件的<build><plugins>中。
3 依赖管理:<dependencies> maven可以帮你管理这些依赖项,这些第三方类库都有它们自己的pom.xml文件,会声明各自的依赖项,maven可以据此找出任何需要下载的其他类库。这些依赖项一开始主要分为两个作用域(compile和test)设置作用域跟把jar文件放在classpath下是一样的效果。
设置<scope>设置为compile会把这些jar加到classpath中用于代码的编译,设置为test会在maven编译和运行测试时把这些jar加到classpath,可以通过搜索https://search.maven.org/
4 环境配置:<profiles>可以有效处理不同环境下的构建,可以执行maven时用-P <id> 可以指定要启用的环境配置。
可以使用mvn help:active-profiles。查看当前激活的profile都有哪些
二 maven构建周期目标
1:mvn clean 会删除target目录
2:mvn compile 编译后的类最终会出现在target/classes目录下,包括java源文件和resources目录资源文件
3:mvn test 在这一阶段,test目录下的测试类还没有编译,可以通过mvn test来进行编译
4:mvn install 这个阶段是打包阶段,把打包好的模块安装到本地maven资源库中,以便其他项目可以把它当做依赖项。
三: Maven依赖介绍
1、依赖传递在选择版本的时候首先是根据深度选择的
当一个项目同时经过不同的路径依赖于同一个组件时,会选择其深度最短的对应组件进行依赖。举例来说,假设A->B->C->D1.0,A->E->D2.0,那么这个时候A就会选择对D相对路径短的组件来进行依赖,也就是D2.0。那么当深度一样的时候Maven会如何选择呢?即A->B->D1.0和A->C->D2.0,这个时候Maven会如何选择A所依赖的D的版本呢?这种情况Maven会根据申明的依赖顺序来进行选择,先申明的会被作为依赖包。向前面这种情况,如果先申明对B的依赖,则A依赖的就是D1.0,如果先申明对C的依赖,则A依赖的就是D2.0。
2、使用exclusion排除依赖
A不需要B中C的依赖时,就可以通过下面的方式
- <dependency>
- <groupId>groupB</groupId>
- <artifactId>artifactB</artifactId>
- <version>1.0</version>
- <exclusions>
- <exclusion>
- <groupId>groupC</groupId>
- <artifactId>artifactC</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
3、可选的依赖项
可选的依赖项表示可有可无,不一定需要的,它只是做一个标记<optional>,这个标记对本身没有什么影响,对于其他的项目相当与exclusion
- <project>
- <groupId>groupB</groupId>
- <artifactId>artifactB</artifactId>
- <version>1.0</version>
- <dependencies>
- <dependency>
- <groupId>groupC</groupId>
- <artifactId>artifactC</artifactId>
- <version>1.0</version>
- <optional>true</optional>
- </dependency>
- ...
- </dependencies>
- </project>
四: 依赖项的作用域
我们可以通过scope来指定该依赖项的作用范围。scope的取值有compile、runtime、test、provided、system和import。
compile:这是依赖项的默认作用范围,即当没有指定依赖项的scope时默认使用compile。compile范围内的依赖项在所有情况下都是有效的,包括运行、测试和编译时。
runtime:表示该依赖项只有在运行时才是需要的,在编译的时候不需要。这种类型的依赖项将在运行和test的类路径下可以访问。
test:表示该依赖项只对测试时有用,包括测试代码的编译和运行,对于正常的项目运行是没有影响的。
provided:表示该依赖项将由JDK或者运行容器在运行时提供,也就是说由Maven提供的该依赖项我们只有在编译和测试时才会用到,而在运行时将由JDK或者运行容器提供。
system:当scope为system时,表示该依赖项是我们自己提供的,不需要Maven到仓库里面去找。指定scope为system需要与另一个属性元素systemPath一起使用,它表示该依赖项在当前系统的位置,使用的是绝对路径。
五、集中管理依赖项:集中管理项目的依赖项,控制版本
projectA项目
- <project>
- <groupId>groupA</groupId>
- <artifactId>artifactA</artifactId>
- <version>1.0</version>
- <dependencies>
- <dependency>
- <groupId>groupC</groupId>
- <artifactId>artifactC</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>groupD</groupId>
- <artifactId>artifactD</artifactId>
- <version>1.0</version>
- </dependency>
- </dependencies>
- ...
- </project>
projectB项目
- <project>
- <groupId>groupB</groupId>
- <artifactId>artifactB</artifactId>
- <version>1.0</version>
- <dependencies>
- <dependency>
- <groupId>groupC</groupId>
- <artifactId>artifactC</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>groupE</groupId>
- <artifactId>artifactE</artifactId>
- <version>1.0</version>
- <type>bar</type>
- </dependency>
- </dependencies>
- ...
- </project>
projectA和projectB项目共同依赖project,可以创建一个projectP
- <project>
- ...
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>groupC</groupId>
- <artifactId>artifactC</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>groupD</groupId>
- <artifactId>artifactD</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>groupE</groupId>
- <artifactId>artifactE</artifactId>
- <version>1.0</version>
- <type>bar</type>
- </dependency>
- </dependencies>
- </dependencyManagement>
- ...
- </project>
projectA
- <project>
- <modelVersion>4.0</modelVersion>
- <groupId>groupA</groupId>
- <artifactId>artifactA</artifactId>
- <version>1.0</version>
- <dependencies>
- <dependency>
- <groupId>groupC</groupId>
- <artifactId>artifactC</artifactId>
- </dependency>
- <dependency>
- <groupId>groupD</groupId>
- <artifactId>artifactD</artifactId>
- </dependency>
- </dependencies>
- ...
- </project>
projectB
- <project>
- <modelVersion>4.0</modelVersion>
- <groupId>groupB</groupId>
- <artifactId>artifactB</artifactId>
- <version>1.0</version>
- <dependencies>
- <dependency>
- <groupId>groupC</groupId>
- <artifactId>artifactC</artifactId>
- </dependency>
- <dependency>
- <groupId>groupE</groupId>
- <artifactId>artifactE</artifactId>
- <!--因为artifactE的类型不是默认的jar,所以这里需要指定依赖项的类型-->
- <type>bar</type>
- </dependency>
- </dependencies>
- ...
- </project>
我们可以只在projectA和projectB中申明需要使用的依赖项,而不必指定其对应的版本和作用范围等信息
相关推荐
Maven3是一个强大的Java项目管理工具,由Apache软件基金会开发,它极大地简化了构建、管理和依赖项解析过程。在"apache-maven-3.0.4"这个版本中,包含了Maven的核心功能和相关文档,为开发者提供了一个稳定且高效的...
本文将深入探讨如何利用Maven构建多模块项目,以及在实际操作中需要注意的关键点。 1. Maven多模块项目结构: Maven多模块项目通常遵循一个标准的目录结构,包括一个顶级父 pom.xml(如test-hd-parent),和若干子...
3. **优化构建**: 可以通过配置Maven的内存参数,如`-Xms`和`-Xmx`,提高构建性能。 通过以上步骤,你应该能够成功地构建和管理一个Maven项目。记住,Maven的核心理念是"约定优于配置",所以尽可能遵循其标准约定,...
【Maven构建的分布式demo】 在现代软件开发中,分布式系统已经成为主流,它能提高系统的可扩展性、容错性和性能。Maven作为Java项目管理工具,为构建分布式应用程序提供了强大的支持。本篇将深入探讨如何利用Maven...
3. **Maven**:Maven是一个Java项目管理工具,它通过POM文件管理项目的构建、报告和文档。Maven提供了标准化的构建过程,并通过依赖管理和项目信息管理简化项目的构建过程。 4. **POM(Project Object Model)**:...
3. **Maven 配置文件**: - Maven 的全局配置文件位于 Maven 安装目录下的 `conf/settings.xml`,而用户级别的配置文件通常在 `C:\Documents and Settings\%username%\.m2` 目录下(Windows XP 系统),其中 `%...
3. **依赖管理(Dependency Management)**: Maven通过POM自动管理项目依赖,避免了类库冲突,提高了开发效率。 4. **插件(Plugins)**: Maven通过插件执行构建任务,如编译、测试、打包、部署等。每个插件都有一...
Apache Maven是Java开发领域广泛应用的一款项目管理工具,它基于项目对象模型(Project Object Model, POM)的概念,能够自动化构建、依赖管理和项目信息管理。在本文中,我们将深入探讨Maven 3.9.6这一版本,以及它...
**eclipse-maven3-plugin** 是一个专门为 Eclipse IDE 设计的插件,它允许开发者在 Eclipse 开发环境中无缝集成 Maven 构建工具。Maven 是一个项目管理和综合工具,广泛用于 Java 应用程序的构建、依赖管理和项目...
【构建Maven项目在Eclipse中的实践】 在Java开发领域,Maven是一个广泛使用的项目管理和构建自动化工具,它简化了依赖管理和构建流程。Eclipse作为流行的Java集成开发环境(IDE),通过集成Maven插件m2eclipse,...
详细 介绍 了如何使用Maven插件构建Docker镜像的步骤。
本文将深入探讨Maven 3的核心特性、安装配置、以及如何利用它进行项目的构建与管理。 ### 1. Maven 3 的核心特性 - **项目对象模型 (Project Object Model, POM)**:Maven 使用POM来描述项目信息,包括依赖、构建...
利用maven构建spring boot,使用jpa访问oracle数据,实现rest方式的webservice,实现了简单的例子,浏览器可以直接访问,返回json格式数据,下载之后,可以直接使用,在本地已经测试成功。
在使用Maven构建Kettle项目时,我们需要确保正确配置Maven的POM.xml文件,以包含所有必要的依赖项,这些依赖项通常是以jar包的形式存在。"Kettle Maven jar"标签提示我们,这里涉及的是Kettle与Maven结合使用时所需...
3. Maven 依赖管理 Maven 的强大之处在于其强大的依赖管理。在 POM 文件中声明所需库,Maven 会自动下载并管理这些依赖,避免了版本冲突的问题。例如,在 "hello-world" 项目中,可能需要导入 Servlet API 或其他库...
1. **Maven 3.0.5**: Maven 3.0.5 是 3.x 系列的早期版本,引入了对 Java 7 的支持,并且增强了多模块项目的构建效率。此外,此版本改进了依赖管理和插件执行策略。 2. **Maven 3.1.1**: Maven 3.1.1 增加了对 ...
1. **并行构建**:Maven3引入了并行构建的概念,提高了构建速度,尤其对于大型项目,可以显著减少构建时间。 2. **更好的错误报告**:提供了更详细的错误信息和更友好的输出,帮助开发者更快定位问题。 3. **增强...
【 Maven3:构建Java项目的强大工具】 Maven3是一个广泛使用的Java项目管理工具,由Apache软件基金会开发。它简化了构建、依赖管理和项目文档的生成,使得开发人员能够更高效地进行软件开发工作。Maven3的核心理念...