Maven
2016-03-27 11:15
399 查看
资源:
maven 依赖jar包:http://mvnrepository.com/
Apache官网maven插件:http://tomcat.apache.org/maven-plugin.html
1.maven的目录结构
src
-main
-java
-package
-test
-java
-package
-resources
2.maven命令
mvn -v 查看maven版本
compile 编译
test 测试
package 打包
clean 删除target
install 安装 jar 包到本地仓库
其中,mvn install 命令,示例如下:
maven01和maven02为两个工程:
[align=center][/align]
[align=left] maven02中的类需要引用maven02中的类:[/align]
[align=center][/align]
[align=center]maven01[/align]
[align=center][/align]
[align=center]maven02[/align]
[align=center]
[/align]
直接编译maven02会报错,找不到maven01中的类,所以首先打包(mvn install)maven01,将maven01打包放入本地仓库,再将maven01的坐标配置到maven02的pom中,这样,在编译maven02的时候会去本地仓库中找到maven01,编译成功!
3.自动创建目录的两种方式:
1)mvn archetype:generate 按照提示输入相应值
2)mvn archetype:generate -DgroupId=组织名,公司网址的反写+项目名
-DartifactId=项目名-模块名
-Dversion=版本号
fab1
-Dpackage=代码所存在的包名
[align=left]
[/align]
[align=left]4.maven仓库[/align]
[align=left]1)坐标:构件的唯一标识[/align]
2)仓库:管理项目的依赖
2.1. 本地仓库:项目中依赖的jar包会存放在本地仓库,默认在C盘用户的.m2文件夹中,需在setting.xml中修改其位置,以防重装系统删除:
2.2. 远程仓库
2.2.1全球中央仓库:本地仓库找不到的依赖会去全球中央仓库中找(https://repo.maven.apache.org/maven2),全球中央仓库的配置在maven 安装目录中 lib 文件夹下的 maven-model-builder.jar 中的pom-4.0.0.xml中:
[align=center]
[/align]
2.2.2镜像仓库(国内):因为全球中央仓库的服务器在国外,有时候访问不了,所以需配置国内的镜像仓库(http://maven.oschina.net/content/groups/public),具体配置在 maven 安装目录下的 conf 文件夹下的 setting.xml 中:
[align=left]
[/align]
[align=left]5.eclipse 中创建 maven 工程[/align]
[align=left] 1) eclipse4.0版本以上都默认安装了maven插件,无需单独下载安装。[/align]
[align=left] 2) eclipse中需要做如下设置:[/align]
[align=left] jre:[/align]
[align=left] [/align]
[align=left] maven installations:[/align]
[align=left] [/align]
[align=left] 3)创建maven工程如下:[/align]
[align=left] 第一步:[/align]
[align=left]
[/align]
[align=left] [/align]
[align=left] finish之后的项目结构:[/align]
[align=left]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=left] 第二步:[/align]
[align=left] 右键工程,run-->build...,报错[/align]
[align=left] [/align]
[align=left] 为jre添加参数(注意,M2_HOME为环境变量中所配置的maven安装路径):[/align]
[align=center]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left] finish后重新编译工程,成功![/align]
[align=left]
[/align]
6.生命周期
package 命令中clean和test会自动运行
clean 清理项目
pre-clean 执行清理前的工作
clean 清理上一次构建生成的所有文件
post-clean 执行清理后的文件
default 构建项目(核心)
compile test package install
site 生成项目站点
pre-site 在生成项目站点前要完成的工作
site 生成项目的站点文档
post-site 在生成项目站点后要完成的工作
site-deploy 发布生成的站点到服务器上
[align=left] [/align]
[align=left] maven本身的功能很少,其强大的功能由插件提供,如source插件(phase为阶段):[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]7.pom.xml解析[/align]
[align=left]1)pom常用元素详解[/align]
2)依赖范围:scope
compile:默认的范围,编译、测试、运行都有效
provided:编译、测试时有效。比如servletAPI,因为web容器已经包含该jar包,所以在运行阶段不需要,故设置为provided
runtime:测试、运行时有效,如jdbc API
test:测试时有效,如junit
system:编译、测试时有效,但因为与本机系统相关联,所以可移植性差
import:导入的范围,只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置
3)传递依赖:maven工程具有传递依赖的特性,比如A依赖B,B依赖C,那么在编译A的时候,A就会对C产生依赖。若想去除A对C的依赖,则使用 exclusions。
[align=left]
[/align]
[align=left]4)依赖冲突:多个依赖中有不同版本的jar[/align]
短路优先:A->B->C-X(2.0jar)
A->D->X(2.4jar)
则下载2.4jar
先声明优先:依赖长度相同,哪个依赖先声明则下载对应依赖中的jar
5)聚合和继承
5.1 聚合:批量打包(注意在聚合的pom文件中,packaging属性修改为pom)
5.2 继承
parent项目中,可删除src中的main和test目录,pom文件中用<dependencyManagement>管理依赖,且修改<packaging>为pom,可用<properties>定义属性,以供其他地方引用。
child项目中,使用<parent>引用父项目的坐标,并可以删除掉父项目中存在的jar包的version和scope,实现继承。
注:eclipse中,项目右键maven->update,可更新项目(例如配置文件修改后);
修改maven的jre版本:setting中加入如下配置
5.3 聚合继承若在同一个pom文件中,则需要在子模块中加入:<relativePath>../webHy/pom.xml</relativePath>,如在子模块webHy-login中配置如下:
8.创建maven的web工程
[align=left]
[/align]
[align=left]第一步:创建[/align]
[align=left]
[/align]
[align=left]第二步:创建的工程中缺少Servlet API,加入依赖,并且配置scope属性为provided
[/align]
第三步:完善目录结构
最初目录结构如下:
[align=left]
[/align]
[align=left] 可通过Project Explore视图中对应目录下加source folder,或者Navigator视图下对应目录下添加folder:
[/align]
or
[align=left]第四步:查看输出路径是否为class,并将工程转换为web项目
[/align]
[align=left]第五步:删除多余的部署目录,比如test在项目发布的时候是不需要的,故删除
[/align]
第六步:配置tomcat-maven插件(apache官网有示例)
第七步:打包运行clean pacakge
[align=left]
[/align]
maven 依赖jar包:http://mvnrepository.com/
Apache官网maven插件:http://tomcat.apache.org/maven-plugin.html
1.maven的目录结构
src
-main
-java
-package
-test
-java
-package
-resources
2.maven命令
mvn -v 查看maven版本
compile 编译
test 测试
package 打包
clean 删除target
install 安装 jar 包到本地仓库
其中,mvn install 命令,示例如下:
maven01和maven02为两个工程:
[align=center][/align]
[align=left] maven02中的类需要引用maven02中的类:[/align]
[align=center][/align]
[align=center]maven01[/align]
[align=center][/align]
[align=center]maven02[/align]
[align=center]
[/align]
直接编译maven02会报错,找不到maven01中的类,所以首先打包(mvn install)maven01,将maven01打包放入本地仓库,再将maven01的坐标配置到maven02的pom中,这样,在编译maven02的时候会去本地仓库中找到maven01,编译成功!
3.自动创建目录的两种方式:
1)mvn archetype:generate 按照提示输入相应值
2)mvn archetype:generate -DgroupId=组织名,公司网址的反写+项目名
-DartifactId=项目名-模块名
-Dversion=版本号
fab1
-Dpackage=代码所存在的包名
[align=left]
[/align]
[align=left]4.maven仓库[/align]
[align=left]1)坐标:构件的唯一标识[/align]
2)仓库:管理项目的依赖
2.1. 本地仓库:项目中依赖的jar包会存放在本地仓库,默认在C盘用户的.m2文件夹中,需在setting.xml中修改其位置,以防重装系统删除:
2.2. 远程仓库
2.2.1全球中央仓库:本地仓库找不到的依赖会去全球中央仓库中找(https://repo.maven.apache.org/maven2),全球中央仓库的配置在maven 安装目录中 lib 文件夹下的 maven-model-builder.jar 中的pom-4.0.0.xml中:
[align=center]
[/align]
2.2.2镜像仓库(国内):因为全球中央仓库的服务器在国外,有时候访问不了,所以需配置国内的镜像仓库(http://maven.oschina.net/content/groups/public),具体配置在 maven 安装目录下的 conf 文件夹下的 setting.xml 中:
[align=left]
[/align]
[align=left]5.eclipse 中创建 maven 工程[/align]
[align=left] 1) eclipse4.0版本以上都默认安装了maven插件,无需单独下载安装。[/align]
[align=left] 2) eclipse中需要做如下设置:[/align]
[align=left] jre:[/align]
[align=left] [/align]
[align=left] maven installations:[/align]
[align=left] [/align]
[align=left] 3)创建maven工程如下:[/align]
[align=left] 第一步:[/align]
[align=left]
[/align]
[align=left] [/align]
[align=left] finish之后的项目结构:[/align]
[align=left]
[/align]
[align=center]
[/align]
[align=center]
[/align]
[align=left] 第二步:[/align]
[align=left] 右键工程,run-->build...,报错[/align]
[align=left] [/align]
[align=left] 为jre添加参数(注意,M2_HOME为环境变量中所配置的maven安装路径):[/align]
[align=center]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left] finish后重新编译工程,成功![/align]
[align=left]
[/align]
6.生命周期
package 命令中clean和test会自动运行
clean 清理项目
pre-clean 执行清理前的工作
clean 清理上一次构建生成的所有文件
post-clean 执行清理后的文件
default 构建项目(核心)
compile test package install
site 生成项目站点
pre-site 在生成项目站点前要完成的工作
site 生成项目的站点文档
post-site 在生成项目站点后要完成的工作
site-deploy 发布生成的站点到服务器上
[align=left] [/align]
[align=left] maven本身的功能很少,其强大的功能由插件提供,如source插件(phase为阶段):[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]7.pom.xml解析[/align]
[align=left]1)pom常用元素详解[/align]
2)依赖范围:scope
compile:默认的范围,编译、测试、运行都有效
provided:编译、测试时有效。比如servletAPI,因为web容器已经包含该jar包,所以在运行阶段不需要,故设置为provided
runtime:测试、运行时有效,如jdbc API
test:测试时有效,如junit
system:编译、测试时有效,但因为与本机系统相关联,所以可移植性差
import:导入的范围,只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置
3)传递依赖:maven工程具有传递依赖的特性,比如A依赖B,B依赖C,那么在编译A的时候,A就会对C产生依赖。若想去除A对C的依赖,则使用 exclusions。
[align=left]
[/align]
[align=left]4)依赖冲突:多个依赖中有不同版本的jar[/align]
短路优先:A->B->C-X(2.0jar)
A->D->X(2.4jar)
则下载2.4jar
先声明优先:依赖长度相同,哪个依赖先声明则下载对应依赖中的jar
5)聚合和继承
5.1 聚合:批量打包(注意在聚合的pom文件中,packaging属性修改为pom)
5.2 继承
parent项目中,可删除src中的main和test目录,pom文件中用<dependencyManagement>管理依赖,且修改<packaging>为pom,可用<properties>定义属性,以供其他地方引用。
<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"> <modelVersion>4.0.0</modelVersion> <groupId>com.zhaoxueer</groupId> <artifactId>ABC-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>ABC-parent</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>3.8.1</junit.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> </project>
child项目中,使用<parent>引用父项目的坐标,并可以删除掉父项目中存在的jar包的version和scope,实现继承。
<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"> <modelVersion>4.0.0</modelVersion> <groupId>com.zhaoxueer</groupId> <artifactId>A</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>A</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>com.zhaoxueer</groupId> <artifactId>ABC-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> </project>
注:eclipse中,项目右键maven->update,可更新项目(例如配置文件修改后);
修改maven的jre版本:setting中加入如下配置
<profile> <id>jdk-1.7</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.7</jdk> </activation> <properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion> </properties> </profile>
5.3 聚合继承若在同一个pom文件中,则需要在子模块中加入:<relativePath>../webHy/pom.xml</relativePath>,如在子模块webHy-login中配置如下:
8.创建maven的web工程
[align=left]
[/align]
[align=left]第一步:创建[/align]
[align=left]
[/align]
[align=left]第二步:创建的工程中缺少Servlet API,加入依赖,并且配置scope属性为provided
[/align]
第三步:完善目录结构
最初目录结构如下:
[align=left]
[/align]
[align=left] 可通过Project Explore视图中对应目录下加source folder,或者Navigator视图下对应目录下添加folder:
[/align]
or
[align=left]第四步:查看输出路径是否为class,并将工程转换为web项目
[/align]
[align=left]第五步:删除多余的部署目录,比如test在项目发布的时候是不需要的,故删除
[/align]
第六步:配置tomcat-maven插件(apache官网有示例)
<build> <finalName>webDemo</finalName> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat6-maven-plugin</artifactId> <version>2.2</version> <!-- 打包时即运行tomcat --> <executions> <execution> <phase>package</phase> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
第七步:打包运行clean pacakge
[align=left]
[/align]
相关文章推荐
- 你戴错眼镜啦
- xiaoxin juju needs help hdu(5651)杨辉三角与二项式
- 微信群之社群经济的魔力
- android 如何修改开机动画
- 分享一个谷歌工程师的博客。有很多书单。
- Semantic 导航条
- git删除分支
- Java学习笔记之使用反射+泛型构建通用DAO
- 大话设计模式—建造者模式
- java的回收机制----根搜索算法
- js中的null和undefined
- 图像处理之gamma校正
- App域名劫持之DNS高可用 - 开源版HttpDNS方案详解(转)
- The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the argument
- android系统开机动画设置方法介绍
- android代码上库流程
- PHP中交互变量的优化
- HTTPDNS成为移动互联网的标配–原因与原理解析(转)
- iOS开发小技巧--textField成为密码框,view加载完后textField获取焦点
- 名词解释