Maven核心概念学习
2017-11-09 19:16
281 查看
①POM
POM 含义:Project Object Model 项目对象模型 pom.xml文件是一个Maven项目的核心配置文件,该配置文件包含了大部分的构建一个项目所需要的信息。可以说学习 Maven 就是学习 pom.xml 文件中的配置。
②约定的目录结构
src/main/java: 存放项目的java文件。
src/main/resources: 存放项目的资源文件,如spring,hibernate的配置文件。
src/test/java:
存放所有的测试的java文件。
src/test/resources:
存放测试用的资源文件。
target: 项目输出位置。
pom.xml: 配置文件
现在 JavaEE 开发领域普遍认同一个观点:约定>配置>编码。意思就是能用配置解决的问题就不编码,能基于约定的就不进行配置。而 Maven 正是因为指定了特定文件保存的目录才能够对我们的 Java 工程进行自动化构建。
③坐标
使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。
[1]groupid:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称<
4000
br />
[3]version:当前模块的版本
如何通过坐标到仓库中查找 jar 包?
[1]将 gav 三个向量连起来
com.atguigu.maven+Hello+0.0.1-SNAPSHOT
[2]以连起来的字符串作为目录结构到仓库中查找
com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar
※注意:我们自己的 Maven 工程必须执行安装操作才会进入仓库。安装的命令是:mvn install
④依赖管理
Maven中最关键的部分,我们使用 Maven最主要的就是使用它的依赖管理功能。要理解和掌握 Maven的依赖管理,我们只需要解决一下几个问题:
1.依赖的目的是什么
当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。那么如何在项目中以依赖的方式引入一个我们需要的 jar 包呢?
即 A—需要—》B中的类,则A—依赖—》B
使用 dependency 标签指定被依赖 jar 包的坐标就可以了。
dependencies和dependency
前者包含后者,并且,Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency。
2.依赖的范围
大家注意到上面的依赖信息中除了目标 jar 包的坐标还有一个 scope 设置,这是依赖的范围。依赖的范
围有几个可选值,我们用得到的是:compile、test、provided 三个。
compile: 对主程序有效 对测试程序 有效参与打包
test: 对主程序无效 对测试程序有效 不参与打包 典型:junit(主程序看不见test类型依赖)
provided:对主程序有效 对测试程序有效 不参与打包 不参与部署
也就是说定义不同依赖范围,那么在不同的运行环境下就会显示不同的依赖结果,如junit的scope是test,那么主程序中就无法依赖这个junit,类似于一个权限修饰符。
而provided
比较特殊,在开发阶段是由Maven提供依赖类库,但是在项目部署时,就是由Severlt容器提供
3.依赖的传递性
A 依赖 B,B 依赖 C,A 能否使用 C 呢?那要看 B 依赖 C 的范围是不是 compile,如果是则可用,否则不
可用。
A—需要—》B中的类,则B—依赖compile—》C
A—需要—》B中的类,则B—依赖test—》C
A—需要—》B中的类,则B—依赖provided—》C
4.依赖的排除
如果我们在当前工程中引入了一个依赖是 A,而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当
前工程,但是个别情况下 B 有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A 的时
候将 B 排除。
对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提取出来
统一声明版本号,利用资源标签 <properties>
或者
⑤仓库管理
本地仓库:为当前本机电脑上的所有 Maven 工程服务。
远程仓库:
(1)私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
(2)中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
(3)中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力
官方下载的本地仓库的配置在"%MAVEN_HOME%\conf\settings.xml"里面,找一下"localRepository"就可以了;MyEclipse默认的本地仓库的地址在"{user.home}/.m2/repository"路径下,同样找一下"localRepository"就可以找到MyEclipse默认的本地仓库了。
本地仓库和远程仓库是这样的,Maven工程首先会从本地仓库中获取jar包,当无法获取指定jar包时,本地仓库会从远程仓库(中央仓库)中下载jar包,并放入本地仓库以备将来使用。
⑥生命周期
⑦插件和目标
⑧继承
⑨聚合
POM 含义:Project Object Model 项目对象模型 pom.xml文件是一个Maven项目的核心配置文件,该配置文件包含了大部分的构建一个项目所需要的信息。可以说学习 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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- 模型版本号 --> <modelVersion>4.0.0</modelVersion> <!-- 群组ID: 公司域名反写 --> <groupId>com.kiwi</groupId> <!-- 项目ID: 一个公司只有一个域名,但是可以有多个项目 --> <artifactId>One</artifactId> <!-- 版本号: 用于描述开发过程的阶段性标识--> <version>0.0.1-SNAPSHOT</version> <!-- 默认字符集 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- 依赖管理 --> <dependencies> <!-- 具体的依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> </dependencies> </project>
②约定的目录结构
src/main/java: 存放项目的java文件。
src/main/resources: 存放项目的资源文件,如spring,hibernate的配置文件。
src/test/java:
存放所有的测试的java文件。
src/test/resources:
存放测试用的资源文件。
target: 项目输出位置。
pom.xml: 配置文件
现在 JavaEE 开发领域普遍认同一个观点:约定>配置>编码。意思就是能用配置解决的问题就不编码,能基于约定的就不进行配置。而 Maven 正是因为指定了特定文件保存的目录才能够对我们的 Java 工程进行自动化构建。
③坐标
使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。
[1]groupid:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称<
4000
br />
[3]version:当前模块的版本
如何通过坐标到仓库中查找 jar 包?
[1]将 gav 三个向量连起来
com.atguigu.maven+Hello+0.0.1-SNAPSHOT
[2]以连起来的字符串作为目录结构到仓库中查找
com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar
※注意:我们自己的 Maven 工程必须执行安装操作才会进入仓库。安装的命令是:mvn install
④依赖管理
Maven中最关键的部分,我们使用 Maven最主要的就是使用它的依赖管理功能。要理解和掌握 Maven的依赖管理,我们只需要解决一下几个问题:
1.依赖的目的是什么
当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。那么如何在项目中以依赖的方式引入一个我们需要的 jar 包呢?
即 A—需要—》B中的类,则A—依赖—》B
使用 dependency 标签指定被依赖 jar 包的坐标就可以了。
<dependencies> <dependency> <groupId> com.test.maven </groupId> <artifactId> Hello </artifactId> <version> 0.0.1- - SNAPSHOT </version> <scope>compile</scope> </dependency> </dependencies>
dependencies和dependency
前者包含后者,并且,Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency。
2.依赖的范围
大家注意到上面的依赖信息中除了目标 jar 包的坐标还有一个 scope 设置,这是依赖的范围。依赖的范
围有几个可选值,我们用得到的是:compile、test、provided 三个。
compile: 对主程序有效 对测试程序 有效参与打包
test: 对主程序无效 对测试程序有效 不参与打包 典型:junit(主程序看不见test类型依赖)
provided:对主程序有效 对测试程序有效 不参与打包 不参与部署
也就是说定义不同依赖范围,那么在不同的运行环境下就会显示不同的依赖结果,如junit的scope是test,那么主程序中就无法依赖这个junit,类似于一个权限修饰符。
而provided
比较特殊,在开发阶段是由Maven提供依赖类库,但是在项目部署时,就是由Severlt容器提供
3.依赖的传递性
A 依赖 B,B 依赖 C,A 能否使用 C 呢?那要看 B 依赖 C 的范围是不是 compile,如果是则可用,否则不
可用。
A—需要—》B中的类,则B—依赖compile—》C
A—需要—》B中的类,则B—依赖test—》C
A—需要—》B中的类,则B—依赖provided—》C
4.依赖的排除
如果我们在当前工程中引入了一个依赖是 A,而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当
前工程,但是个别情况下 B 有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A 的时
候将 B 排除。
<dependency> <groupId>com.hello.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <type>jar</type> <scope>compile</scope> <exclusions> <exclusion> <groupId>org.apche.struts</groupId> <artifactId>struts2-core</artifactId> </exclusion> > </exclusions> </dependency>5.统一管理所依赖 jar 包的版本
对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提取出来
统一声明版本号,利用资源标签 <properties>
<properties> <自定义名称>4.1.1.RELEASE</自定义名称> </properties>引用前面声明的版本号
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version> ${自定义名称}</version> </dependency> </dependencies>
或者
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
⑤仓库管理
本地仓库:为当前本机电脑上的所有 Maven 工程服务。
远程仓库:
(1)私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
(2)中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
(3)中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力
官方下载的本地仓库的配置在"%MAVEN_HOME%\conf\settings.xml"里面,找一下"localRepository"就可以了;MyEclipse默认的本地仓库的地址在"{user.home}/.m2/repository"路径下,同样找一下"localRepository"就可以找到MyEclipse默认的本地仓库了。
本地仓库和远程仓库是这样的,Maven工程首先会从本地仓库中获取jar包,当无法获取指定jar包时,本地仓库会从远程仓库(中央仓库)中下载jar包,并放入本地仓库以备将来使用。
⑥生命周期
⑦插件和目标
⑧继承
⑨聚合
相关文章推荐
- Maven学习总结(4)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(4)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(4)——Maven核心概念
- Maven学习总结(4)——Maven核心概念
- Maven学习总结——理解maven的核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(21)——Maven常用的几个核心概念
- Maven学习总结(21)——Maven常用的几个核心概念
- Maven学习总结(17)——Maven常用的几个核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(4)——Maven核心概念
- maven的学习之核心概念(二)
- maven 学习总结(四)——Maven核心概念
- Maven学习笔记 -- day02 Maven整合struts2及Maven核心概念、添加插件
- Maven(三)之Maven核心概念
- 《项目管理利器Maven》学习(九):Maven核心之依赖管理