Maven是 Apache 下的一个纯 Java 开发的开源项目
基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。
功能
1、Maven模型的Java项目对源代码,单元测试代码、资源、jar包等有规范的目录规划,可以理解为Java的管理工具,可以很方便的注入jar包
2、解决项目之间的依赖关系,版本不一致,版本冲突等问题
3、合理的jar包管理机制
应用场景
从运维角度理解
1、原来项目中的jar包必须手动复制、粘贴到WEB-INF/lib目录下,而借助Maven,可以将jar包仅仅保存在仓库中,有需要使用的工程只需要引用这个文件,并不需要重复复制到工程中。
2、原来的项目中所需要的jar包都是提前下载好的,而Maven在联网状态下会自动下载所需要的jar包。首先在本地仓库中找,找不到就在网上的远程仓库进行下载
3、原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而Maven会自动将被依赖的jar包导进来。
目录结构
比如:你的项目的保存在/tmp/javaapp
目录 | 说明 |
---|---|
/tmp/javaapp | 项目的根目录,存在pom.xml和所有的子目录,默认只有pom.xml文件和src目录 |
/tmp/javaapp/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
/tmp/javaapp/src/test/java | 项目的测试类,比如说Junit代码(java的单元测试框架) |
/tmp/javaapp/src/test/resources | 测试用例使用的资源 |
/tmp/javaapp/src/main/webapp/WEB-INF | web应用文件目录,比如存放web.xml、本地图片、jsp视图页面 |
/tmp/javaapp/target | 打包输出目录,如打包好的jar或者war文件 |
/tmp/javaapp/target/classes | 编辑输出目录,将jar编译后的class文件所在目录 |
/tmp/javaapp/target/test-classes | 测试编译输出目录 |
pom.xml文件说明
project | 根,这是对Project添加一些根元素的约束 |
modelversion | 指定当前Maven模型的版本号 |
packaging | 指定生成包的格式(jar/war/rar/pom/ear) |
parent标签 | 指定父级pom文件引用(继承) |
properties | 定义配置属性、约定开发规范 |
dependencies标签 | 指定开发构件(jar包) |
**groupId ** | 公司名或者组织名。一般来说groupId有三个部分组成,每个部分之间以“.”分隔,第一部分是项目的用途,比如商业用途是com,非商业盈利是org,第二部分是公司名,比如百度,第三部分是项目名 |
artifactId | 可以认为是Maven构建的项目名,比如你的项目中有子项目,就可以使用“项目名—子项目”的命名方式 |
version | 版本号,SNAPSHOT意思为快照,说明该项目还在开发中,是不稳定的版本 |
关于仓库
分为本地仓库和远程仓库
本地仓库
Maven会将工程依赖的构件(jar包),从远程下载到本地一个目录下管理,每个电脑默认的仓库是在”用户家目录下的.m2/repository”
远程仓库
远程仓库中又有第三方仓库和中央仓库
第三方仓库
第三方仓库又称为内部中心仓库,也称为私服
私服:一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可以作为公用类库镜像缓存,减少在外部访问和下载的频率(使用了私服就减少了对中央仓库的访问)
中央仓库
Maven内置了远程公用仓库:http://repo1.maven.org/maven2 这个公共仓库是由Maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件,目前是以Java为主。工程需要的jar包,如果本地仓库没有,默认从中央仓库下载
web.xml:配置文件
classes:存放java文件
lib:存放jar包(纯镜像项目)
META-INF:配置应用程序,扩展程序,类加载程序和服务
纯Java项目jar包
Web项目war包
部署Maven
部署java环境
$ tar zxf jdk-8u201-linux-x64.tar.gz
$ mv jdk1.8.0_201/ /usr/local/java
$ echo 'export JAVA_HOME=/usr/local/java
> export JRE_HOME=/usr/local/java/jre/
> export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
> export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin' >> /etc/profile
$ rm -rf /usr/bin/java
$ source /etc/profile
$ java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
安装Maven
$ tar zxf apache-maven-3.6.0-bin.tar.gz
$ mv apache-maven-3.6.0 /usr/local/maven
# 编写maven命令环境变量
$ echo "export PATH=$PATH:/usr/local/maven/bin" >> /etc/profile
$ source /etc/profile
$ mvn -v # 查看版本号
创建Java项目
第一次创建项目需要从远端maven官网下载东西,所以很慢,耐心等待
$ mvn archetype:generate -DgroupId=cn.kgc.kgcapp -DartifactId=kgcapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
# archetype:指定操作类型,generate是产生项目的意思,老版本为create
# -DarchetypeArtifactId:表示创建项目框架
# maven-archetype-quickstart:代表java项目
# maven-archetype-webapp:代表web项目
# -DinteractiveMode=false:不采用交互模式,不需要人为操作
以上的步骤如果因为网络原因一直创建不成功,是因为创建的项目要从国外的网站下载仓库到本地,所以网络会访问不到。
这里来学会配置阿里云的maven中央仓库,以后的访问中央仓库就是阿里云的了,国内网站,可以轻松访问到
$ vim /usr/local/maven/conf/settings.xml
# Maven配置文件中的<mirrors></mirrors>中存放镜像的位置
# 找到<mirrors>,在其中添加如下代码,注意<mirrors>和<mirror>不一样
<mirror>
<id>aliyun maven</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf> # 代表本机去中央仓库的请求拦截,让阿里云来处理
</mirror>
然后就可以直接使用创建项目的命令来访问阿里云的中央仓库了
创建完的项目目录kgcapp
会直接出现在执行命令的当前目录下
解释jar包内容
java -cp target/kgcapp-1.0-SNAPSHOT.jar cn.kgc.kgcapp.App
Mave的常用指令
前提:执行Maven命令,必须先进入项目根目录
cd kgcapp/
1、mvn compile
编译,将源代码编译生成class文件,编译时会进行下载所需jar包,并生成target
目录,下载过一次之后即使删除了target
目录也不会影响任何操作
mvn后面执行的命令可以理解为是插件,如:archetype/compile
都是插件,这些插件也是依赖于jar包一些文件的,然后可以使用这些插件来对项目进行操作,之后在使用就就不需要下载了
2、mvn test
测试,将测试代码进行编译
3、mvn package
打包 java项目为jar包,web项目为war包
4、mvn install
官方解释为安装,效果为将打成的包传到本地仓库
$ ls /root/.m2/repository/cn/kgc/kgcapp/kgcapp/1.0-SNAPSHOT/kgcapp-1.0-SNAPSHOT.jar
# /root/.m2/repository/cn/kgc/kgcapp/kgcapp/1.0-SNAPSHOT/kgcapp-1.0-SNAPSHOT.jar 本地仓库路径
5、mvn deploy
部署,将项目打成的包上传到私服,目前还没有私服,看下篇文章
6、mvn clean
清理,将编译输出的东西全部清理掉,效果类似于rm -rf target/
mvn命令有自己的生命周期(运行顺序),如:compile、test、package、install、deploy
意思就是如果直接执行后面的命令,会将之前的命令也运行一遍
7、mvn clean package
先清理再打包
先将之前的项目清理,在打包现在的代码项目
8、mvn clean install
先清理再上传
先将之前的项目清理,再上传现在的代码项目
9、mvn clean deploy
先清理再部署
先将之前的项目清理,再部署现在的代码项目
创建Web项目
mvn archetype:generate -DgroupId=cn.kgc.kgcweb -DartifactId=kgcweb -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
将此项目部署到tomcat,没有Tomcat就安装一个,需要使用war包来部署
$ cd kgcweb/ # 进入项目根目录
$ mvn test # 生成测试项目
$ mvn package # 将项目打包
$ ls target/ # 查看生成的kgcweb.war文件
# 复制到Tomcat的Web项目目录下
$ cp target/kgcweb.war /usr/local/tomcat/webapps/
# 启动Tomcat
$ /usr/local/tomcat/bin/startup.sh
# 访问测试
$ curl 192.168.1.4:8080/kgcweb/
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>