What's Maven?
称之为项目对象模型(POM),是一个强大的项目构建工具。Maven是使用
Java开发的,因此Maven更多的用于Java项目。不过阿帕奇公司并不认为Maven仅仅是个构建工具,《Maven哲学》:http://blog.csdn.net/kapuliyuehan/article/details/7218057 这里只把它当做构建工具就OK了....
何为构建工具?
构建工具是将软件项目相关的过程自动化的工具。构建一个软件项目通常包含以下一个或者多个过程:
l 创建项目
首先确认项目类型吧,这里有JAVASE项目和JAVAEE项目
l 编码阶段
这个阶段就是编码、添加依赖的Jar包和服务器的配置
l 编译源代码
l 将编译后的代码打包成JAR或者ZIP
l 将代码发布到服务器、仓库或者其他地方。
复习一下如何用命令行编译和运行Java文件,src目录下新建个cmd文件,写上:
@pushd E:\WebTools\mars2wksp\Suck\src
@javac com/suck/JustSuck.java
@java com.suck.JustSuck
@pause
运行打包后的:
@pushd E:\Learning\Level3\Maven\j2se
@java -jar Suck.jar
@pause
JAVASE项目就是这样玩的了
web项目则是war包,其实也是个zip包来的,web项目的运行需要到tomcat,右键项目导出打包成war包,丢到webapps目录里在startup就能访问项目中的资源了。其实tomcat就是把它解压一下...
不打包也可以,在eclipse发布运行一下,到temp0 -> wtpwebapps 下把目录直接拷贝到tomcat的webapps下就OK了。不贴图。
有些项目可能需要更多的过程才能构建完成,不过这些过程也可以被整合到构建工具中,因此,也可以实现自动化。
Maven融合了四个阶段(前四个)。
Maven仓库
概念:Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR。
Maven中央仓库中包含了世界上大多数流行的Java构件(Jar包),比如JDBC、Common-io等等,
官方仓库地址:http://repo1.maven.org/maven2/
仓库搜索引擎:http://www.mvnrepository.com/
但这个仓库是在国外的,如果依赖的Jar包都要漂洋过海的下载就太慢了,私服就应运而生,私服:一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。
私服优点:节省自己的外网带宽、加速Maven构建、部署第三方构件、提高稳定性,增强控制、降低中央仓库的负荷。
马云就提供了一个地址:
http://maven.aliyun.com/nexus/#welcome
本地仓库:Maven项目从私服或者中央仓库下载过的Jar包会缓存到本地,以后使用的就是本地的缓存了,私服和中央仓库的压力都会变小。
原理:
建立这个仓库的原因:
1.Jar包下载过于分散导致开发周期延长,maven就提供了中央仓库将所有jar包聚合到一起。
2.私服:中央仓库的网络资源优先,各地就出现了各自的私服,降低中央仓库的服务器压力
,开发者以就近原则从最近的私服上获取Jar包。
3.本地仓库:如果需要下载Jar包,就必须依赖maven软件,maven需要配置私服的地址,配
置本地缓存的jar包位置。
安装Maven
1.从http://maven.apache.org/download.html下载最新的maven,解压到指定目录。
2.配置环境变量
Maven_Home变量值指向maven的根目录,然后path中加上:%Maven_Home%\bin;
至此,到控制台上执行一下 mvn -v ,出现以下字样即表示配置成功了:
3.配置
根目录进入conf文件夹,打开settings.xml,修改一下<localRepository>,本地仓库
配置私服地址:
用马云的私服替换中央仓库。<mirrorOf>那里不要动。
还可以配置一个局域网的:
安装好之后可以开始用maven来创建项目了。
Maven的项目类型和之前的Java项目类似,但目录结构发生了变化。
Maven常用命
mvn archetype:generate :创建 Maven 项目
在哪个目录下使用这个命令,项目就会在哪个目录创建。
命令详解:http://blog.csdn.net/sxdtzhaoxinguo/article/details/46895013
这个命令是用来生成项目骨架的,有1 - 10个选项。
选quickStart ,第七个选项,快速启动。这是个JavaSE的骨架,样例。
groupId表示公司名,类似:org.apache.common
artifactId表示项目名称,同一个公司下可能有多个项目的
version,版本号,默认是1.0-SNAPSHOT,测试版。
(一些软件就是用的这种方式作为标识的,RELEASE则是正式版,发布阶段的版本,稳定)
package 包名,默认不填的话就以公司名作为包名了。
参考:
遇到问题:
在这一步一直卡住,原因是请求从远程服务器上取catalog,因为网络的问题导致的。
加上参数:-DarchetypeCatalog=internal
success之后,目录下就有了这个项目的文件夹了:
项目结构:
src
-> main 这里存放的是Java源代码
-> test 单元测试
这里就不展开说明了。
mvn compile :编译源代码
这个命令要在pom.xml同级目录下运行,运行完之后会有个target目录,里面就是编译好的class文件。
mvn package : 依据项目生成 jar 文件
编译完成之后就是打包了,还是在这级目录运行此命令。 完成之后target目录下会生成个以artifactId + 版本号命名的Jar包:
现在还不能直接运行,因为这个jar包是没有指定main方法的,需要手动指定的,格式:
java -cp 包名.jar main所在的全类名
比如:java -cp TestJar-1.0-SNAPSHOT.jar com.suck.App OK.
生成WEB项目序号选的是10,一样要groupId四个选项的,而且打包方式和JAVASE的方式一毛一样,但生成的是war包,也是在target目录中。war包可以丢到webapps里直接运行的,不多BB。
这个war包其实就是个WebContent的目录结构打包一下:
如果要测试运行,可以用以下命令运行: mvn tomcat:run 很方便
如果之前没用过这个命令,maven会去仓库下载tomcat,需要等一下的。
运行结果:
其他一些命令:
mvn test-compile :编译测试代码
mvn test : 运行应用程序中的单元测试
mvn site : 生成项目相关信息的网站
mvn clean :清除目标目录中的生成结果
mvn install :在本地 Repository 中安装 jar ,当然war也是可以的,运行成功之后可以去
本地仓库中找到安装的这个项目,以package的顺序 com -> suck ..即可找到:
mvn deploy:将jar包发布到远程仓库
mvn eclipse:eclipse :生成 Eclipse 项目文件
运行这个命令呢,项目就会变成eclipse的项目结构:
在eclipse中就可以导入此项目。但首先要关联一下maven,步骤:
点击Installations -> Add -> Directory -> 选中maven根目录,回到此界面:
勾选刚导入的maven。
2. User Settings -> Global Settings 和 User Settings 指向maven安装目录的conf -> settings.xml就OK了。
但这个时候项目会有个错误,原因很简单:tomcat的函数库没有加进来。右键buildPath -> add libraries -> server runtime 把tomcat加进来就OK了