初学者窥Maven(一)

一.为什么要用Maven?或者说用Maven有什么好处?

  1. 假如你正在Eclipse下开发两个Java项目,姑且把它们称为A、B,其中A项目中的一些功能依赖于B项目中的某些类,那么如何维系这种依赖关系的呢?

A : 很简单,这不就是跟我们之前写程序时一样吗,需要用哪个项目中的哪些类,也就是用别人写好了的功能代码,导入jar包即可。所以这里也如此,可以将B项目打成jar包,然后在A项目的Library下导入B的jar文件,这样,A项目就可以调用B项目中的某些类了。

       这样做有缺陷:

如果在开发过程中,发现B中的bug,则必须将B项目修改好,并重新将B打包并对A项目进行重编译操作。

       并且:

若A项目只引用了B项目,当然可以这样做,但是一个大型项目引用了十几个甚至几十个甚至上百个其他的jar包呢?这样改到什么时候?
这时候是不是改的很心酸?

       在完成A项目的开发后,为了保证A的正常运行,就需要依赖B(就像在使用某个jar包时必须依赖另外一个jar一样),怎么解决?

两种解决方案:
1.选择将B打包入A中
2.将B也发布出去,等别人需要用A时,告诉开发者,想要用A就必须在导入Bjar包。
两者都很麻烦。前者可能造成资源的浪费,(比如,开发者可能正在开发依赖B的其它项目,B已经存储到本地了,在导入A的jar包的话,就有了两个B的jar)
后者是我们经常遇到的,找各种jar包

       我们在开发一个项目或者DEMO,比如用SSH框架,那么就需要将SSH框架所用的几十个依赖,认为手动的去解决,很繁琐,也不方便,所以使用Maven帮我们管理就方便多了。那么你不经想要问maven到底是什么?


二.Maven到底是什么?
       Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。[百度百科]

       百度的解释就是文言文,弄得你一团糟。看过几遍都不会记得是什么。不过如果你真的了解maven,肯定会觉得总结的很精辟。

       如果没有明白maven是什么,上面的话看不看没区别。Maven的核心功能便是合理叙述项目间的依赖关系,也就是通过pom.xml来配置获取jar包,而不是手动的去添加jar包。

  • 怎么通过pom.xml的配置就可以获取到jar包呢?pom.xml配置文件从何而来?

如果需要使用pom.xml来获取jar包,那么首先该项目就必须为maven项目,maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)。

       所以,根据上一段的描述,我们最终的目的就是学会如何在pom.xml中配置获取到我们想要的jar包,在此之前我们就必须了解如何创建maven项目,maven项目的结构是怎样,与普通java,web项目的区别在哪里,还有如何配置pom.xml获取到对应的jar包等等,这里提前了解一下我们如何通过pom.xml文件获取到想要的jar的,具体后面会详细讲解该配置文件。
pom.xml获取junit的jar包的编写。
这里写图片描述

  • 为什么通过groupId、artifactId、version三个属性就能定位一个jar包?

加入上面的pom.xml文件属于A项目,那么A项目肯定是一个maven项目,通过上面这三个属性能够找到junit对应版本的jar包,那么junit项目肯定也是一个maven项目,junit的maven项目中的pom.xml文件就会有三个标识符,比如像下图这样,然后别的maven项目就能通过这三个属性来找到junit项目的jar包了。所以,在每个创建的maven项目时都会要求写上这三个属性值的。
这里写图片描述

三.maven的安装
       这一步maven环境的配置,我觉得有必要安装一下,目的为了使用命令行创建maven项目,和使用命令行操作maven项目。这里不细讲,给出链接,跟安装jdk环境类似,Maven的安装教程

四、仓库的概念
       通过pom.xml中的配置,就能够获取到想要的jar包(还没讲解如何配置先需要了解一下仓库的概念),但是这些jar是在哪里呢?就是我们从哪里获取到的这些jar包?答案就是仓库。

仓库分为:本地仓库、第三方仓库(私服)、中央仓库

1. 本地仓库
       Maven会将工程中依赖的构件(Jar包)从远程下载到本机一个目录下管理,每个电脑默认的仓库是在 $user.home/.m2/repository下,

我的是在D:\FeiLong Soft\Essential\Development\repository(可以跳过本部分,因为正常一般不这样配置,直接跳到一下标***开头部分),如下:

这里写图片描述

这个可以配置。我的是根据这个文件配置的,如下,文件在C盘maven.m2下,这是某某提前跟我配好的,不细说,如果没有经过配置应该是在$user.home/.m2/repository下,

这里写图片描述

