maven
Posted tt&yy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven相关的知识,希望对你有一定的参考价值。
一、maven在什么背景下产生的
场景一:
假如在Eclipse下开发两个Java项目,把它们称为A、B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢?在使用Maven前是这样做的,将B项目打包为jar,并在A项目的Library下导入B的jar文件。
这样做有着很明显的缺点:
1.如果在开发过程中,发现B中的bug,则必须重新将B打包并对A项目进行重编译操作;
2.在协同开发A项目时,为了保证其能够正常运行,要么选择将B打包入A中,要么选择将B一样发布出去并告知开发者使用方法(想要用A就必须导入B的jar包)。
显然这两个方法都不太好,前者可能造成资源浪费(比如开发者可能正在开发依赖B的其它项目,B已经存储到本地了),而后者则会为项目正常运行带来风险(一旦把工作交给人工注定会带来一定的失败率)。
场景二:
开发一个项目,或者做一个小demo,比如用SSH框架,那么我们就必须将SSH框架所用的几十个依赖的jar包依次找出来并手动导入,超级繁琐。
因此,类似场景一和场景二这样手动的控制项目间依赖关系显然是一种‘拙劣’的方法。
二、maven是什么
maven的核心功能是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包。
这些jar包是从仓库中获取到的。
仓库分为:本地仓库、第三方仓库(私服)、中央仓库。
1、本地仓库
maven会将工程中依赖的jar包从远程下载到本机一个目录下管理,每个电脑默认的仓库是在 $user.home/.m2/repository下。例如C:UsersAdministrator.m2 epository
一般我们会修改本地仓库位置,自己创建一个文件夹,从网上下载一个拥有相对完整的所有jar包的结合,都丢到本地仓库中,然后每次写项目,直接从本地仓库里拿就行了。修改本地库位置:在$MAVEN_HOME/conf/setting.xml文件中修改,
<!-- localRepository
The path to the local repository maven will use to store artifacts.
Default: ~/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:javamaven
epository</localRepository>
其中D:javamaven epository:就是我们自己创建的本地仓库,将网上下载的所有jar包,都丢到该目录下,我们就可以直接通过maven的pom.xml文件直接拿。
2、第三方仓库
第三方仓库,又称为内部中心仓库,也称为私服。私服一般是由公司自己设立的,只为本公司内部共享使用,可以使用的是局域网。
它既可以作为公司内部构件协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率。(使用私服为了减少对中央仓库的访问)。
一般公司都会创建这种第三方仓库,保证项目开发时,项目所需用的jar包都从该仓库中拿,每个人的版本就都一样。
注意:连接私服,需要单独配置。如果没有配置私服,默认不使用。
3、中央仓库
maven内置了远程公用仓库:http://repo1.maven.org/maven2
这个公共仓库是由maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件。目前是以java为主。工程依赖的jar包如果本地仓库没有,默认从中央仓库下载。中央仓库必须使用外网。
4、获取jar的过程
优先从本地仓库中查找,本地仓库没有,如果配置私服的话就从私服中获取,私服中没有就从中央仓库中获取并下载到本地仓库以便下次直接使用。没有配置私服就直接从中央仓库中获取并下载到本地仓库以便下次直接使用。
三、如何使用
1、安装maven
【检查】确认已经安装jdk,已经环境变量中配置JAVA_HOME,已经修改path。
【下载】从http://maven.apache.org/download.cgi下载所需要的版本的bin.zip文件,本文以3.0.4版本为例,即apache-maven-3.0.4-bin.zip。
【解压】解压maven到某一指定目录,例如:D:env。则D:envapache-maven-3.0.4目录下会有bin、conf、lib等文件夹。
【配置】在环境变量中,新建M2_HOME,设置为D:envapache-maven-3.0.4。修改path变量,在原值之后添加%M2_HOME%bin;。path变量的取值通过分号进行分隔。保存后大功告成,在命令行输入mvn -v 查看maven是否配置成功。
2、创建maven项目
File--->New--->Other--->Maven Project--->选择工作空间Use default Workspace location--->设置项目参数
Group Id:组(类似于java package),Artifact Id:标识(类似于project name),Version:版本,Packaging:打包方式(jar是java项目,war是web项目,pom是maven项目)
3、maven项目目录结构
MavenProjectRoot(项目根目录)
|----src
| |----main
| | |----java ——存放项目的.java文件
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件
| |----test
| | |----java ——存放所有测试.java文件,如JUnit测试类
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件
|----target ——项目输出位置
|----pom.xml ——用于标识该项目是一个Maven项目
3、发布到tomcat服务器
方式一:打war包到tomcat/webapps下,Run as--->Maven Install,之后在target目录下会生成war包,复制到tomcat/webapps目录即完成部署。这种方式和非maven项目没什么区别,就是打包的方式不同。
方式二:使用tomcat-maven插件,自动发布到本地,远程tomcat。
(1)在tomcat的的conf文件夹中,修改tomcat-user.xml,文件,增加启动权限;
tomcat6管理员配置:
<role rolename="manager-gui"/>
<user username="admin" password="admin" roles="manager-gui,manager-script"/>
(2)在pom.xml文件中添加插件
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId> -->
<artifactId>tomcat7-maven-plugin</artifactId> --> <!-- 命令为tomcat7:redeploy -->
<version>2.2-SNAPSHOT</version>
<configuration>
<url>http://localhost:8080/manager</url> <!-- tomcat6部署管理路径 -->
<username>admin</username> <!-- tomcat的管理员账号 -->
<password>admin</password>
<port>8080</port>
<path>/test-maven-web</path> <!-- 部署路径 -->
<charset>UTF-8</charset>
<encoding>UTF-8</encoding>
<!-- 运行redeploy命令前,要能正常访问http://localhost:8080/manager-->
</configuration>
</plugin>
</plugins>
(3)手动启动tomcat,Run as--->Maven build,在goals 中填入 tomcat7:redeploy,重启tomcat。
方式三:直接使用servers部署
以上是关于maven的主要内容,如果未能解决你的问题,请参考以下文章