maven是干什么的?

最近在研究后台相关的东西,虽然前端还不是很了解吧~但是计算机一年没写后台代码,我快废掉了呀~emmmmm....他们老是和我说maven,恩恩,那就看看到底是啥?从大神聚集的知乎上拉了一篇过来~存档:

作者:郭无心
链接:https://www.zhihu.com/question/20104186/answer/73797359
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

http://suhuanzheng7784877.iteye.com/blog/1066917

1. 前言

Maven是apache的一个顶级项目,它的出现越来越影响着现在的众多的开源项目,不仅如此,很多公司的很多新项目都采用Maven提倡的方式进行管理。Maven正逐渐侵入我们原先的管理项目的习惯,对于团队的管理,项目的构建,都是一种质的飞跃。当然是我个人的一些项目经验而说的这话。如果原先的团队老大本身的管理非常科学,也有一套其他软件辅助项目的构建、打包、发布等等一系列机制保证。那么Maven可能对其并没有实质性的影响或者是质的飞跃。当然在此也并不是说咱们中国人做出来的项目就管理不善……只是说利用Maven帮助我们构建项目更科学、更有可维护性、更加模块化、模块功能更加职能单一、做出来的项目更加具有可复用性等等好处。当然笔者也是个刚学习Maven的人,我们一起来学习Maven到底为我们带来了什么好处。笔者邮箱已经给出,欢迎与笔者进行学术上的交流。

2. Maven的思想

本来想看完了实战整本,再写总结的,后来觉得还是先写出来吧。哪怕有什么不对的地方再纠正都不晚,就怕到时候看完了一点心得都没有,全忘了就太……所以先将学习的点点滴滴感受写下来,之后结合实例咱们可以反复的推敲。

目前笔者看到的Maven的主要功能是:项目构建;项目构建;项目依赖管理;软件项目持续集成;版本管理;项目的站点描述信息管理;

由此可以看出Maven最主要的体现在了哪2个词?——对了,“项目”和“管理”!加在一起就是项目管理。项目管理是一个很抽象的概念。项目管理既可以指技术上的管理手段,也可以指“以人为本”的非技术因素。诚然,无论是技术还是非技术,项目的成败最大的责任人其实就是项目经理。这里我们抛开人为因素不提,仅就技术上来说,Maven提供了一种思想让团队更科学的管理、构建项目。用配置文件的方式对项目的描述、名称、版本号、项目依赖等等信息进行描述。使之项目描述结构清晰,任何人接手的成本比较低。在项目构建时,利用Maven的“约定大于配置”的思想,可以比Ant脚本构建项目省去不少配置文件的内容。而且一个项目可能依赖于其他的项目和第三方的组件才能顺利完成,Maven提供了仓库的概念,让这些依赖项放进仓库中,项目想要从仓库中去取,其他项目组也需要,OK,从仓库中去取,不必每个人去开源项目的站点去苦苦搜寻了。如此人员的成本、软件维护的成本、沟通的成本、硬件的成本都降下来了。客户笑了、公司老板也笑了、项目经理笑了、团队里面的人员也笑了、Apache社区看到这么多人在用也笑了。给笔者的感觉,现在的开源东西越来越向“敏捷开发”、“极限编程”的方向靠拢。通过Maven辅助管理项目,更能发现项目中哪些模块是重复的轮子。

3. Maven的环境搭建

下面我们来看看Maven的环境搭建。首先从Apache网站下载Maven。下载url是:http://maven.apache.org/download.html。笔者下载的是Maven 3.0.3版本。下载下来的包结构如下

bin就不用说了,就是Maven的一些命令参数,boot里面是Maven自己的类加载器,咱们也不必理会。conf里面有个settings.xml就是本机Maven的总配置信息。lib是Maven运行时需要的类库。将bin目录和JDK的bin目录一样设置为系统的PATH。这样在命令行就能直接运行Maven指令了。

保持网络畅通,在命令行执行一条语句

Java代码

  1. mvn help:system

会从网上下载很多东西,本地用户的临时文件夹,会生成一个临时Maven文件目录,用于存储本地资源仓库。比如在C:\Users\liuyan下面有个文件夹叫做.m2

将刚刚提到的settings.xml拷贝到C:\Users\liuyan\.m2下面,如此Maven就算在本机安装好了。

开发工具的选用,笔者使用的是Myeclipse8.6版本,此IDE已经集成了Maven插件Maven4Myeclipse,仅需要将总配置信息配置上即可。在Myeclipse点击window菜单,打开preferences选项。之后点击到myeclipse的maven4myeclipse节点,如下图所示。

4. Maven使用入门

首先我们先写一个非常简单的小项目(我们姑且称之为项目啊),项目结构如下图所示

src.main.java是项目代码文件夹、src.test.java是项目单元测试文件夹、src.main.resource是放置项目资源文件、配置文件文件夹。下面我们看项目代码

一个简单的类com.liuyan.maven.helloword.HelloWorld