我们如果想更改配置文件位置,可以更改repository的位置,进入setting.xml文件,更改如下设置即可:

这里写图片描述

       ***上面应该跳过,跳到这里)一般我们会修改本地仓库位置,自己创建一个文件夹,在从网上下载一个拥有相对完整的所有jar包的结合,都丢到本地仓库中,然后每次写项目,直接从本地仓库里拿就行了,一般大家修改本地仓库的文件在C:\maven\apache-maven-3.3.9\conf下,
这里写图片描述
打开setting.xml文件,即可修改路径,为了避免干扰,可以
修改如下部分,
这里写图片描述
就是我们自己创建的本地仓库,将网上下载的所有jar包,都丢到该目录下,我们就可以直接通过maven的pom.xml文件直接拿。

2. 第三方仓库
       第三方仓库,又称为内部中心仓库,也称为私服

          私服:一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可作为公用类库镜像缓存,减少在外部访问和下载的频率。(使用私服为了减少对中央仓库的访问)

          私服可以使用的是局域网,中央仓库必须使用外网

          也就是一般公司都会创建这种第三方仓库,保证项目开发时,项目所需用的jar都从该仓库中拿,每个人的版本就都一样。

          注意:连接私服,需要单独配置。如果没有配置私服,默认不使用

3. 中央仓库
Maven内置了远程公用仓库:中央仓库
          这个公共仓库是由Maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件。目前是以java为主

          工程依赖的jar包如果本地仓库没有,默认从中央仓库下载
总结:获取jar包的过程(以有私服为例):
这里写图片描述

五、使用命令行管理maven项目
5.1、创建maven java项目
自己创建一个文件夹,在该文件夹下按shift+右击,点开使用命令行模式,这样创建的maven[java]项目就在该文件夹下了。

命令:mvn archetype:create -DgroupId=com.wuhao.maven.quickstart
-DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstart

mvn:核心命令

archetype:create:创建项目,现在maven高一点的版本都弃用了create命令而使用generate命令了。

-DgroupId=com.wuhao.maven.quickstart :创建该maven项目时的groupId是什么,该作用在上面已经解释了。一般使用包名的写法。因为包名是用公司的域名的反写,独一无二

-DartifactId=simple:创建该maven项目时的artifactId是什么,就是项目名称

-DarchetypeArtifactId=maven-archetype-quickstart:表示创建的是[maven]java项目
这里写图片描述
运行成功后:
这里写图片描述
在D:\java\maven\demo下就会生成一个simple的文件,该文件就是我们的maven java项目
运行的前提:需要联网,必须上网下载一个小文件
这里写图片描述

5.2、maven java项目结构
这里写图片描述
       图中有一个target目录,是因为将该java项目进行了编译,src/main/java下的源代码就会编译成.class文件放入target目录中,target就是输出目录。

5.3、创建 maven web 项目
          命令:mvn archetype:create -DgroupId=com.wuhao.maven.quickstart -DartifactId=myWebApp -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot

          其他都差不多,创建maven web项目的话 -DarchetypeArtifactId=maven-archetype-webapp 比创建java项目多了一个 -Dversion=0.01-snapshot, 在创建java项目的时候也可以加上这个,如果不写,会默认帮我们加上1.0-snapshot。
         这里写图片描述
    在D:\java\maven\demo下就会生成一个myWebApp的文件 
      
5.4、maven web项目结构

          pom.xml 核心配置
          src/main/java java源码
          src/main/resources java配置
          src/main/webapp myeclipse web项目中 WebRoot目录
             |– WEB-INF
            |– web.xml
          src/test 测试
          target 输出目录

5.5、命令操作maven java或web项目

          编译:mvn compile  –src/main/java目录java源码编译生成class (target目录下)

          测试:mvn test    –src/test/java 目录编译

          清理:mvn clean    –删除target目录,也就是将class文件等删除

          打包:mvn package  –生成压缩文件:java项目#jar包;web项目#war包,也是放在target目录下

          安装:mvn install   –将压缩文件(jar或者war)上传到本地仓库

          部署|发布:mvn deploy  –将压缩文件上传私服

5.6、例子:使用命令操作maven java项目

          注意:使用命令时,必须在maven java项目的根目录下,及可以看到pom.xml

          描述:将maven java项目打包上传到本地仓库供别人调用

            使用 mvn install 
       这里写图片描述
在本地仓库中查看是否有该项目             D:\java\maven\repository\com\wuhao\maven\quickstart\simple\1.0-SNAPSHOT
这里写图片描述

参考博客
Maven(一) maven到底是个啥玩意

猜你喜欢

转载自blog.csdn.net/u010986518/article/details/80287910