一、 Maven环境搭建
下载安装目录 à 配置环境变量:M2_HOME、Path à cmd测试配置
二、 基本目录结构
src
-main
-java
-package
-test(测试)
-java
-package
resources(资源文件)
POM.xml管理项目(根目录中)
Ø 运行后生成的target文件中:classes文件存的是.class字节码文件;surefire-reports生成的是测试报告.
三、 基本命令
1、 mvn –v 查看maven版本
2、 mvn compile编译
3、 mvn test 测试
4、 mvn package 项目打包
5、 mvn clean 删除target
6、 mvn install 安装jar包到本地仓库中
四、 自动创建目录骨架
archetype插件:mvn archetyoe
1. archetype:generate 按照提示进行选择
2. archetype:generate -DgroupId=组织名,公司地址犯些+项目名
-Darchetype=项目名-模块名
-Dversion=版本号
-Dpackage=代码所存在的包名
五、 坐标和仓库
Ø 坐标:groupId + artifactId + version
Ø 仓库:本地仓库
远程仓库(默认提供全球中央仓库的地址lib/maven-model-builder-3.3.9.jar中pom-4.0.0.xml)
仓库资源搜索:http://mvnrepository.com/
Ø 镜像仓库:(地址修改)
conf/settings.xml 中mirrors
中提供的示例复制一份
进行配置将镜像映射到国内
Ø 更改仓库位置:
默认存放位置:c:用户/.m2/repository
仓库不要放在c盘中,以防重装系统
修改settings.xml 中lacalRepository
url要改成斜杠
复制settings.xml到repo文件中,这样以后更新maven就不用修改settings.xml
六、 eclipse中maven的搭建
1、 修改eclipse默认运行jre到jdk
Window à preference à java àinstall jre
2、 修改eclipse.ini将jdk配置进去
3、 运行pom.xml: run as à maven builder
进行compile 、package等指令
4、 设置jdk目录
七、 生命周期
Ø 三套相互独立的生命周期:
clean 清理项目:pre-clean clean post-clean
default 构建项目(最核心):compile test package install
site 生成项目站点(根据pom.xml生成站点):pre-site site post-site site-deploy
不同生命周期的各个阶段是顺序的,且后面的阶段依赖于前面的阶段
,但是并不会触发其他生命周期的任何阶段
例: clean、compile、test、package、install
在执行package命令时会自动执行之前的:clean、compile和test
八、 maven插件引入
Ø 项目在打包时对source插件源码同时进行打包:绑定source插件到default生命周期的package阶段.
Ø Pom.xml中配置引入插件:
<!-- 引入插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<!-- 绑定插件到package阶段,可随项目一并打包 -->
<executions>
<execution>
<phase>package</phase>
<!-- 具体使用哪种类型上官网查goal值配置 -->
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
九、 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">
<!-- 指定pom版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 坐标 -->
<groupId>com.imooc.hi</groupId><!-- 反写公司名+项目名 -->
<artifactId>hi</artifactId><!-- 项目名 + 模块名 -->
<!--第一个0标识大版本号,第二个0表示分支版本号,第三个0表示小版本号
snapshot 快照
alpha 内部测试
beta 公测
GA 正式发布
-->
<version>0.0.1-SNAPSHOT</version>
<!-- 项目默认打包类型:jar war zip pom等 -->
<packaging>jar</packaging>
<!-- 项目描述名 -->
<name>hi</name>
<!-- 项目的地址 -->
<url>http://maven.apache.org</url>
<!-- 项目描述 -->
<description></description>
<!-- 项目开发人员列表 -->
<developers></developers>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 依赖列表,包含多个依赖项 -->
<dependencies>
<dependency>
<!-- 依赖项的坐标设置 -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope><!-- 依赖范围设置 -->
<!-- 设置依赖是否可选,默认为false -->
<optional></optional>
<!-- 排除依赖传递列表 -->
<exclusions></exclusions>
</dependency>
</dependencies>
<!-- 依赖的管理,里面可以定义多个依赖,但不会引入到实际应用中,定义父类被子类所引用 -->
<dependencyManagement>
<dependencies>
</dependencies>
</dependencyManagement>
<!-- 引入插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<!-- 绑定插件到package阶段,可随项目一并打包 -->
<executions>
<execution>
<phase>package</phase>
<!-- 具体使用哪种类型上官网查goal值配置 -->
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- 子模块中对父模块pom的继承 -->
<parent></parent>
<!-- 指定多个模块一起编译 -->
<modules>
<module></module>
</modules>
</project>
十、 依赖范围
Ø Maven提供三种classpath:
编译、测试、运行
Ø Scope的6个属性:
1、 compile:对于编译、测试、运行三个阶段都有效(默认)
2、 provided:编译、测试时有效(例:servletAPI)
3、 runtime:在测试、运行时有效(例:jdbc驱动)
4、 test:只在测试时有效(例:junit)
5、 system:也在编译、测试时有效(项目依赖本机JAVA_HOME,导致可移植性差)
6、 import:只可在dependencyManagement标签中使用,表示将依赖导入到项目中
十一、依赖传递
Ø A依赖B,B又依赖C,所以A依赖C.
Ø 配置依赖关系步骤: c的pom.xml获取c的坐标 à b的pom.xml中根据坐标配置依赖<dependency></dependency> à 先将c进行打包并安装(clean install) à compile b à
Clean install b à compile a.
Ø 这样搭建好之后,a中会有b和c两个依赖.
Ø 但是,如果a只需要b的依赖,不需要c中的依赖时:(排除依赖)
将对c依赖排除出去:<exclusions></exclusions>
十二、依赖冲突
Ø 当a依赖b,b依赖c(jar);a又依赖d,d也依赖c(jar);像这种依赖于相同构件,应该选择哪个构件的问题.
解决办法:短路优先,先声明先优先
十三、聚合和继承
Ø 聚合:
将项目聚合起来统一进行install,新项目中使用<module></module>
<modules>
<module>../hx.bg</module>
<module>../hx.ng</module>
<module>../hx.sj</module>
</modules>
Ø 继承:
将项目中共有的依赖项提取出来放入<dependencyManagement></dependencyManagement>中,作为父类 à 然后在要调用的子类使用<parent></parent>输入父类坐标进行引用
l 父类:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>$(junit-version)</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
l 子类:
<parent>
<groupId>com.hx</groupId>
<artifactId>hx.parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
十四、创建基于maven的web项目
Ø 流程:
新建时选择webapp à pom.xml中引入servlet依赖(从中央仓库中找) à 手动创建基本目录结构 à 检查classpath的输出路径:右键项目buildpath /source/Output folder(确保此次输出路径为target/classes中!) à 将项目转化成web项目:项目右键属性/project Facets/选择Dynamic Web Module动态web工程 à 修改部署时的默认配置:项目右键属性/Deployment Assembly(将测试代码文件删除,发布时不需要测试代码remove test相关代码) à web项目搭建成功!
Ø package命令导出为war包,部署到web容器(jetty)中
中央仓库中找到jetty插件的依赖(将坐标导入<plugin></plugin>中)
maven工程部署:
创建基本目录结构(main下创建一个java文件,src下创建与main同级的java文件,创建好的test文件下创建java文件,用于存放测试代码
编译后存放的目标:target/classes
十五、maven热部署:
找到tomcat安装目录 --> conf --> tomcat-users.xml -->
修改配置(指定tomcat账号密码,localhost:8080/manager/html)
给tomcat配置账号:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="123" roles="manager-gui,manager-script"/>
将项目部署到tomcat中
(配置多个tomcat)模拟文件服务器
步骤:
改tomcat端口号:
找到tomcat安装目录 --> conf --> server.xml
改三个地方:
1、<Server port=""中的数字改为原数字加一
2、<Connector port=""中的数字改为未被占用的端口
3、<Connector port=""中的数字改为原数字加一
将本机配置好不同端口号的tomcat分别在pom.xml中进行插件声明(中央仓库坐标)
启动本机中在pom.xml中声明好的tomcat
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8889/manager/text</url>
<!-- 首页直接显示网页内容 -->
<path>/</path>
<server>tomcatserver</server>
<username>admin</username>
<password>123</password>
</configuration>
</plugin>
</plugins>
部署指令:run as --> maven builder --> tomcat7:redeploy
redeploy:表示每次都重新部署
配置<path>/</path>
项目访问路径:http://localhost:8889/
未配置<path>/</path>
项目访问路径:http://localhost:8889/项目名
备注:
更新项目:maven/uapdate project