Java代码

  1. package com.liuyan.maven.helloword;
  2. public class HelloWorld {
  3. public String sayHello() {
  4. return "hello maven";
  5. }
  6. /**
  7. * @param args
  8. */
  9. public static void main(String[] args) {
  10. System.out.println(new HelloWorld().sayHello());
  11. }
  12. }

在此项目的根目录下有一个pom.xml文件,内容如下

Java代码

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.liuyan.maven</groupId>
  5. <artifactId>MavenDemo</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. </project>

进入控制台,将当前目录cd到与pom.xml同级的文件夹下面。执行命令

Java代码

  1. mvn clean compile

因为笔者写总结前之前下载了相关包,所以此时相关输出download包的信息少一些

Java代码

  1. [INFO] Scanning for projects...
  2. [INFO]
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Building MavenDemo 0.0.1-SNAPSHOT
  5. [INFO] ------------------------------------------------------------------------
  6. [INFO]
  7. [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ MavenDemo ---
  8. [INFO] Deleting E:\Genuitec\ws\MavenDemo\target
  9. [INFO]
  10. [INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ MavenDem
  11. o ---
  12. [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e
  13. . build is platform dependent!
  14. [INFO] skip non existing resourceDirectory E:\Genuitec\ws\MavenDemo\src\main\res
  15. ources
  16. [INFO]
  17. [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ MavenDemo ---
  18. [WARNING] File encoding has not been set, using platform encoding GBK, i.e. buil
  19. d is platform dependent!
  20. [INFO] Compiling 1 source file to E:\Genuitec\ws\MavenDemo\target\classes
  21. [INFO] ------------------------------------------------------------------------
  22. [INFO] BUILD SUCCESS
  23. [INFO] ------------------------------------------------------------------------
  24. [INFO] Total time: 2.044s
  25. [INFO] Finished at: Sat May 28 16:23:07 CST 2011
  26. [INFO] Final Memory: 5M/15M
  27. [INFO] ------------------------------------------------------------------------

执行后造成的结果。就是项目的根路径下出现了一个taget文件夹

里面就是编译后的class类。经理过来说,你需要进行单元测试才能发布出来给大家用。Ok,我们在源码包——src/test/java下面开始编写junit单元测试类。

单元测试代码如下

Java代码

  1. package com.liuyan.maven.helloword;
  2. import org.junit.Test;
  3. import org.junit.Assert;
  4. public class TestHelloWorld {
  5. @Test
  6. public void testSayHello() {
  7. HelloWorld helloWorld = new HelloWorld();
  8. Assert.assertEquals(helloWorld.sayHello(), "hello maven");
  9. }
  10. }

之后我们因为使用了junit单元测试,那么就是说我们这个项目依赖了它。修改一下pom.xml文件内容,如下

Java代码

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.liuyan.maven</groupId>
  5. <artifactId>MavenDemo</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <dependencies>
  8. <dependency>
  9. <groupId>junit</groupId>
  10. <artifactId>junit</artifactId>
  11. <version>4.7</version>
  12. <scope>test</scope>
  13. </dependency>
  14. </dependencies>
  15. </project>

进入命令行,执行命令

Java代码

  1. mvn clean test

执行后观察一下taget文件夹如下图,多出了test-classes文件夹和另外2个咱们暂时不用去管的文件夹。

之后在观察一下本地的临时仓库C:\Users\liuyan\.m2\repository,会多出文件夹junit,下载的版本是4.7。

如果我们想把项目打成jar的形式输出出去呢?在项目根目录下执行

Java代码

  1. mvn clean package

执行后效果如下

生成了一个jar包,至于SNAPSHOT是快照的意思,快照就是项目暂时还不稳定的意思。

打包测试后没问题了,想把此项目当做Maven的本地资源仓库,为其他的项目也能提供服务,可以这么做。

执行命令

Java代码

  1. mvn clean install

执行后本地的临时库文件多了你自己的这个项目。这样别的项目需要你这个项目提供服务的时候就可以从本地Mavne库中提取相应的jar了。

5. 利用IDE构建POM.xml骨架

现在的形式是这样,Maven虽然如火如荼,但是支持Maven的各种IDE插件确实还有很多不少的缺陷。正所谓名不正则言不顺,总给人感觉IDE不支持的开源项目都是“非主流”,呵呵,确实现在Maven在IDE中存在各种各样的问题,比如就刚才简单的命令在dos命令行就可以顺利执行,到了Myeclipse怎么就不行了呢。笔者在此仅仅使用IDE构建一下pom.xml文件,因为个人感觉利用IDE执行Maven命令其实意义不是很大,因为到了linux环境下还是需要手工执行Maven命令的。

使用Myeclipse工具可以为开发者提供良好的可视化编辑POM.xml文件

6. 总结

这算是开张了,本次仅仅介绍了Maven的环境搭建和入门命令,还了解了一些Maven的思想。之后我们会结合书里面的小案例来一步步的学习Maven的特性。

原文地址:https://www.cnblogs.com/lilala-world/p/8525489.html

时间: 2024-11-13 10:47:10

maven是干什么的?的相关文章

Maven 是干什么的,为什么要用【整理】

Maven是什么,以及为什么要使用Maven Maven是什么,以及为什么要使用Maven 参考书籍(推荐大家购买实体书):<Maven实战>(国内首本Maven著作)(Maven的安装.配置及使用入门) 1.概述 Maven是一个构建工具,服务与构建.使用Maven配置好项目后,输入简单的命令,如:mvn clean install,Maven会帮我们处理那些繁琐的任务. Maven是跨平台的. Maven最大化的消除了构建的重复. Maven可以帮助我们标准化构建过程.所有的项目都是简单一

搭建一个Maven - Spring - Spring MVC - Mybatis - MySSQ 整合SSM框架

1 数据库的准备 我本地没有Mysql,完全参考http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html安装了一个. 2 本地安装Maven 首先,Maven是干什么的?我学习的博客里说觉得Maven就是管理jar包的,在这之前我们要辛苦的去找jar包,同时还要担心版本不匹配等问题,有了Maven,他可以帮我们管理你所需要的jar包.我觉得这个解释很容易理解,官方的说法是Maven是一个项目管理和构建自动化工具.我们比较关心他的

Maven入门详解以及Eclisp的集成

1.首先要安装Maven到操作系统上 Maven的下载页面:http://maven.apache.org/download.html Maven跟Tomcat很像,下载下来后直接解压在指定的目录就安装成功了,不过Maven比Tomcat多了一项环境变量配置 当前版本3.0.3.解压缩下载的文件, 首先创建一个系统变量M2HOME,变量值指向maven的解压目录,如图所示: 将其中的bin目录设置到windows Path环境变量中.就是把%M2HOME%\bin加到path系统变量中,如图所示

剑指架构师系列-持续集成之Maven+Nexus+Jenkins+git+Spring boot

1.Nexus与Maven 先说一下这个Maven是什么呢?大家都知道,Java社区发展的非常强大,封装各种功能的Jar包满天飞,那么如何才能方便的引入我们项目,为我所用呢?答案就是Maven,只需要粘贴个Jar包的地址,Maven就会自动到网上查找引入到你的项目中.不过首先你的下载个Maven,然后指定一下 当下来的包包(jar)放到哪里. 我的版本是apache-maven-3.2.1,找到conf里面的配置文件 settings.xml,瞅瞅有没有 <localRepository>E:

利用maven构建一个spring mvc的helloworld实例

刚开始学习maven和spring mvc,学的云里雾里的 这里提供一个hello world实例,记录自己的学习之路 首先看maven官网的介绍 Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and do

Maven 搭建SpringMvc+Spring+Mybatis详细记录

总觉得,看比人写的总是那么好,每次搭建框架时都会找博客,找教程来跟着一步一步走,虽然很快搭建成功了,但是经常情况是我并不知道我干了什么,也不记得具体步骤,到底为什么要这么做,今天我详细记录了一下自己搭建的过程,并且尽量理解每一步干什么. SSM框架当下比较流行,我也是用这个框架来作为记录,尝试详细地记录下每一个步骤,学习,不要怕开头难. 一.创建一个新的Maven项目 1. new -> Maven -> Maven Project 选择webapp工程. 2.maven项目建好以后,工程目录

[JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis)

来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral(以下博文对原博文有改动和补充) 开发环境: Eclipse Java EE IDE for Web Developers. Version: Mars.2 Release (4.5.2) apache-tomcat-8.0.33 jdk1.8.0_77 MySQL 5.0.11-dev(官网下载需要账号登

[转]Maven与nexus关系

开始在使用Maven时,总是会听到nexus这个词,一会儿maven,一会儿nexus,当时很是困惑,nexus是什么呢,为什么它总是和maven一起被提到呢? 我们一步一步来了解吧. 一.了解Maven,Maven用来干什么呢 1. 优秀的构建工具 通过简单的命令,能够完成清理.编译.测试.打包.部署等一系列过程.同时,不得不提的是,Maven是跨平台的,无论是在Windows.还是在Linux或Mac上,都可以使用同样的命令. 2. 依赖管理工具 项目依赖的第三方的开源类库,都可以通过依赖的

eclipse 使用maven 创建web3.1项目

转自:http://www.cnblogs.com/azhw/p/6050857.html 最近刚刚开始学java, 在框架搭建的过程中, 遭遇了诸多的坑, 和各种各样的不解与困惑, 由于没有什么java的相关基础, 看到各种xml的配置文件, 当真是一个头两个大. 并且并不知道那个配置到底在哪一步需要添加, 具体的东西, 网上教程一堆, 目前最流行的就是SSM框架, 但是所有人都是给出了一堆文案, 你照着网上堆, 没有问题, 一般也可以弄得出来, 但是, 弄完了还是糊里糊涂的, 不知道那句话是