`
JackyCheng2007
  • 浏览: 253545 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

为什么要用maven - 1

阅读更多
都说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以后,执行下面的命令就能创建一个基本的项目:
mvn archetype:create \
  -DarchetypeGroupId=org.apache.maven.archetypes \
  -DgroupId=com.mycompany.app \
  -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所在的目录执行下面的命令:
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版本:
<project>
  <modelVersion>4.0.0</modelVersion>
  <name>Maven Default Project</name>

  <repositories>
... 存储库
  </repositories>
  <pluginRepositories>
... 插件存储库
  </pluginRepositories>

  <build>
... 构建项目所需的信息
  </build>

  <reporting>
    报告信息
  </reporting>

  <profiles>
    项目描述性信息
  </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
下面是一个例子:
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
</project>


下面可能还有很长,我准备再开一篇。
为什么要用maven - 2:
http://jackycheng2007.iteye.com/blog/966144

分享到:
评论
21 楼 yangyi 2011-05-22  
最大优点就是库、代码、IDE三者分离了,额外的优点是类库,源码管理,标准化
20 楼 JackyCheng2007 2011-03-28  
cyberblue 写道
为什么不能用Maven?

1. 有些项目已经积重难返,谁也搞不清楚里面哪些库有用哪些库没用,甚至一些已经没有人再维护的库还在用。
2. 程序员日用品化,员工换了一茬又一茬,留下了大量连架构师都搞不清楚的架构。
3. 大部分项目被IDE绑架,离了eclipse根本没法跑起来,为何Oracle拼命支持Maven?就是要打破eclipse的垄断
4. 某些在Build过程中需要调用脚本的项目,要迁移到Maven上还是离不开ant
5. “现在不是能用么?为什么还要用Maven?”

下面阐述一下我自己的经验,

我喜欢开源项目,特别是喜欢找一些开源项目的源代码,用了maven的开源项目,结构非常清晰,很容易就能读懂,用了maven的开源项目就是为了结构清楚,方便别人加入,maven起先就是为了开源项目定制的,而且喜欢maven的人,大多不会再去写ant脚本,也不会再用eclipse建项目,Maven就是一分离出来的小众工具,没计划要变成大众软件

你说的确实是一些现实问题。不过我觉得尽量还是朝着更好的方向走才会走的更好。至少在新项目中可以用起来,老的项目可以先不动,等下次升级或者维护的时候在慢慢迁移。
19 楼 cyberblue 2011-03-27  
为什么不能用Maven?

1. 有些项目已经积重难返,谁也搞不清楚里面哪些库有用哪些库没用,甚至一些已经没有人再维护的库还在用。
2. 程序员日用品化,员工换了一茬又一茬,留下了大量连架构师都搞不清楚的架构。
3. 大部分项目被IDE绑架,离了eclipse根本没法跑起来,为何Oracle拼命支持Maven?就是要打破eclipse的垄断
4. 某些在Build过程中需要调用脚本的项目,要迁移到Maven上还是离不开ant
5. “现在不是能用么?为什么还要用Maven?”

下面阐述一下我自己的经验,

我喜欢开源项目,特别是喜欢找一些开源项目的源代码,用了maven的开源项目,结构非常清晰,很容易就能读懂,用了maven的开源项目就是为了结构清楚,方便别人加入,maven起先就是为了开源项目定制的,而且喜欢maven的人,大多不会再去写ant脚本,也不会再用eclipse建项目,Maven就是一分离出来的小众工具,没计划要变成大众软件
18 楼 gigix 2011-03-24  
ltian 写道
gigix 写道
那个,我第一次用Maven是8年前…现在还在讨论“为什么要用”啊?

用了8年,写点心得呗!做点贡献!

心得噢…转帖个内部邮件吧
引用
Maven has a lot of very poor conventions.

The conventions work if you follow them exactly and if you project is suited to being constrained by those conventions. Every single enterprise web project I have ever worked on has not fit into those conventions.
This means you end up having to 'hack' into the conventions to get the behaviour you want ( add a performance test run as part of the 'functional' tests for example ).

Also the conventions are poorly explained and poorly documented, especially when you start using plugins. The result is a mess that is only comprehensible to a maven 'expert'. The cost of writing the basic build functionality yourself so that you have build system that is traceable without knowledge of obscure maven magic is more than worth it IMHO.

If is for these reasons that we have rippend Maven out of a lot of projects over the years.

Buildr looks like it allows you to drop down Ant or Ruby if you need to which sounds promising - I would still need convincing that it adds enough benefit to be worthwhile. Be wary of tools that make the easy stuff trivial, and the hard stuff harder.

基本上,我对Maven的态度就是这样:如果一个项目已经在用它,fine,我不介意;如果还没有开始用,嗯,there must be something better than it given the fact it has been there for over 8 years.
17 楼 yizhilong28 2011-03-24  
个人源代码管理使用maven。
在公司,上网都困难,不知道是不是普遍现象。
只能说,在天朝maven只是浮云。
16 楼 kjj 2011-03-16  
gigix 写道
那个,我第一次用Maven是8年前…现在还在讨论“为什么要用”啊?

又没有人知道你啥时候开始用的!!
你不给大家推广推广。。。。。
15 楼 ltian 2011-03-14  
gigix 写道
那个,我第一次用Maven是8年前…现在还在讨论“为什么要用”啊?

用了8年,写点心得呗!做点贡献!
14 楼 hatedance 2011-03-11  
maven,agile,。。。一直在听说,从来没用过
13 楼 mobile2dev 2011-03-11  
maven是好用,有谁知道 objective c 有对应的library么?
12 楼 keer2345 2011-03-07  
我最近才开始用maven, 只用了他的包依赖的功能
11 楼 haha1903 2011-03-06  
gigix 写道
那个,我第一次用Maven是8年前…现在还在讨论“为什么要用”啊?


那个,某某人第一次用Maven是10年前,到现在还有人说自己“第一次用是8年前”啊。
10 楼 JackyCheng2007 2011-03-04  
sarstime 写道
没觉得maven怎么好用,还是喜欢ant, rake.

maven的本地setting和dependencies有时会让人发疯的。


欢迎细数maven的不足,看看大家是不是有不同的看法。有时候可能是我们的理解和用法需要改进。共同学习!
9 楼 sarstime 2011-03-04  
没觉得maven怎么好用,还是喜欢ant, rake.

maven的本地setting和dependencies有时会让人发疯的。
8 楼 linux1689 2011-03-03  
Maven确实很强大,要不然《Maven实战》就不会那么火了。
7 楼 hyj1254 2011-03-03  
项目一直在用,我也一直在用,但还是对它不太了解...
6 楼 cantellow 2011-03-02  
gigix 写道
那个,我第一次用Maven是8年前…现在还在讨论“为什么要用”啊?

有些人“新人”是需要学习的,比如我
5 楼 wangchengyong 2011-03-02  
一直想用,不得入门之法!
请多多指点
4 楼 cectsky 2011-02-25  
还能生成报表啊。。。
3 楼 sundytu 2011-02-24  
对于项目生命期管理的确非常好。
测试,编译,打包,发布,生成各种报表,功能真是强大!
2 楼 gigix 2011-02-24  
那个,我第一次用Maven是8年前…现在还在讨论“为什么要用”啊?

相关推荐

    apache-maven-3.6.3-bin

    apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-...

    apache-maven-3.8.6.zip

    apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-maven-3.8.6-bin.zip apache-...

    apache-maven-3.8.6-bin.tar.tz--test

    apache-maven-3.8.6-bin.tar.tz--test apache-maven-3.8.6-bin.tar.tz--test apache-maven-3.8.6-bin.tar.tz--test apache-maven-3.8.6-bin.tar.tz--test apache-maven-3.8.6-bin.tar.tz--test apache-maven-3.8.6-...

    Maven exec-maven-plugin:执行外部命令的实践指南

    本文详细介绍了exec-maven-plugin的基本概念、配置方法、执行简单和系统脚本、捕获命令输出、条件执行、并发执行、使用环境变量、错误处理、高级配置、使用案例以及局限性。通过这些知识点,读者可以更加自信地在...

    apache-maven-3.6.1.zip分享给需要的同学

    apache-maven-3.6.1.zip分享给需要的同学 apache-maven-3.6.1.zip分享给需要的同学 apache-maven-3.6.1.zip分享给需要的同学 apache-maven-3.6.1.zip分享给需要的同学 apache-maven-3.6.1.zip分享给需要的同学apache...

    Maven使用tomcat8-maven-plugin插件.docx

    要使用 tomcat8-maven-plugin 插件,首先需要在 Maven 的 POM 文件中添加插件依赖。下面是一个示例: ``` &lt;groupId&gt;org.apache.tomcat.maven &lt;artifactId&gt;tomcat8-maven-plugin &lt;version&gt;3.0-r1655215 ``` ...

    apache-maven-3.3.9.rar

    apache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9.rarapache-maven-3.3.9....

    apache-maven-3.9.0-bin.tar

    "linux版本maven"指的是Maven在Linux操作系统上的使用,这通常意味着兼容性、命令行工具的使用以及与Linux环境的集成。Linux用户可以利用bash脚本、alias或者systemd服务来自动化和集成Maven的使用。 总的来说,...

    apache-maven-3.9.6-bin

    Maven 使用一个约定优于配置的哲学,这意味着它遵循一套默认的项目结构,减少了为新项目配置大量构建脚本的需要。它的核心概念是项目对象模型(Project Object Model,POM),这是一个XML文件,包含了项目的配置信息...

    apache-maven-3.8.8.zip

    apache-maven-3.8.8.zip压缩包内容: apache-maven-3.8.8-bin.tar.gz apache-maven-3.8.8-bin.zip apache-maven-3.8.8-src.tar.gz apache-maven-3.8.8-src.zip

    maven-compiler-plugin-3.8.0-source-release插件

    1. **源代码编译**:默认使用 JDK 的 `javac` 编译器进行 Java 源代码的编译。 2. **编译配置**:允许用户自定义编译参数,如目标 JVM 版本、源代码版本、是否开启编译警告等。 3. **处理依赖**:自动处理项目依赖,...

    apache-maven-3.6.0.zip

    1. **bin** 目录:包含Maven的可执行脚本,如`mvn`命令行工具,分别适用于不同的操作系统(Windows, Linux, macOS)。 2. **conf** 目录:包含Maven的配置文件,如`settings.xml`,它是Maven的全局配置,用于设置...

    最新Maven-apache-maven-3.8.1-Repository-配置好的

    1. **设置JAVA_HOME**: 首先确保已安装JDK,并将`JAVA_HOME`环境变量指向JDK的安装目录,因为Maven需要Java运行环境。 2. **添加Maven到PATH**: 将Apache Maven-3.8.1的`bin`目录路径添加到系统环境变量`PATH`中,...

    maven-deploy-plugin-2.8.2.jar

    maven-deploy-plugin-2.8.2.jar

    apache-maven-3.5.3-src

    Apache Maven 是一个强大的项目管理工具,它主要用于Java项目的构建、依赖管理和项目信息管理。Maven 3.5.3是该工具的一...对于Java开发者而言,掌握Maven的使用无疑能够提高开发效率,使项目管理变得更加有序和高效。

    maven资源 apache-maven-3.3.9-bin.zip

    在Maven中,项目的构建过程被定义为一系列的阶段,如编译、测试、打包、集成测试、部署等,这些阶段构成了Maven的生命周期。每个阶段都可以通过特定的插件来执行,例如,`maven-compiler-plugin`用于编译源代码,`...

    apache-maven-3.8.4-bin.zip maven下载鬼慢

    使用Maven时,要注意定期更新到最新版本,以获取最新的特性和安全修复。 总的来说,Apache Maven是Java开发不可或缺的一部分,它通过标准化的构建过程和自动化依赖管理,极大地提高了开发效率。正确配置和使用Maven...

    maven-shared-utils-3.2.1.jar

    maven-shared-utils-3.2.1.jar

Global site tag (gtag.js) - Google Analytics