赞
踩
Maven是一款服务于Java平台的自动化构建工具
构建:
[1]原理:基于Java源文件、HTML页面、图片等基础信息动态合成一个运行的项目的过程
[2]过程:清理➟编译➟测试 ➟报告 ➟打包 ➟安装 ➟部署
清理:将旧的编译class文件删除
编译:将Java源码编译成Class文件
测试:自动调用Junit程序测试
报告:测试结果
打包:动态WEB工程打成war包,Java工程打成jar包
安装:Maven中将打包得到的文件复制到“仓库”中指定位置
部署:将动态web工程生成的war包复制到Servlet容器中运行
1、Maven的下载
官网地址:https://maven.apache.org/download.cgi2、具备运行时环境
3、查看maven的版本
4、Maven仓库的下载
新建文件夹repmaven(maven—repository),可以放在解压的maven文件下,或者其他目录(记住目录路径)
进入maven目录conf配置setting.xml
添加repmaven路径,即仓库位置
为了增加下载速度,可以利用国内阿里的镜像文件下载
分别配置id、mirrorOf、name、url四个标签里面的内容
ps:切记要把blocked去掉否则下一步执行报错
进入cmd输入mvn help:system,出现以下截图内容成功
5、IDEA中Maven的配置
6、新建一个Maven项目
7、执行Maven命令
执行与构建过程相关的Maven命令,必须进入到pom.xml所在的目录
与构建过程相关:编译、测试、打包……
常用命令:
一般下载到本地家目录中的是Maven核心程序,但是有时需要用到Maven的一些特定插件,在本地核心程序无法找到插件程序时,会自动连接外网到中央仓库下载。如果此时无法连接外网,则构建失败!
1. 约定目录结构
2. POM
3. 坐标
4. 依赖
5. 仓库
6. 生命周期/插件/目标
7. 继承
8. 聚合
1、约定目录结构
[1]根目录:工程名
[2]src目录:源码
[3]pom.xml文件:Maven工程核心配置文件
[4]main目录:存放主程序
[5]test目录:存放测试程序
[6]java目录:存放Java源文件
[7]resource目录:存放框架或者其他工具配置文件
2、目录结构的重要性
自动化构建中若是目录结构混乱不统一,Maven无法实现识别源文件,无法进行自动化配置
约定 > 配置 > 编码
[1]含义:Project Object Model 项目对象模型
例如:DOM Document Object Model 文档对象模型
[2]pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置
例如:web.xml对于WEB工程的作用
使用三个向量在仓库中唯一定位一个Maven工程
[1]groupid:公司或组织域名倒叙+项目名
[2]artifactid:模块名
[3]version:版本
gav坐标和仓库的关系
举个栗子:
<groupId>org.apache.commons</groupId>
<artifactId> commons-lang3</artifactid>
<version>3.7</version>
对应目录结构:org\apache\commons\commons-lang3\3.7\commons-lang3-3.7.jar(jar包的命名=artifactid+version)
Maven解析依赖信息时回到本地的仓库查找被依赖的jar包
基础用法:对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库
依赖的范围scope
[1]compile
[2]test
[3]provided
1、依赖的传递性:在一个项目中导入的jar包会自动导入到相关的项目中
但是对于test和provided不存在传递性
2、依赖的排除:对于附属的不稳定的jar包,人为想要排除该jar包
在哪个工程中实现排除就在哪个工程中实现
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
3、依赖的原则:解决模块工程之间的jar包冲突问题,路径最短者优先(jar包传输到项目的距离),路径相同时,先声明者(dependency标签声明顺序)优先。
4、统一管理依赖的版本:手动逐一修改不可靠
建议配置方式:
[1]使用properties标签内使用自定义标签统一声明版本号
<properties>
<ly.spring.version>4.0.0.RELEASE</ly.spring.version>
</properties>
[2]在需要统一版本的位置,使用${自定义标签}引用声明的版本号
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${ly.spring.version}</version>
</dependency>
仓库的分类:
[1]本地仓库:当前电脑上部署的仓库,为当前电脑Maven工程服务
[2]远程仓库:
仓库中保存的内容:
[1]Maven自身所需要的插件
[2]第三方框架或者工具的jar包
[3]我们自己开发的Maven工程
1、各个环节 执行的顺序:不能打乱,按照既定顺序执行
2、Maven核心的程序中定义了抽象的生命周期,生命周期中各个阶段的任务是由Maven插件完成的
3、Maven有三套相互独立的生命周期,分别是:
4、Maven核心为了更好的实现自动化构建,不论程序处于生命周期的哪个阶段,都是需要从生命周期的最初阶段开始执行,直至该阶段执行
5、各个阶段的插件和目标
[1]生命周期的各个阶段仅仅定义了需要执行的任务是什么
[2]各个阶段和插件目标是对应的
[3]相似的目标由特定的插件来完成
生命周期阶段 | 插件 | 目标插件 |
---|---|---|
compile | compile | maven-compiler-plugin |
test-compile | testCompile | maven-compiler-plugin |
问题:由于test范围的依赖由于无法传递,所以会分散在各个模块中,很容易造成版本不统一,影响团队工作。
解决方案:将junit依赖统一提取到“父工程”中,在“子工程”中声明依赖时不指定版本,以“父工程”为准.
操作步骤:
[1]创建一个Maven工程作为父工程,注意打包方式pom
<groupId>org.example</groupId>
<artifactId>MavenProject</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
[2]在子工程中声明对父工程的引用
<parent>
<groupId>org.example</groupId>
<artifactId>MavenProject</artifactId>
<version>1.0-SNAPSHOT</version>
<!--基于当前文件的父工程的相对路径-->
<relativePath>../MavenProject/pom.xml</relativePath>
</parent>
[3]将子工程的坐标与父工程坐标中重复的内容删除
[4]在子工程中统一junit依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
[5]在子工程中删除junit依赖的版本号部分
注意:配置继承后,执行安装命令时要先安装父工程
作用:一键安装各个模块工程
配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块
<!--配置聚合-->
<modules>
<!-- 指定各个子工程的相对路径-->
<module>../hi</module>
<module>../hello</module>
</modules>
使用方式:pom.xml -> mvn install
直接建立maven基础项目
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <!-- Compile --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.8</source> <source>1.8</source> </configuration> </plugin> </plugins> </build>
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
</web-app>
<packaging>war</packaging> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- JSP --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <!-- JSTL --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
使用quick-start构建原型
选用webapp模板创建新项目
将项目通过package命令打成war包,将war包放置在Tomcat中webapps目录下,运行win窗口,Catalina run运行Tomcat服务器,通过浏览器本地访问,即可访问项目。
<!--配置当前工程构建过程的特殊设置--> <build> <finalName>ly</finalName> <!-- 配置构建过程中需要使用的插件--> <plugins> <plugin> <!--cargo是一家专门从事“启动Servlet容器”的组织--> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.2.3</version> <!--针对插件进行的配置--> <configuration> <!--配置系统中容器的位置--> <container> <containerId>tomcat6x</containerId> <home>E:\ly\JAVA_EE jar包\apache-maven-3.8.1</home> </container> <configuration> <type>existing</type> <home>E:\ly\JAVA_EE jar包\apache-maven-3.8.1</home> <!-- 如果Tomcat端口默认值为8080则不必设置该属性--> <!-- <properties>--> <!-- <cargo.servlet.port>8989</cargo.servlet.port>--> <!-- </properties>--> </configuration> </configuration> <!-- 配置插件在什么情况下执行--> <executions> <execution> <id>cargo-run</id> <!-- 生命周期阶段--> <phase>install</phase> <goals> <!-- 插件目标--> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
Maven库网站:http://mvnrepository.com/搜索需要的jar包依赖信息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。