`
JackyCheng2007
  • 浏览: 253585 次
  • 性别: 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

分享到:
评论
1 楼 cectsky 2011-02-24  
希望lz弄个比较实用的教程来瞧瞧,或者整个例子,图示之类的。我也希望接触下maven,不过没有时间来整理

相关推荐

    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`中,...

    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