都说maven很好很强大,我就在想为什么呢?今天不妨认识一下她。 
maven本身的意思是“专家”,大概是告诉人们我很牛。哈哈。我们先看看这个专家的想法: 
Philosophy, 哲学 
一提到maven,你准想到ant,老想和这个build元老级工具比一比谁牛。可以maven却不想和ant比肩。他的目标更远大。ant确实是一个很强大的build工具箱,而maven不想成为第二个。他的想法是想基于模式来建立一个基础架构,这个架构具有可视性,可重用性,可维护性,易于理解等特性。 
这些“性”似乎是我们开发和项目管理中希望做到有很难做到的。停下来,让大脑想一会,你在项目开发中遇到了什么问题:

每天都在coding,不知道别人在干什么? 
写了半天的代码,偶尔见听到别人以前写过?晕倒 
只知道要实现这个接口,不了解整个项目的构成,和构建过程?迷糊 
勤快的人时不时去看看别人的代码,也常常因为太复杂,不知道从何入手?

一个项目完成了,要开启一个新的项目,发现这个新的项目除了业务不同外,底层技术和构架,以及构建过程都大部分相似。怎么办?copy过来修改?试过没有?你可能会半途而废。尤其当不是你开发的项目,看懂别人的,没门。大部分都是把lib copy过去,管他有没有用。多了比少了强。再吧ant的build.xml复制过去改一下,大功告成。似乎项目的壳子准备好了,谁然办法土了点,也还凑合。总想应该还有更好的办法。。。

回顾过去做过的项目,是不是总是重复着built, tested, packaged, documented and deployed这些过程,当然,这都是pm不可少的。这些过程在不同的项目中会有不同。Maven说能从变中抽出不变,模式pattern, 让项目组的人都能透过pattern来清晰的认识项目。如果你是pm,有没有在开始的时候觉得创建这样一个空项目感到繁琐,有没有一遍又一遍的给你的team mem说我们的目录要这样建立。如果你的是一个新手,是不是不知道什么是项目,项目中有哪些东西,怎么建目录结构。干脆去baidu helloworld,你会发现五花八门,绝对让你更迷糊。多想有个大拿在旁边指点一下啊。另外,弄了半天,却不知道怎么运行,失败,不搞了。哈哈,有了maven,就如同一个大拿帮你开个好头。有了maven,pm,就像有了秘书,“嗨,小马,准备一个空项目,我们要开工了”,呵呵,不是所有人都有秘书哦。

什么?maven能帮我们?看来有戏。亮出你的法宝: 
法宝1. Archetype 原型 
字面意思就看出是一种模板技术,模板里面透着模式哦。看来不是吹的。 
利用Archetype,maven能快速帮你生成一个基本的项目,统一的目录结构,基本的配置文件,为什么这样建立目录,这就是总结前人的经验了。这就是项目目录模式吧。安装好maven以后,执行下面的命令就能创建一个基本的项目:

Java代码  
  1. mvn archetype:create \
  2. -DarchetypeGroupId=org.apache.maven.archetypes \
  3. -DgroupId=com.mycompany.app \
  4. -DartifactId=my-app

这个命令会帮你在执行命令的当前目录生成一个java的Hello World项目。同时还有一个pom.xml,我们后面会谈。另外你会发现他帮你生成了一个基本的目录结构来存放java app代码和test代码。

所谓万事开头难。但,Archetype使得new user有个很容易的开始。另外,Archetype 还体现了maven支持附加物似地扩充项目的内容。比如,一开始可以用generate产生一个working project,之后可以利用site archetype 来为这个project 添加 一个site。将这个想法延伸一下,如果你想在一个大一些的范围比如公司范围内推行一种项目结构标准。那你就可以自己开发一个模板也就是Archetype,然后把它放在一个集中的repository,以后大家在创建项目的时候直接基于这个Archetype来创建。这样既推行了标准化,有体现了重用性。 
其实mvn archetype:create这个命令是被deprecated了,现在推荐你用mvn archetype:generate。这是一个交互式的插件,maven会列出一些原型让你基于他们构建你的项目,默认是基本的java project,也有一些struts2,spring的样例项目让你选择,很爽的。 
选择完以后,你会得到一个项目目录,就是create差不多。但是如果你要是想在eclipse里面开发,你还可以生成eclipse项目文件,只需要在刚才生成的项目根目录,也就是pom所在的目录执行下面的命令:

Java代码  
  1. mvn eclipse:eclipse

然后你就可以将这个项目导入eclipse里面开发了。爽吧。

法宝2. POM 项目对象模型 
既然是项目管理工具,自然是以项目为中心的。pom提供了一个项目的所有相关信息和配置细节。这样,通过一个pom.xml,你就能全面的了解这个项目的各个方面,当然除了项目代码。通过这个文件,你可以build整个项目,直至发布。可见maven所谓让我们比较容易的看到项目的全局,也并非虚言。等一下,让大脑想一会。我知道xml很强大,几乎可以描述任何事物。但是完全靠一个pom.xml,就声称可以简单而清楚的描述一个项目的信息和配置。可能吗?要知道一个项目,除了resource的目录以外,还有以来的lib,测试,发布等信息。怎么才能做到呢? 
project object?什么,对象?难道和java对象一样?还真行。maven说项目可以继承。而且提供了一个super pom,就像java的Object类一样,尽管你不用写extends Object,你的类也会自动继承这个类。同样,maven也让你的pom继承这个super pom。这样可以再super pom提供很多默认设置使得你自己的pom在没有必要修改super默认设置的情况下变得很简单。 
简单浏览了一下这个super pom的2.1版本:

