一、Maven概述
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven作用:
1.项目构建:提供标准的、跨平台的自动化项目构建方式。
2.依赖管理:方便快捷的管理项目依赖资源包(jar),避免资源间的版本冲突问题。
3.统一开发结构:提供标准的、统一的项目结构。
仓库:用于存储资源,包含各种jar包。
1.仓库分类
本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源。
远程仓库:非本机电脑上的仓库,为本地仓库提供资源。
中央仓库:Maven团队维护,存储所有资源的仓库。
私服:部门/公司范围内存储资源的常客,从中央仓库获取资源。
私服的作用:
保存具有版权的资源,包含购买或者自主研发的jar。(中央仓库中的jar都是开源的,不能存储具有版权的资源。)
一定范围内共享资源,仅对内部开放,不对外共享。
2.坐标
Maven中的坐标是用于描述仓库中资源的位置。
Maven中坐标主要组成:
groupId:定义当前Maven项目隶属于组织名称。(通常是域名反写,例如:org.mybatis)。
artifactId:定义当前Maven项目名称。(通常是模块名,例如:SMS)。
version:定义当前项目版本号。
packaging:定义改姓名的打包方式。
Maven坐标的作用:
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工种交给计算机完成。
3.本地仓库的位置配置。
Maven启动后,会自动保存下载的资源到本地仓库。
默认位置:当前目录位置位于,登录用户名所有目录下.m2文件夹中。
<localRepository>${user.home}/.m2/repository</localRepository>
自定义位置:当前目录位置位于,D:\maven\repository文件夹中。
<localRepository>D:\maven\repository</localRepository>
4.远程仓库位置配置
<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
镜像仓库配置:可以在setting文件中配置阿里云镜像仓库。
<mirrors> <!-- 配置具体的仓库的下载镜像--> <mirror> <!-- 此镜像的唯一标识,用于区分mirror元素 --> <id>nexus-aliyun</id> <!--对哪种仓库进行镜像,简单说就是替代哪个仓库 --> <mirrorOf>central</mirrorOf> <!-- 镜像名称--> <name>Nexus aliyun</name> <!-- 镜像URL --> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>
二、IDEA创建Maven项目
1.依赖管理
依赖配置:依赖指当前项目运行所需的jar,一个项目可以设置多个依赖。
<dependencies> <!-- 在这里添加你的依赖 --> <dependency> <groupId>ldapjdk</groupId> <!-- 库名称,也可以自定义 --> <artifactId>ldapjdk</artifactId> <!--库名称,也可以自定义--> <version>1.0</version> <!--版本号--> <scope>system</scope> <!--作用域--> <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath> <!--项目根目录下的lib文件夹下--> </dependency> </dependencies>
依赖传递:依赖具有传递性。
直接传递:在当前项目中通过依赖配置建立依赖关系。
间接传递:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源。
依赖传递冲突问题:
路径优先:当依赖中出现相同的资源时,层级越深,优先级越低、层级越浅,优先级越高。
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的。
可选依赖:指对外隐藏当前所依赖的资源——不透明。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <!--true资源可以隐藏--> <optional>true</optional> </dependency>
排除依赖:指主动断开依赖的资源,被排除的资源无需指定版本——不需要该jar包
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <exclusions> <exclusion> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </exclusion> </exclusions> </dependency>
依赖范围:依赖jar默认情况下可以在任何地方使用,可以通过scope标签来设定范围。
作用范围:
主程序范围有效(main文件夹范围内)。
测试范围有效(test文件夹范围内)。
是否参与打包(package指令范围内)。
依赖范围传递:带有依赖范围的资源在进行传递时,作用范围将受到影响。
2.生命周期与插件。
生命周期:每个生命周期的各个环节都是由各种插件完成。Maven有三个相互独立的生命周期(Maven的这三个生命周期不能看成一个整体)。
- mvn clean:清理编译的项目。
- mvn compile:编译项目。
- mvn test:测试项目(运行测试类)。
- mvn package:负责将我们的项目打包。
- mvn install:将这个项目安装到仓库中 。
Clean生命周期(Clean Lifecycle)
Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Clean生命周期一共包含了三个阶段:
pre-clean 执行一些需要在clean之前完成的工作。
post-clean 执行一些需要在clean之后立刻完成的工作。
Default生命周期(Default Lifecycle)
Default Lifecycle是构建的核心部分,编译,测试,打包,部署等等,Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。
一些比较重要和常用的阶段:
compile 编译项目的源代码
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享
process-test-resources 复制并处理资源文件,至目标测试目录
process-resources 复制并处理资源文件,至目标目录,准备打包
test-compile 编译测试源代码
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署
package 接受编译好的代码,打包成可发布的格式,如 JAR
Site生命周期(Site Lifecycle)
Site Lifecycle 生成项目报告,站点,发布站点,站点的文档(站点信息,依赖..)。
pre-site 执行一些需要在生成站点文档之前完成的工作。
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备。
site-deploy 将生成的站点文档部署到特定的服务器上。
插件:
例如:Tomcat7运行插件
<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>80</port> <path>/</path> </configuration> </plugin> </plugins> </build>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。