maven笔记

一、初识Maven
maven是一款软件工程构建工具,它可以对多项目进行有效的管理。
1.1、安装maven 
1.1.1安装文件目录说明

1.1.2设置环境变量path
1.1.3修改本地仓库目录
修改maven目录下conf中的settings.xml

默认是在C:\Users\Administrator\.m2\repository中。

1.2、创建一个简单的maven项目
1.2.1创建项目
mvn archetype:create -DgroupId=com.zefu.app -DartifactId=TestMaven 回车(DartifactId可以理解为项目名称,DgroupId可以理解为包名), 
如果你是首次运行该命令,maven将要花一些时间去把最新的工具包(Maven 把它叫作artifacts)下载到你的本地仓库。 下载的数据默认放在C:\Users\Administrator\.m2\repository目录下。

命令执行完后你将看到maven生成了一个名为TestMaven 的目录,这个名字就是你在命令中指定的DartifactId,进入该目录,你将发现以下标准的项目结构: 

src/main/java:源代码
src/test/java:测试代码
src/main/resources:源代码的资源文件
src/test/resources:测试代码的资源文件
pom.xml是项目的项目对象模型(Project Object Model or POM)。 pom.xml:



1.2.2 maven项目常用mvn命令
mvn clean -->表示运行清理操作(会默认把target文件夹中的数据清理)
mvn clean compile-->表示先运行清理之后运行编译,会见代码编译到target文件夹中
mvn clean test-->运行清理和测试
mvn clean package-->运行清理和打包
mvn clean install-->运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用
mvn clean deploy-->运行清理和发布(发布到私服上面)
以上面例子来看:
进入到项目路径,输入 mvn package 回车这时命令行将会打印出各种动作,并且以下面一段信息结束: 

执行命令完后可以看到项目中多了一个些东西

java -cp target/TestMaven-1.0-SNAPSHOT.jar com.zefu.app.App
这时将打印出最经典的: Hello World


1.3 myeclipse集成maven
1.3.1 myeclipse配置maven环境

1.3.2 创建maven项目


二、Maven依赖
2.1 依赖包的查询

所有的依赖都是通过坐标来进行存储的(GAV-->groupId、artifactId、version)
有一些网上的仓库提供了坐标的查询(http://search.maven.org/#browse
、http://mvnrepository.com)
maven是如何搜索依赖的?首先会在本地仓库查询如果本地仓库没有,就去中央仓库查询(后面还会有一个私有服务器仓库)

2.2 依赖的传递性
 A-->C  B-->A ==> B-->C(这种依赖是基于compile这个范围进行传递)
比如:
user-vo项目中依赖于hibernate-core,
user-dao项目依赖于user-vo
那么user-dao就会依赖于hibernate-core,也就是user-dao在pom.xml中不用把hibernate-core加进去,他自己去会依赖进去了。

2.3 依赖冲突
a-->b1.0  c-->b1.1  d-->a和c,这个时候在d的pom.xml中,哪一个依赖先写就使用先写依赖的版本。
如:
user-vo依赖log4j-1.2.16,user-log依赖log4j-1.2.9,user-dao依赖user-vo和user-log,那么user-dao是依赖log4j-1.2.16还是log4j-1.2.9呢?--哪一个依赖先写就使用先写依赖的版本。

a-->b1.0  c-->b1.1  d-->a和c-->b1.0  f-->d,c,如果路径的长短不一致就选择最小路径
f-->b1.1

如果希望精确的控制依赖包,可以使用依赖的排除功能进行控制


2.4 依赖的范围
test:范围指的是测试范围有效,在编译和打包时都不会使用这个依赖
compile:范围指的是编译范围有效,在编译和打包时都会将依赖存储进去
provided:依赖:在编译和测试的过程有效,最后生成war包时不会加入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突
system:引用本地的jar包
runtime:在运行的时候依赖,在编译的时候不依赖
import : 从其它的pom中导入dependency的配置
默认的依赖范围是compile

2.5 版本管理
总版本号.分支版本号.小版本号-里程碑版本
总版本号的变动一般表示框架的变动
分支版本号:一般表示增加了一些功能
小版本号:在分支版本上面进行bug的修复
里程碑:SNAPSHOT-->alpha-->beta-->release-->GA
user0.0.1-SNAPSHOT-->user0.0.1-Release--->user1.0.0SHAPSHOT  -->user1.0.0-Rlease
                           -->user0.1.0-SNAPSHOT-->user0.1.0-Rlease



三、maven仓库

首先会在本地仓库查询,如果本地仓库没有,就去私有服务器仓库查询,如果私有仓库服务器没有,就去中央仓库查询。把查询到的结果下载到私有服务器仓库和本地仓库。所以至少要保证私有服务器是要有网络的。

3.1 私有服务器仓库
3.1.1安装私有服务器仓库
nexus(linux和windows都有,有兴趣的可以自己去装)
http://192.168.11.253:8081/nexus/index.html#welcome

默认登陆名:admin 默认密码:admin123
3.1.2私有服务器仓库介绍
1. host的仓库。内部项目的发布仓库


2.proxy的仓库。从远程中央仓库中寻找数据的仓库

3.group组仓库。组仓库用来方便开发人员进行设置的仓库,可以设置为其他仓库的一个集合。

3.1.3私有仓库设置
设置镜像:
在maven安装文件的conf目录的settings.xml中配置


3.1.4 发布项目到私有服务器仓库
在pom.xml中设定snapshotsa工厂和releases工厂

在settings.xml中设置访问权限

nexus私有服务器有提供三个默认的用户 

admin拥有一切权限,deployment具有上传的权限,anonymous具有查看的权限。
3.1.5 创建项目工厂和设置权限
1.创建两个工厂



2.为工厂配置权限


3.创建角色并分配权限


4.创建用户分配角色

5.创建发布的工厂
pom.xml中设置

settings.xml中设置

3.1.6 上传jar包到第三方依赖仓库

四、生命周期和插件
4.1 生命周期
mvn clean install
validate:验证项目是否正确,以及所有为了完整构建必要的信息是否可用
generate-sources:生成所有需要包含在编译过程中的源代码
process-sources:处理源代码,比如过滤一些值
generate-resources :生成所有需要包含在打包过程中的资源文件
process-resources:复制并处理资源文件至目标目录,准备打包
compile:编译项目的源代码
process-classes:后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)
generate-test-sources:生成所有包含在测试编译过程中的测试源码
process-test-sources:处理测试源码,比如过滤一些值
generate-test-resources:生成测试需要的资源文件
process-test-resources:复制并处理测试资源文件至测试目标目录
test-compile:编译测试源码至测试目标目录
test:使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
prepare-package:在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在Maven 2.1+中实现)
package:将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
pre-integration-test: 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
integration-test:如果有必要的话,处理包并发布至集成测试可以运行的环境
post-integration-test:执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
verify:执行所有检查,验证包是有效的,符合质量规范
install:安装包至本地仓库,以备本地的其它项目作为依赖使用

