Maven笔记
Maven是一款服务于Java平台的构建工具,Maven可以将一个项目变为多个工程,还可以借助Maven以一种规范的形式去下载Jar包,以及Maven会自动导入依赖的Jar包。 其他构建工具 Make Ant Gradle 等等。
Maven 常用命令
mvn clean 清理 mvn compile 编译主程序 mvn test 执行测试程序 mvn test-compile 编译测试程序 mvn package 打包 mvn install 可以将自己的工程放到仓库中、安装 mvn site 生成站点 mvn deploy 部署 mvn help:system
Maven的一些配置
修改Maven本地仓库位置 找到Maven解压目录\conf\settings.xml 找到localRepository标签 将标签内容修改为准备好的Maven仓库位置 运行compile 命令会生成一个target目录 保存的是编译的结果 运行test-compile命令会在target下生成测试的生成结果 运行clean 会清理生成的文件夹 POM (Project Object Model) 项目对象模型 pom.xml 对于maven工程是核心文件 与构建过程相关的设置都在这个文件中进行配置 相当于web.xml对于动态web工程
Maven的坐标
使用下面三个向量在仓库中唯一定位一个Maven工程,是Maven管理jar包的统一规范。 groupid: 一般为公司或组织域名倒序+项目名
<groupid>vip.pilipala.maven</groupid>
artifactid: 模块名
<artifactid>Hello</artifactid>
version: 版本
<version>1.0.0</version>
例:
<groupid>org.springframework</groupid>
<artifactid>spring-core</artifactid>
<version>4.0.0.RELEASE</version>
对应关系 org/springframework.spriung-core/4.0.0RELEASE/spring-core-4.0.0.RELEASE.jar
Maven的仓库
仓库分类 本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务 远程仓库:私服:架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务。Nexus 中央仓库:架设在Internate上为世界上的Maven工程服务 中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度。 仓库中保存的内容: Maven工程 Maven自身所需要的插件 第三方框架或工具的jar包 我们自己开发的Maven工程
依赖
Maven解析依赖信息时会到本地仓库中寻找依赖jar包 自己开发的Maven工程使用mvn install 命令后会放入仓库
依赖的范围
compile 对主程序是否有效 有效 对测试程序是否有效 有效 是否参与打包 参与 是否参与部署 参与 test 对主程序是否有效 无效 对测试程序是否有效 有效 是否参与打包 不参与 是否参与部署 不参与 例:junit.jar provided 开发时需要开发时需要的环境 例:servlet-api.jar 对主程序是否有效 有效 对测试程序是否有效 有效 是否参与部署 不参与 是否参与打包 不参与
生命周期
各个构件环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。 Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。 Maven核心程序为了更好的实现自动化构建,按照这一特点执行生命周期中的各个阶段:不论现在要执行生命周期中的哪一个阶段都是从这个生命周期的最初位置开始执行。 插件和目标 生命周期的各个阶段仅仅定义了要执行的任务是什么。 各个阶段和插件的目标是对应的。 相似的目标由特定的插件来完成。
在eclipse里使用Maven插件
Maven插件:Eclipse内置 Maven插件的设置 installations:指定Maven核心程序的位置,不建议使用插件自带的Maven程序,推荐使用自己下载的。 user settings:指定conf/settings.xml的位置,设置本地仓库的位置。 基本操作 创建Maven版的java工程 创建Maven版的web工程 执行Maven命令 创建maven时的打包方式 war 是web工程 jar是java工程
注意事项
eclipse:ctrl+shift+t 可以查找jar包位置
jar包冲突会抛出异常
手动导入maven创建的工程 需要用Existing Maven Progects导入
Maven依赖的传递性
好处:可以传递的依赖不需要在别的工程中重复声明 注意:非compile范围的依赖不能传递,所以在各个工程模块中,如果有需要就的重复声明。
依赖排除
需要设置排除的场合 该jar包可能是不稳定版或者有其他原因 已离开排除的设置方式在pom.xml中设置
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
依赖的原则
作用:解决模块工程之间的jar包冲突问题 1.路径最短者优先 会选择离得最近得jar包 2.路径一样短得时候会选择先声明得优先 声明指的是dependency标签得声明顺序
Maven 统一管理依赖的版本号
可以使用properties标签内自定义标签统一声明
<properties>
<spring.version>4.0.0.RELEASE</spring.version>
</properties>
使用**${自定义标签名}**引用声明的版本号
<version>${spring.version}</version>
继承
1.由于test范围的依赖不能传递,所以可能照成各个模块工程中的版本不一致。 2.统一管理各个模块工程中对junit依赖的版本 3.思路 将junit依赖统一提取到父工程中,在子工程中声明junit依赖时不指定版本,以父工程设定的为准,也便于修改。 4.操作步骤 创建一个Maven工程作为父工程,打包方式为pom 在子工程中声明对父工程的引用
<parent>
<groupId>vip.pilipala.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--以当前工程文件为基准父工程pom.xml文件的相对路径-->
<relativePath>../Parent/pom.xml</relativePath>
</parent>
将子工程的坐标与父工程坐标中重复的内容删除 在父工程中统一junit的依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
在子工程中删除junit依赖的版本号部分
聚合
作用:一键安装各个模块工程 配置聚合 在一个 总的聚合工程中配置各个参与聚合的模块
<modules>
<module>../工程一</module>
<module>../工程二</module>
<module>../工程三</module>
</modules>
使用方式 在聚合工程的pom.xml上右键 - run as - maven install