maven基础
2016-07-21 09:27
423 查看
一、 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中配置引入插件:
九、 pom.xml文件讲解(各个标签)
十、 依赖范围
Ø 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>
Ø 继承:
将项目中共有的依赖项提取出来放入<dependencyManagement></dependencyManagement>中,作为父类
à 然后在要调用的子类使用<parent></parent>输入父类坐标进行引用
l 父类:
l 子类:
十四、创建基于maven的web项目
af7b
Ø 流程:
新建时选择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
部署指令:run as --> maven builder --> tomcat7:redeploy
redeploy:表示每次都重新部署
配置<path>/</path>
项目访问路径:http://localhost:8889/
未配置<path>/</path>
项目访问路径:http://localhost:8889/项目名
备注:
更新项目:maven/uapdate project
下载安装目录 à 配置环境变量: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项目
af7b
Ø 流程:
新建时选择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
相关文章推荐
- 外部符号无法解析 [c/c++]
- Android 单位px、dp、sp转换工具类
- github上搜索优秀C代码的指令
- RGB图像语义分割前沿:CRF as RNN
- HDU 1232 畅通工程(并查集)
- 权限思路及代码实现
- mysql动态行转列
- 环信使用思路逻辑
- ny 5 Binary String Matching
- lintcode binary-tree-serialization 二叉树的序列化与反序列化
- OC_数据库常见SQL语句
- Android Lollipop
- 关于scipy安装运行问题
- PagerSlidingTabStrip(viewPage滑动菜单)
- 反射比较两个对象属性值是否有修改
- Android 自定义View实现ViewPager指示器
- leetcode 150. Evaluate Reverse Polish Notation java 算法
- Git入门(5)-工作区和暂存区
- 杭电ACM中一部分关于string的题目
- Android 监听Notification 被清除实例代码