maven3.0
Maven入门教程
1.1. 介绍、环境配置
1.1.1. Maven介绍
Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。目前Apache下绝大多数项目都已经采用Maven进行管理. 而Maven本身还支持多种插件, 可以方便更灵活的控制项目, 开发人员的主要任务应该是关注商业逻辑并去实现它, 而不是把时间浪费在学习如何在不同的环境中去依赖jar包,项目部署等。Maven正是为了将开发人员从这些任务中解脱出来而诞生的
1.1.2. Maven能够做什么
l Jar的声明式依赖性管理
l 项目自动构建
1.1.3. 环境配置
l http://maven.apache.org/download.html 下载最新版本Maven 3.0.2 (Binary zip)
l 解压到 D(本身就是绿色版不需要安装):
l 配置环境变量(配置之前,必须确定配置了JDK环境变量)
MAVEN_HOME : D:\apache-maven-3.0.2
把此命令添加到Path中: %MAVEN_HOME%\bin\
l 配置用户范围的settings.xml
MAVEN_HOME/conf/settings.xml 全局的
~/.m2/settings.xml 单个用户的
l 验证安装是否成功
在命令行上输入: mvn -version;回车, 如看到下面信息表示安装成功
1.1.4. Maven目录分析
l bin:含有mvn运行的脚本
l boot:含有plexus-classworlds类加载器框架
l conf:含有settings.xml配置文件
l lib:含有Maven运行时所需要的java类库
l Settings.xml 中默认的用户库: ${user.home}/.m2/repository
l Maven默认仓库下载地址在: maven的lib目录下maven-model-builder-3.0.4.jar的pom.xml中
1.2. 第一个Maven演示
1.2.1. 创建目录结构
Convention Over Configuration (约定优于配置)。在现实生活中,有很多常识性的东西,地球人都知道。比如说:如何过马路(红灯停绿灯行),如何开门,关门等。对于这些事情,人们已经有了默认的约定, 在软件开发过程中,道理也是类似的,如果我们事先约定好所有项目的目录结构,标准开发过程(编译,测试) , 所有人都遵循这个约定。软件项目的管理就会变得简单很多。在现在流行的很多框架中,都使用了这个概念
Hello --src -----main ----------java --用来存放Java文件 ----------resources --用来存放资源文件 -----test ---------java --用来存放测试的Java文件 ---------resources --target --项目输出位置,编译完毕后自动生成 --pom.xml -- 项目对象模型的描述 ,它是maven配置的核心 |
1.2.2. 建立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: 当前jar所属的命名空间 --> <groupId>cn.itcast.maven</groupId> <!-- 当前项目模块名称 --> <artifactId>Hello</artifactId> <!-- 当前项目的版本, SNAPSHOT镜像版 --> <version>0.0.1-SNAPSHOT</version> <!-- 当前模块需要依赖的相关jar包,也称为依赖管理, 所有被依赖的包都是通过"坐标"定位的 --> <dependencies> <!-- 需要依赖junit 通过 groupId+artifactId+version来查找,如果本地没有则到中央仓库下载 --> <dependency> <!-- 当前jar所属的命名空间 --> <groupId>junit</groupId> <!-- 依赖的项目模块的名称 --> <artifactId>junit</artifactId> <!-- 依赖的版本号 --> <version>4.9</version> <!-- 依赖的范围, 有 test compile privlege --> <scope>test</scope> </dependency> </dependencies> </project> |
pom.xml 文件是maven对一个项目的核心配置,这个文件将包含你希望如何构建项目的大多数配置信息。POM大而复杂,但你不用全部去了解,只要使用一些常用的配置就可以了
1.2.3. 创建Java类与测试类
l 在src/main/java/cn/itcast/maven目录下新建文件Hello.java
package cn.itcast.maven; public class Hello { public String sayHello(String name){ return "Hello "+name+"!"; } } |
l 在/src/test/java/cn/itcast/maven目录下新建测试文件HelloTest.java
package cn.itcast.maven; import org.junit.Test; import static junit.framework.Assert.*; public class HelloTest { @Test public void testHello(){ Hello hello = new Hello(); String results = hello.sayHello("litingwei"); assertEquals("Hello litingwei!",results); } } |
1.2.4. 命令测试
打开cmd命令行, 进入Hello项目根目录执行mvn compile命令, 查看根目录变化
cmd 中继续录入mvn clean命令,然后再次查看根目录变化
cmd 中录入 mvn clean compile命令, 查看根目录变化
cmd 中录入 mvn clean test命令,查看根目录变化
cmd 中录入 mvn clean package命令,查看根目录变化
1.3. Maven核心概念
1.3.1. Maven插件
Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的每个插件都能实现多个功能,每个功能就是一个插件目标
Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务, Maven的插件在: .m2\repository\org\apache\maven\plugins
1.3.2. Maven坐标
类似在平面几何中坐标(x,y)可以标识平面中唯一的一点, Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范
拥有了统一规范,就可以把查找工作交给机器
l groupId:定义当前Maven项目隶属项目 (实际对应JAVA的包的结构, 是main目录里java的目录结构)
l artifactId:定义实际项目中的一个模块(项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称)
l version:定义当前项目的当前版本
1.3.3. Maven仓库
l 何为Maven仓库:用来统一存储所有Maven共享构建的位置就是仓库
l Maven配置jar包的路径为:groupId/artifactId/version/artifactId-version
l 本地仓库(~/.m2/repository/):每个用户只有一个本地仓库
l 中央仓库(Maven默认的远程仓库):Maven默认的远程仓库下载地址为:http://repo1.maven.org/maven2
l 私服:是一种特殊的远程仓库, 它是架设在局域网内的仓库, 主要是为了团队协作开发
l 镜像:用来替代中央仓库, 速度一般比中央仓库快
1.3.4. 生命周期
1.4. 第二个Maven演示
1.4.1. HelloFriend目录结构
HelloFriend --src -----main ----------java ----------resources -----test ---------java ---------resources --pom.xml |
1.4.2. 建立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"> <modelVersion>4.0.0</modelVersion> <groupId>cn.itcast.maven</groupId> <artifactId>HelloFriend</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>Hello</artifactId> <version>1.0.0</version> <scope>compile</scope> </dependency> </dependencies> </project> |
1.4.3. 创建Java类与测试类
l 在src/main/java/cn/itcast/maven目录下新建文件HelloFriend.java
package cn.itcast.maven; public class HelloFriend{ public String sayHello(String name){ return "Hello "+name+"!"; } } |
l 在/src/test/java/cn/itcast/maven目录下新建测试文件HelloFriendTest.java
package cn.itcast.maven; import org.junit.Test; import cn.itcast.maven.Hello; public class HelloFriendTest { @Test public void tesHelloFriend(){ HelloFriend helloFriend = new HelloFriend(); String results = helloFriend.sayHelloToFriend("litingwei"); System.out.println(results); } } |
1.4.4. 命令测试
l 在HelloFriend目录下执行 mvn clean mvn compile mvn test 都正常
l 在HelloFriend目录下执行命令mvn package 系统报错说没有找到依赖, 因为HelloFriend依赖Hello模块,但是此模块在个人仓库和中央仓库中并不存在
l 需要重新构建Hello第一个项目并安装到数据仓库, 在Hello根目录下执行mvn clean install, 就会部署的中央仓库中
1.5. Maven与Eclipse整合
1.5.1. 配置maven插件
1.5.2. user settings
1.6. Maven部署到Tomcat中
1.6.1. 创建Java项目
l 在MyEclipse创建项目的时候选择Maven Project
l 在构件向导的时候选择quickstart注意, 此向导也是插件,第一次使用的时候.也要从远程仓库中下载相应的jar包, 因此需要网络环境
l 设置当前模块的坐标,和相应的版本号
l 创建完毕后默认生成的项目包目录如下
l 通过在pom.xml中配置相应Hello.jar即可
<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>Hello3</groupId> <artifactId>Hello3</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <!-- 当前Maven模块的相关信息,可选信息 --> <name>Hello3</name> <url>http://maven.apache.org</url> <!-- 设置常量, 下面可以通过${project.build.sourceEncoding}来引用,一般来说版本号设置在此处 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- 依赖管理 --> <dependencies> <!-- 依赖Junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <!-- 依赖前面的Hello, 那么在仓库中必须拥有 Hello的坐标 --> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies> </project> |
l 通过在pom.xml中单击右键选择相应的命令即可
1.6.2. 创建Web项目
l 选择创建一个普通的web工程
l 设置相应的坐标
l 如果采用src缺省的包结构,则pom.xm中需要指定编译和调试的目录.
<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>web</groupId> <artifactId>web</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <!-- 配置常量 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jstl.version>1.2</jstl.version> <compiler.version>1.6</compiler.version> </properties> <!-- 定义依赖管理 --> <dependencies> <!-- 定义需要依赖的系统jar, provided则在打包的时候不会包含 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <!-- 定义依赖的第三方包,compile 则打包的时候会自动加载到lib目录中 --> <dependency> <groupId>cn.itcast.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies> <!-- 用来定义构建阶段的标签 --> <build> <!-- 由于采用的非Maven的约定,则在构建的时候要指定的目录 --> <sourceDirectory>${basedir}/src</sourceDirectory> <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory> <resources> <!-- 资源文件也存放到src中但排除 *.java --> <resource> <directory>${basedir}/src</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources> <plugins> <!-- 配置相应的打包插件 --> <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <webappDirectory>${basedir}/WebRoot</webappDirectory> <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${compiler.version}</source> <target>${compiler.version}</target> </configuration> </plugin> </plugins> </build> </project> |
l 在index.jsp页面中添加如下代码
<body> <% // 要导入相应: cn.itcast.maven.* Hello hello=new Hello(); out.println(hello.sayHello("admin")); %> </body> |
1.7. Maven私服
1.7.1. 关于中央仓库注意事项
l 地址: 目前来说: http://repo1.maven.org/maven2/是真正的Maven中央仓库的地址,该地址内置在Maven的源码中其他的都是镜像
l 索引: 中央仓库带有索引文件以方便用户对其进行搜索,完整的索引文件大小约为60M,索引每周更新一次
l 黑名单: 如果某个IP地址恶意的下载中央仓库内容,例如全公司100台机器使用同一个IP反复下载,这个IP(甚至是IP段)会进入黑名单,因此稍有规模的使用Maven时,应该用Nexus架设私服
1.7.2. 为什么需要私服
为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库
1.7.3. Nexus环境搭建
第一步:下载nexus-webapp-1.9.2.4.war包,然后拷贝到tomcat下的webapps目录中
第二步:启动tomcat 默认登录账户密码为: admin admin123
第三步:访问http://localhost:8080/项目名称/
1.7.4. 认识repository
Nexus仓库的默认的地址, nexus-2.1.2\WEB-INF\plexus.properties 中定义的
在Views/Repositories-->Repositories里进行配置, nexus里可以配置3种类型的仓库,分别是proxy、hosted、group
proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用
Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里
Group:是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存。我今天就发现,明明构件已经更新了,在浏览器里却看不到,还以为是BUG,其实是被浏览器缓存了
virtual:也是中央仓库镜像,支持M1老版本
1.7.5. 每个仓库的作用
3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库 |
1.7.6. Central Repository
最关键的一个配置, 就是Central Repository的proxy配置,因为大部分的构件,都是要通过这个proxy得到的,
1.7.7. 配置Hosted Repository
一般会配置3个hosted repository, 分别是3rd party、Snapshots、Releases,分别用来保存第三方jar(典型的比如ojdbc6.jar),项目组内部的快照、项目组内部的发布版, 这里并没有什么特别的配置,只是Deployment Policy这个选项,一般Snapshots会配置成允许,而Releases和3rd party会设置为禁止
1.7.8. 配置group repository
前面说过group其实是一个虚拟的仓库, 通过对实体仓库(proxy、hosted)进行聚合, 对外暴露一个统一的地址这里要注意的是,放到左边的仓库,才是会被聚合的仓库
1.7.9. 从私服中下载资源
l 可以在支持Maven的项目中进行如下配置
<repositories> <repository> <id>shop</id> <name>仓库介绍</name> <url>http://localhost:8080/nexus-2.1.2/content/groups/public/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>plugin</id> <name>插件下载地址</name> <url>http://localhost:8080/nexus-2.1.2/content/groups/public/</url> </pluginRepository> </pluginRepositories> |
l 也可以把地址配置在setting.xml的<profiles>标签中这样对所有项目都生效
<profiles> <repositories> <repository> <id>shop</id> <name>仓库介绍</name> <url>http://localhost:8080/nexus-2.1.2/content/groups/public/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>plugin</id> <name>插件下载地址</name> <url>http://localhost:8080/nexus-2.1.2/content/groups/public/</url> </pluginRepository> </pluginRepositories> </profiles> |
l 把本地项目提交到私服中
<distributionManagement> <repository> <!-- 要在个人的setting.xml中配置上传的密码 --> <id>snapshots</id> <name>snapshots 测试版</name> <!-- nexus中查找相应的地址--> <url>http://localhost:8080/nexus/content/repositories /snapshots/</url> </repository> </distributionManagement> <servers> <!-- 在.m2\setting.xml中 配置了要上传仓库的密码 --> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server> <server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> </servers> |
1.8. 其它小技巧
1.8.1. 跳过单元测试
你可能想要配置 Maven 使其完全跳过单元测试。 可能你有一个很大的系统,单元测试需要花好多分钟来完成,而你不想在生成最终输出前等单元测试完成。 你可能正工作在一个遗留系统上面,这个系统有一系列的失败的单元测试,你可能仅仅想要生成一个 JAR 而不是去修复所有的单元测试。 Maven 提供了跳过单元测试的能力
l 采用命令的方式跳过单元测试
$ mvn install -D maven.test.skip=true
l 采用配置的方式跳过单元测试
surefire 插件用来在maven构建生命周期的test 的插件, 如果每次都不需要运行test则通过简单的配置即可
<build> <plugins> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.7.1</version> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build> |
1.8.2. 代码的方式生成maven骨架
Archetype可以帮助我们迅速地构建起项目的骨架,在前面的例子中,我们完全可以在Archetype生成的骨架的基础上开发Hello World项目以节省大量时间,如果没有制定packageName则默认与goupId相同
mvn archetype:create -D groupId=com.test.maven -D artifactId=test1 -D packageName=a.b.c |
maven3.0的更多相关文章
- Windows下 maven3.0.4的安装步骤+maven配置本地仓库
简单讲下maven的安装步骤: 1.在安装maven之前,先确保已经安装JDK1.6及以上版本,并且配置好环境变量. 2.下载maven3,最新版本是Maven3.0.4 ,下载地址:http://m ...
- 2016032101 - eclipse3.7+jdk1.6+maven3.0.5
公司使用jdk1.6做开发环境,那么使用的eclipse需要下载3.7版本,因为eclipse4以上必须使用jdk1.7及其以上版本. 1.资源下载 jdk1.6需要去oracle官网去下载,可能需要 ...
- Maven3.0.3的环境变量配置
Maven3.0.3的环境变量配置 //该配置经过实际验证已经可以使用.验证的环境maven3.0.3(官网的目前最新版)1 windows maven3的安装 标签: #maven | 发布时间: ...
- Windows 7下Maven3.0.3的安装
1.去Maven官网下载zip的maven3.0.3压缩包 2.将安装包解压到某目录,我在这里解压到D:\Program Files (x86)\apache-maven-3.0.3 3.设置系统变量 ...
- Maven3.0 服务器配置搭建
搭建nexus私服,原因很简单,不必多说,本文重点说下最新版的Maven 3.0.x系列的安装步骤. 最新版的网上中文资料很少,参考后都没成功.最后在官网的英文资料中得到答案,成功搞定. 1.确定我们 ...
- Linux 安装配置maven3.0 以及搭建nexus私服
http://carvin.iteye.com/blog/785365 一.软件准备 1.apache-maven-3.0-bin.tar.gz 下载地址:http://www.apache.org/ ...
- windows Maven3.0 服务器配置搭建
搭建nexus私服,原因很简单,不必多说,本文重点说下最新版的Maven 3.0.x系列的安装步骤. 最新版的网上中文资料很少,参考后都没成功.最后在官网的英文资料中得到答案,成功搞定. 1.确定我们 ...
- Centos 6.5 X64 环境下编译 hadoop 2.6.0 --已验证
Centos 6.5 x64 hadoop 2.6.0 jdk 1.7 protobuf-2.5.0 maven-3.0.5 set environment export JAVA_HOME=/hom ...
- Maven3路程(六)用Maven创建Spring3 MVC项目
Maven3路程(六)用Maven创建Spring3 MVC项目 一. 环境 spring-framework-3.2.4.RELEASE jdk1.7.0_11 Maven3.0.5 ec ...
随机推荐
- zoj 3659
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3659 #include<cstdio> #inclu ...
- RCMTM _百度百科
RCMTM _百度百科 RCMTM
- H - Parity game-poj1733(需要离散化)
题意:给一个序列这个序列都是由0和1组成,现在随意拿出来一个序列,然后说出他的和是奇数还是偶数,因为有可能存在假话,让你判断前多少条没有假话,也就是查找第一个假话的位置-1 ///////////// ...
- 【OSGi】OSGi生命周期
1 生命周期管理 对于非模块化应用,生命周期将应用作为一个整体来操作: 而对于模块化应用,则可以以细粒度的方式来管理应用的某一个独立部分. OSGi生命周期管理 OSGi生命周期层有两种不同的作用: ...
- 字符集转换 字符类型转换 utf-8 gb2312 url
vs默认是GB2312编码,你看到的程序源代码是,输出结果是,内部存储是, 1 如果你想改变内部存储可以用下面的这些函数 2 如果你想改变源代码的存储方式你可以用文本编辑工具修改之后重新编译 3 如果 ...
- RESTEasy + JBOSS 7 Hello world application---reference
RESTEasy is JBOSS provided implementation of JAX-RS specification for building RESTful Web Services ...
- Android开发ScrollView上下左右滑动事件冲突整理一(根据事件)
主要通过重写 onInterceptTouchEvent 事件来解决,代码如下: package com.cm.android.pad.view.itemView; import android.co ...
- 使用downloadmanager调用系统的下载
/** * 文件名 UpdateDownload.java * 包含类名列表 com.issmobile.numlibrary.tool * 版本信息 版本号 * 创建日期 2014年7月14日 ...
- Linux磁盘管理:LVM逻辑卷的创建及使用
一.创建LVM逻辑卷 事先添加了三块虚拟物理磁盘/dev/sdb 1G, /dev/sdc 2G, /dev/sdd 3G 使用fdisk –l命令查看: [root@localhost ~]# fd ...
- JPA事务回滚配置
<!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.or ...