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>

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0