Java代码  
  1. <project>
  2. <modelVersion>4.0.0</modelVersion>
  3. <name>Maven Default Project</name>
  4. <repositories>
  5. ... 存储库
  6. </repositories>
  7. <pluginRepositories>
  8. ... 插件存储库
  9. </pluginRepositories>
  10. <build>
  11. ... 构建项目所需的信息
  12. </build>
  13. <reporting>
  14. 报告信息
  15. </reporting>
  16. <profiles>
  17. 项目描述性信息
  18. </profiles>

具体细节后面再研究,但看这些信息似从这些大类别上也涵盖的差不多了。有了这些默认信息,你自己的pom只要包含下面的信息就好: 
    project root 
    modelVersion - should be set to 4.0.0 
    groupId - the id of the project's group. 
    artifactId - the id of the artifact (project) 
    version - the version of the artifact under the specified group 
下面是一个例子:

Java代码  
  1. <project>
  2. <modelVersion>4.0.0</modelVersion>
  3. <groupId>com.mycompany.app</groupId>
  4. <artifactId>my-app</artifactId>
  5. <version>1</version>
  6. </project>

转载于:https://www.cnblogs.com/yqskj/archive/2013/04/15/3021397.html

为什么要用maven - 1相关推荐

  1. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  2. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  3. Gradle 将项目publish到Nexus,Kotlin将项目发布到nexus,springboot项目发布到maven仓库

    示例见:Gitte 公仓设置 在项目中添加maven-publish的插件 plugins {kotlin("jvm") version "1.3.72"kot ...

  4. springboot项目使用junit4进行单元测试,maven项目使用junit4进行单元测试

    首先,maven项目中引入依赖 <dependency><groupId>junit</groupId><artifactId>junit</ar ...

  5. IDEA中maven的命令及作用

    maven中的Lifecycle中的那些按钮都有哪些,都有什么功能呢? validate:验证项目的正确性以及包含所有必要的信息 compile:编译源码 test:编译和运行测试代码 package ...

  6. 如果你没用过maven的install,你应该了解一下!maven中的install功能及用法。

    maven中有一个大多数人都忽视或者没有用到过的一个功能--install,大多数java开发人员都了解maven,使用maven进行依赖管理.但使用的大多数功能不过是clean清理.compile编 ...

  7. 使用Maven打包生成的-SNAPSHOT.jar与-RELEASE.jar分别代表什么?SNAPSHOT是什么意思?RELEASE是什么意思?

    使用Maven打包后生成 XXXXXXX-1.0.0-SNAPSHOT.jar 和 XXXXXXX-1.0.0-RELEASE.jar 的区别???? 首先,根本原因:这是因为你的pom.xml中的项 ...

  8. 手动将jar包导入pom依赖,让jar包适配本地maven项目

    前言: Oracle对maven很久没有更新依赖,虽然19年更新了一版,但pom引入一直有错误. 我用的是oralce 12的依赖,虽然有jar包,但是依赖和pom没有适配,项目打包的时候还要去中央仓 ...

  9. pom文件中引入常用的maven仓库

    给大家分享几个maven仓库,如果本地总是下载很慢的话可以尝试换一下仓库或者多加几个.可以直接拖放在pom.xml中使用. 阿里云仓库 <mirrors><mirror>< ...

  10. Maven安装与配置(最实用!!!)eclipse中配置maven

    Maven安装与配置 一.需要准备的东西 JDK Eclipse(本章主要是在eclipse中进行配置maven) Maven程序包 二.下载与安装 1. 前往maven下载最新版的Maven程序: ...

最新文章

  1. MixNet了解一下,来自Google Brain最新SOTA移动AI架构
  2. 产品经理这个角色真的泡沫越来越大吗?
  3. 小样本学习(Few-shot Learning)综述
  4. javaweb认识在web应用中重要的轮询机制(ajax)
  5. 前端获取不了rest请求自定义headers的问题
  6. 编译生成的Apk安装到手机提示应用未安装,需给apk签名
  7. 论文赏析[EMNLP19]如何在Transformer中融入句法树信息?这里给出了一种解决方案
  8. DOS 系统安装工具
  9. 如何理解移动侦测录像与人体红外感应
  10. 计算机三种桌面图标,例举win7电脑桌面图标排列方式
  11. 【MATLAB深度学习工具箱】学习笔记--体脂估计算例再分析:拟合神经网络fitnet里面的函数】
  12. LabVIEW编程LabVIEW开发 旧程序升级维护
  13. html表格怎么取消自动换行,css怎么控制表格不要自动换行?
  14. 帝国cms php序号,帝国cms输出数字排序序号的列表
  15. electron获取媒体流(实现屏幕分享)
  16. iCMS前台存储型XSS漏洞
  17. 一般梯度、随机梯度、相对梯度和自然梯度
  18. 【好文鉴赏】初创公司到底值不值得去?从以下几点考虑
  19. 经济学和计算机类大学排名,经济学专业世界大学排名ARWU
  20. android检测usb存储,USBdevice识别为存储设备并找到路径

热门文章

  1. 判断力有时候有多么重要?懂得选择多么重要?
  2. 没有一颗平常心的人千万不要做外贸
  3. solidity之call相关函数
  4. Qt4_实现自定义委托
  5. Pytorch-张量的创建与使用方法
  6. 使用字符在终端打印图形汉字
  7. sql 执行计划 嵌套循环_性能调优–嵌套和合并SQL循环与执行计划
  8. 使用“ Row_Number”功能和WHILE循环创建滚动平均值报告
  9. redis数据库操作(3)
  10. python web开发-flask中消息闪现flash的应用