`

[转]为什么要用maven<1>

 
阅读更多
 
之前在一个公司接触了一个项目,框架师用到了maven,作为一个小公司的码农,新事物总是令人神往,恰值周末,在iteye看到一篇文章。个人惯例,原作者博客地址:http://jackycheng2007.iteye.com/

 

都说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.   
  5.   <repositories>  
  6. ... 存储库  
  7.   </repositories>  
  8.   <pluginRepositories>  
  9. ... 插件存储库  
  10.   </pluginRepositories>  
  11.   
  12.   <build>  
  13. ... 构建项目所需的信息  
  14.   </build>  
  15.   
  16.   <reporting>  
  17.     报告信息  
  18.   </reporting>  
  19.   
  20.   <profiles>  
  21.     项目描述性信息  
  22.   </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>  

 

分享到:
评论

相关推荐

    List转Json

    要将`List&lt;Object&gt;`转换为JSON,首先确保你的`Object`类已经正确实现了`Serializable`接口,这样Jackson才能正确地序列化它。然后,你可以使用`ObjectMapper`类来完成转换。下面是一个示例代码: ```java import ...

    Maven build之pom.xml文件中的Build配置

    Maven通过一个叫做pom.xml的项目对象模型文件来配置项目构建的各个方面,其中&lt;build&gt;标签是Maven构建配置的核心部分,它定义了整个构建生命周期中需要执行的指令和任务。 Maven构建包括编译代码、执行测试、打包...

    maven pdf

    &lt;artifactId&gt;maven-fop-plugin&lt;/artifactId&gt; &lt;version&gt;2.6&lt;/version&gt; &lt;configuration&gt; &lt;!-- 配置文件路径等 --&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/build&gt; ``` 3. **Maven Reports Plugin**: Maven ...

    maven3配置文档

    --&gt; &lt;developers&gt; &lt;developer&gt; &lt;id&gt;dev1&lt;/id&gt; &lt;name&gt;Developer One&lt;/name&gt; &lt;email&gt;dev1@example.com&lt;/email&gt; &lt;roles&gt; &lt;role&gt;Developer&lt;/role&gt; &lt;/roles&gt; &lt;timezone&gt;-8&lt;/timezone&gt; &lt;/developer&gt; &lt;/developers&gt; &lt;!...

    maven生成可执行exe文件

    下面将详细介绍如何使用Maven和第三方插件将Java程序转换为可执行的exe文件。 1. **Maven配置** Maven项目通常由`pom.xml`文件进行配置。在该文件中,我们需要添加用于创建可执行文件的插件。一个常用的插件是`...

    Java+IDEA+maven混淆打包

    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt; &lt;version&gt;3.2.0&lt;/version&gt; &lt;configuration&gt; &lt;archive&gt; &lt;manifest&gt; &lt;addClasspath&gt;true&lt;/addClasspath&gt; ...

    java project转为maven

    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt; &lt;version&gt;3.2.0&lt;/version&gt; &lt;configuration&gt; &lt;!-- 配置插件参数 --&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/...

    maven自定义catalog

    3. **配置Maven**: 要让Maven使用这个自定义catalog,你需要在`.m2`目录下的`settings.xml`文件中添加一个`archetypeCatalog`元素。例如: ```xml &lt;settings&gt; ... &lt;profiles&gt; &lt;profile&gt; &lt;id&gt;custom-archetypes&lt;/...

    ( maven中整合Spring+hibernate的pom.xml文件的配置.doc )

    - `&lt;packaging&gt;`:指定项目的打包方式,这里为`war`,表示这是一个Web应用程序。 - `&lt;name&gt;`:项目名称。 #### 属性配置 ```xml &lt;properties&gt; &lt;spring.version&gt;3.0.5.RELEASE&lt;/spring.version&gt; &lt;log4j.version&gt;...

    Eclipse Maven项目中配置Jetty

    &lt;artifactId&gt;jetty-maven-plugin&lt;/artifactId&gt; &lt;version&gt;9.4.44.v20210927&lt;/version&gt; &lt;configuration&gt; &lt;webApp&gt; &lt;contextPath&gt;/your-context-path&lt;/contextPath&gt; &lt;/webApp&gt; &lt;stopKey&gt;jetty-stop&lt;/stopKey&gt; ...

    maven集成tomcat支持热部署

    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-eclipse-plugin&lt;/artifactId&gt; &lt;version&gt;2.9&lt;/version&gt; &lt;configuration&gt; &lt;wtpversion&gt;2.0&lt;/wtpversion&gt; &lt;!-- 根据你的Eclipse版本选择合适的WTP...

    File 转 MultipartFile 和MultipartFile的maven配置

    要将`File`对象转换为`MultipartFile`,可以使用Apache Commons IO库中的`CommonsMultipartFile`类。以下是一个示例: ```java import org.apache.commons.fileupload.FileItemHeaders; import org.springframework...

    2.5.0-proto.exe和对应的maven依赖

    &lt;artifactId&gt;protoc-maven-plugin&lt;/artifactId&gt; &lt;version&gt;3.x.y&lt;/version&gt; &lt;configuration&gt; &lt;protocVersion&gt;${protobuf.version}&lt;/protocVersion&gt; &lt;inputDirectories&gt; &lt;include&gt;src/main/proto&lt;/include&gt; &lt;/...

    Ecplise下用maven建drools web项目

    在Eclipse中使用Maven可以方便地构建和管理Java项目,包括依赖管理和生命周期管理。 1. 创建Maven Web项目: - 打开Eclipse,选择“File” -&gt; “New”。 - 在弹出的菜单中选择“Maven Project”,然后点击“Next...

    实现maven管理的Javaweb项目的proguard代码混淆功能

    要实现在Maven项目中使用ProGuard,我们需要以下步骤: 1. 添加ProGuard依赖:在项目的`pom.xml`文件中,我们需要添加ProGuard Maven插件。通常,我们会使用`maven-shade-plugin`来结合ProGuard工作,因为它可以...

    Maven安装配置.doc

    6. **JDK配置**:为了指定Maven使用特定版本的JDK,可以在`settings.xml`的`&lt;profiles&gt;`标签内添加如下配置,这里以JDK 1.8为例: ```xml &lt;profile&gt; &lt;id&gt;jdk-1.8&lt;/id&gt; &lt;activation&gt; &lt;activeByDefault&gt;true&lt;/...

    maven的配置话rar, 只需要配置环境变量即可

    &lt;artifactId&gt;maven-assembly-plugin&lt;/artifactId&gt; &lt;version&gt;3.3.0&lt;/version&gt; &lt;configuration&gt; &lt;descriptorRefs&gt; &lt;descriptorRef&gt;jar-with-dependencies&lt;/descriptorRef&gt; &lt;/descriptorRefs&gt; &lt;archive&gt; ...

    MAVEN的使用教程 docx

    **MAVEN的使用教程** Maven 是一款强大的项目管理和构建工具,尤其在Java开发领域中广泛使用。本教程主要针对新手,旨在帮助初学者快速掌握 Maven 的基本操作,以便于管理和构建Java Web项目。 ### 1. 创建 Maven...

    flink的pom和settings.xml设置

    1. **Maven仓库**:在`&lt;mirrors&gt;`标签内,你可以设置镜像仓库,这有助于加速依赖下载。特别是对于中国开发者,设置阿里云或网易的Maven镜像会大大提高下载速度: ```xml &lt;mirrors&gt; &lt;mirror&gt; &lt;id&gt;alimaven&lt;/id&gt; ...

    Selenium2.0+ Maven+TestNG

    &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt; &lt;version&gt;2.3.2&lt;/version&gt; &lt;configuration&gt; &lt;source&gt;1.6&lt;/source&gt; &lt;target&gt;1.6&lt;/target&gt; &lt;encoding&gt;GBK&lt;/encoding&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;/plugins...

Global site tag (gtag.js) - Google Analytics