生命周期是依赖插件来做的。
4.2 maven插件
五、搭建linux的maven私有服务器仓库(nexus)
1把安装包拷到usr/java目录下
2解压nexus  tar -zvxf nexus-2.5.1-01-bundle.tar.gz
3需要在/usr/java/nexus-2.5.1-01/bin/jsw/linux-x86-32 (当前系统版本,注意操作系统位数)下的nexus文件在中约20行处加入RUN_AS_USER=用户名(用户名如root用户) 
4 启动nexus  cd到/usr/java/nexus-2.5.1-01/bin/jsw/linux-x86-32目录下,再./nexus start命令启动nexus。./nexus status 检查nexus启动状态,./nexus stop停止nexus。 

5访问nexus   http://192.168.230.130:8081/nexus出现界面如图:
如果访问不到需要关闭linux防火墙
1) 永久性生效,重启后不会复原
开启:chkconfig iptables on
关闭:chkconfig iptables off
2) 即时生效,重启后复原
开启:service iptables start
关闭:service iptables stop


六、附录
1、http://wentao365.iteye.com/blog/903396
2.、http://b-l-east.iteye.com/blog/1246482
3、查找jar包:http://search.maven.org/#browse
http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2.5.0
4、如何查找jar包:http://blog.csdn.net/xuexin25java/article/details/7967086
5、linux环境搭建maven nexus服务器:
http://wenku.baidu.com/link?url=HVfdref5vGBzWDwexmY-u6KC_N5fC8YKu7IIUOCyjWb75izkhA6McM08SUsqETlzYKd7TXn1TXEPjUM8_s4rI53H08RCzhC9Q7cVpVrqZPC
http://blog.csdn.net/liu_xing_hui/article/details/7246029
6、配置Maven项目自动部署到tomcat上:
http://blog.csdn.net/hecongqi/article/details/8013598
Maven build... Goals:    tomcat:deploy
http://www.blogjava.net/zyl/archive/2006/12/30/91055.html
http://maven.apache.org/repository/index.html

由于有些图片看到不到的原因,可以下载附件里面有一个doc文档,可以看到。

猜你喜欢

转载自yjf565111293.iteye.com/blog/2099034