Maven入门与学习
Maven可以帮我们解决什么场景问题
都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行?
为什么在我的机器上可以正常打包,而配置管理员却打不出来?
项目组加入了新的人员,我要给他说明编译环境如何设置,但是让我挠头的是,有些细节我也记不清楚了
我的项目依赖一些jar包,我应该把他们放哪里?放源码库里?
这是我开发的第二个项目,还是需要上面的那些jar包,再把它们复制到我当前项目的svn库里吧
现在是第三次,再复制一次吧—–这样真的好吗?
我写了一个数据库相关的通用类,并且推荐给了其他项目组,现在已经有五个项目组在使用它了,今天我发现了一个bug,并修正了它,我会把jar包通过邮件发给其他项目组,这不是一个好的分发机制,太多的环节可能导致出现bug
项目进入测试阶段,每天都要向测试服务器部署一版。每次都手动部署,太麻烦了
Maven的概念
maven翻译为“专家”,“内行”。
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
Maven的功能:
项目构建
依赖管理
什么是构建
为什么使用Maven
Eclipse
手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成
每个人的IDE配置都不同,很容易出现本地代码换个地方编译就出错
Ant
没有一个约定的目录结构
必须明确让ant做什么,什么时候做,然后编译,打包
没有生命周期,必须定义目标及其实现的任务序列
没有集成依赖管理
Maven
拥有约定,知道你的代码在哪里,放到哪里去
拥有一个生命周期,例如执行mvninstall就可以自动执行编译,测试,打包等构建过程只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情
Maven的模型
Maven的安装及配置
下载Maven
官方网站:http://maven.apache.org
本课程使用的maven的版本为3.0.5
Maven的安装
安装jdk,要求1.6或以上版本
解压maven的压缩包。解压目录最好不要有中文。
配置系统环境变量,MAVEN_HOME
设置环境变量Path,将%MAVEN_HOME%\bin加入Path中,一定要注意要用分号;与其他值隔开
验证安装是否成功,打开cmd窗口,敲入mvn-v查看
Maven安装目录分析
bin:含有mvn运行的脚本
boot:含有plexus-classworlds类加载器框架。plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置,Maven使用该框架加载自己的类库。对于一般的Maven用户来说,不必关心该文件。
conf:含有settings.xml配置文件,此配置为maven的全局配置。
lib:含有Maven运行时所需要的java类库
Maven的配置
Maven的默认配置
在MAVEN_HOME下的配置文件:MAVEN_HOME/conf/settings.xml是maven全局的配置。如果不对其修改的话,默认本地仓库的路径就是:当前用户路径C:\Users[UserName].m2
localRepository:用户仓库,用于检索依赖包路径
用户配置
配置方法:
在你想保存仓库的位置创建一个目录作为仓库目录。例如在d:盘创建一个MavenRepository目录
在其中创建一个名为“repository”的目录。
修改MAVEN_HOME\conf\settings.xml
!注意:
用户级别的仓库在全局配置中一旦设置,全局配置将不再生效,转用用户所设置的仓库,否则使用默认路径仓库
创建Maven工程
遵从Maven约定
src/main/java——存放项目的.java文件
src/main/resources——存放项目资源文件,如spring,hibernate配置文件
src/test/java——存放所有测试.java文件,如JUnit测试类
src/test/resources——测试资源文件
target——项目输出位置
pom.xml——maven项目核心配置文件
Project
|-src
||-main
|||-java——存放项目的.java文件
|||-resources——存放项目资源文件,如spring,hibernate配置文件
||-test
||-java——存放所有测试.java文件,如JUnit测试类
||-resources——测试资源文件
|-target——目标文件输出位置例如.class、.jar、.war文件
|-pom.xml——maven项目核心配置文件
创建maven工程
首先建立MavenHelloWorld项目同时建立Maven约定的目录结构
MavenHelloWorld
|-src
||-main
|||-java——存放项目的.java文件
|||-resources——(暂时省略)
||-test
||-java——存放所有测试.java文件,如JUnit测试类
||-resources——(暂时省略)
|-target——(不手工创建)
|-pom.xml——maven项目核心配置文件
创建HelloWorld.java
在src/main/java/cn/change/maven目录下新建文件Hello.java
packagecn.change.maven;
publicclassHelloWorld{
publicStringsayHello(Stringname){
return"HelloWorld:"+name+"!";
}
}
新建测试文件HelloTest.java
在/src/test/java/cn/change/maven目录下新建测试文件HelloTest.java
packagecn.change.maven;
importorg.junit.Test;
importstaticjunit.framework.Assert.;
publicclassHelloWorldTest{
@Test
publicvoidtestHello(){
HelloWorldhello=newHelloWorld();
Stringresults=hello.sayHello("maven");
assertEquals("HelloWorld:maven!",results);
}
}
创建pom.xml
在项目MavenHelloWorld根目录建立pom.xml
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
com.bshinfo.el
ccb_el_manager
0.0.1-SNAPSHOT
ccb_el_managerMavenWebapp
http://maven.apache.org
war
ccb_el_manager
junit
junit
4.11
test
org.springframework
spring-core
4.2.5.RELEASE
org.springframework
spring-context
4.2.5.RELEASE
org.springframework
spring-context-support
4.2.5.RELEASE
org.springframework
spring-tx
4.2.5.RELEASE
org.springframework
spring-aop
4.2.5.RELEASE
org.springframework
spring-beans
4.2.5.RELEASE
org.springframework
spring-jdbc
4.2.5.RELEASE
org.springframework.security
spring-security-core
4.0.4.RELEASE
org.springframework.security
spring-security-web
4.0.4.RELEASE
org.springframework.security
spring-security-config
4.0.4.RELEASE
org.springframework.security
spring-security-cas
4.0.4.RELEASE
org.springframework
spring-jms
4.2.5.RELEASE
org.springframework
spring-web
4.2.5.RELEASE
org.springframework
spring-webmvc
4.2.5.RELEASE
org.mybatis
mybatis
3.3.1
com.github.miemiedev
mybatis-paginator
1.2.10
org.mybatis
mybatis-spring
1.2.4
mysql
mysql-connector-java
5.1.38
commons-dbcp
commons-dbcp
1.4
commons-pool
commons-pool
1.6
log4j
log4j
1.2.17
org.slf4j
slf4j-api
1.7.19
org.slf4j
slf4j-log4j12
1.7.19
org.freemarker
freemarker
2.3.23
org.apache.tomcat
tomcat-servlet-api
8.0.32
org.aspectj
aspectjweaver
1.8.9
org.aspectj
aspectjrt
1.8.9
org.aspectj
aspectjtools
1.8.9
org.apache.activemq
activemq-core
5.7.0
org.apache.activemq
activemq-pool
5.13.2
org.jasig.cas.client
cas-client-core
3.4.1
net.sf.json-lib
json-lib
2.4
jdk15
commons-codec
commons-codec
1.10
org.codehaus.jackson
jackson-mapper-asl
1.5.0
commons-fileupload
commons-fileupload
1.2.2
org.apache.commons
commons-io
1.3.2
测试maven命令
打开cmd命令行,进入Hello项目根目录(包含有pom.xml文件的目录)
mvncompile命令
执行mvncompile命令
执行完毕后,生成了maven工程编译完成后字节码文件的生成目录target
mvnclean命令
cmd中继续录入mvnclean命令
执行完毕后,字节码生成目录被删除
mvntest命令
cmd中录入mvntest命令
执行完毕后,字节码生成目录中生成了被测试类与测试类的编译字节码和测试执行过程日志与详细报告
mvncleancompile命令
cmd中录入mvncleancompile命令
组合指令,先执行clean,再执行compile,通常应用于上线前执行,清除测试类
mvncleantest命令
cmd中录入mvncleantest命令
组合指令,先执行clean,再执行test,通常应用于测试环节
mvncleanpackage命令
cmd中录入mvncleanpackage命令
组合指令,先执行clean,再执行package,将项目打包,通常应用于发布前
执行过程:
清理————清空环境
编译————编译源码
测试————测试源码
打包————将编译的非测试类打包
mvncleaninstall命令
cmd中录入mvncleaninstall查看仓库,当前项目被发布到仓库中
组合指令,先执行clean,再执行install,将项目打包,通常应用于发布前
执行过程:
清理————清空环境
编译————编译源码
测试————测试源码
打包————将编译的非测试类打包
部署————将打好的包发布到资源仓库中
这里写图片描述
错误范例
说明:MAVEN命令输入错误,命令名称显示在[ERROR]Unknownlifecyclephase“compoile”
引号中的内容为输入错误的名称
[ERROR]Unknownlifecyclephase“compoile”.Youmustspecifyavalidlifecyclep
haseoragoalintheformat:or:
|
|