蜀国阵容最佳战宠:我的Maven之旅(6)-通过Maven创建项目

来源:百度文库 编辑:九乡新闻网 时间:2024/03/29 06:01:02

前面我们讲到为什么使用Maven, Maven的安装, 与IDE的集成, 建立Nexus本地仓库, 这些都是在我们在正式创建项目的前的准备工作. 从这一章开始我们介绍利用Maven来创建, 管理我们的项目.

 

这里假设你已经阅读了我前面的几篇文章, 或者你已经安装了Maven, 配置好了IDE集成环境. 项目的创建大致分为两种, 一种是通过Maven的命令行来操作, 另一种是通过IDE界面环境来创建, 下面我们分别来介绍:

通过Maven命令行来创建项目
Maven项目的创建是通过插件archetype(原型)来创建的, 也有人翻译成骨架, 你可以理解为Template. 通过archetype可以选择创建最基本的项目模型, 也可以通过预置模板来创建项目, archetype预置了很多项目模板, 比如Spring项目模板, EJB项目模板等. 下面我们分别来介绍:

创建基本项目
假如我们要生成一个名称为ftpserver项目,在命令行提示符下执行以下命令:

mvn archetype:create       -DarchetypeGroupId=org.apache.maven.archetypes  -DgroupId=com.alibaba.base
-DartifactId=ftpserver

第一个参数-DarchetypeGroupId 是制定archetype插件的所属的groupId

第二个参数-DgroupId是制定你将要创建的项目的groupId, 根据自己项目情况做相应的修改

第三个参数-DartifactId是制定你要创建的构件ID, 这个例子是 ftpserver

 

执行后类似的显示如下:

 

 

下面我们看一下生成的POM.xml文件:

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
      http://maven.apache.org/maven-v4_0_0.xsd">

  4.0.0

  com.alibaba.base

  ftpserver

  jar

  1.0-SNAPSHOT

  ftpserver

  http://maven.apache.org

 

   

      junit

      junit

      3.8.1

      test

   

 

 

这里介绍下一些主要标签的作用:

modelVersion 制定POM文件所使用的模板版本, 虽然POM文件版本是不经常更新的,但是强制指定版本可以保持整个项目的一致性和稳定性.
groupId 这个标签用来指定这个项目所属的公司或者组织, 在这个例子里, groupId为com.alibaba.base, 表示这个构件是属于alibaba基础模块的. 这个属性通常与artifaceId一起共同标识一个构件
artifactId 指定这个构件的名称, 这个例子里面是ftpserver, 在生成的最终文件中,这里的artifactId将作为文件名的一部分出现, 标准的文件命名格式为-.,  这个例子就是ftpserver-1.0.jar
packaging 用来指定打包类型,比如JAR, WAR, EAR等, 如果不指定那么默认是JAR, 这里的不仅仅可以指定打包类型,也可以指定为一个特定的生命周期作为整个build过程的一部分, 关于这一部分我们将来再详细讨论.
version 制定项目版本, 这里版本多了一个SNAPSHOT的概念, 作用域开发过程, 在后面会详细介绍如何使用SNAPSHOT来进行协作开发.
name 制定项目名称, Maven在根据项目生成文档的时候会用到这个标签属性
url 指定这个项目的站点地址, Maven在根据项目生成文档的时候会用到这个标签属性
description 项目的描述信息, Maven在根据项目生成文档的时候会用到这个标签属性
 

下面我们看一下生成的项目目录树:

ftpserver

|-- pom.xml

`-- src

    |-- main

    |   `-- java

    |       `-- com

    |           `-- alibaba

    |               `-- ftpserver

    |                   `-- App.java

    `-- test

        `-- java

            `-- com

                `-- alibaba

                    `-- ftpserver

                        `-- AppTest.java

 

 

创建模板项目
上面我们创建了一个基本项目, 现在我们介绍一下如何创建一个模板项目, 比如我们要创建一个spring的项目, 仅仅上面的步骤是不够的, 那么Maven有这样的模板替你做了很多项目配置的事情, 下面就让我们看看如何操作, 很简单只要把create换成generate就可以了, 还是创建一个名为ftpserver的spring项目:

mvn archetype:generate
-DarchetypeGroupId=org.apache.maven.archetypes  -DgroupId=com.alibaba.base
-DartifactId=ftpserver

在命令行下回车以后我们可以看到以下提示:

     ……

Choose archetype:

1: internal -> appfuse-basic-jsf (AppFuse archetype for creating a web applicati

on with Hibernate, Spring and JSF)

2: internal -> appfuse-basic-spring (AppFuse archetype for creating a web applic

ation with Hibernate, Spring and Spring MVC)

3: internal -> appfuse-basic-struts (AppFuse archetype for creating a web applic

ation with Hibernate, Spring and Struts 2)

4: internal -> appfuse-basic-tapestry (AppFuse archetype for creating a web appl

ication with Hibernate, Spring and Tapestry 4)

5: internal -> appfuse-core (AppFuse archetype for creating a jar application wi

th Hibernate and Spring and XFire)

6: internal -> appfuse-modular-jsf (AppFuse archetype for creating a modular app

lication with Hibernate, Spring and JSF)

7: internal -> appfuse-modular-spring (AppFuse archetype for creating a modular

application with Hibernate, Spring and Spring MVC)

8: internal -> appfuse-modular-struts (AppFuse archetype for creating a modular

application with Hibernate, Spring and Struts 2)

9: internal -> appfuse-modular-tapestry (AppFuse archetype for creating a modula

r application with Hibernate, Spring and Tapestry 4)

10: internal -> maven-archetype-j2ee-simple (A simple J2EE Java application)

11: internal -> maven-archetype-marmalade-mojo (A Maven plugin development proje

ct using marmalade)

12: internal -> maven-archetype-mojo (A Maven Java plugin development project)

13: internal -> maven-archetype-portlet (A simple portlet application)

14: internal -> maven-archetype-profiles ()

15: internal -> maven-archetype-quickstart ()

16: internal -> maven-archetype-site-simple (A simple site generation project)

17: internal -> maven-archetype-site (A more complex site project)

18: internal -> maven-archetype-webapp (A simple Java web application)

19: internal -> jini-service-archetype (Archetype for Jini service project creat

ion)

20: internal -> softeu-archetype-seam (JSF+Facelets+Seam Archetype)

21: internal -> softeu-archetype-seam-simple (JSF+Facelets+Seam (no persistence)

Archetype)

22: internal -> softeu-archetype-jsf (JSF+Facelets Archetype)

23: internal -> jpa-maven-archetype (JPA application)

24: internal -> spring-osgi-bundle-archetype (Spring-OSGi archetype)

25: internal -> confluence-plugin-archetype (Atlassian Confluence plugin archety

pe)

26: internal -> jira-plugin-archetype (Atlassian JIRA plugin archetype)

27: internal -> maven-archetype-har (Hibernate Archive)

28: internal -> maven-archetype-sar (JBoss Service Archive)

29: internal -> wicket-archetype-quickstart (A simple Apache Wicket project)

30: internal -> scala-archetype-simple (A simple scala project)

31: internal -> lift-archetype-blank (A blank/empty liftweb project)

32: internal -> lift-archetype-basic (The basic (liftweb) project)

33: internal -> cocoon-22-archetype-block-plain ([http://cocoon.apache.org/2.2/m

aven-plugins/])

34: internal -> cocoon-22-archetype-block ([http://cocoon.apache.org/2.2/maven-p

lugins/])

35: internal -> cocoon-22-archetype-webapp ([http://cocoon.apache.org/2.2/maven-

plugins/])

36: internal -> myfaces-archetype-helloworld (A simple archetype using MyFaces)

37: internal -> myfaces-archetype-helloworld-facelets (A simple archetype using

MyFaces and facelets)

38: internal -> myfaces-archetype-trinidad (A simple archetype using Myfaces and

Trinidad)

39: internal -> myfaces-archetype-jsfcomponents (A simple archetype for create c

ustom JSF components using MyFaces)

40: internal -> gmaven-archetype-basic (Groovy basic archetype)

41: internal -> gmaven-archetype-mojo (Groovy mojo archetype)

Choose a number:  (1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/2

4/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41) 15: :

 

我们可以看到有很多预定义好的模板项目, 这里我们要创建一个spring的项目, 选择2然后回车, 会出现以下提示:

[INFO] artifact org.appfuse.archetypes:appfuse-basic-spring: checking for update

s from nexus

[INFO] artifact org.appfuse.archetypes:appfuse-basic-spring: checking for update

s from central

Define value for version:  1.0-SNAPSHOT: :

细心的读者可能会注意到Maven会从nexus本地仓库获取插件的更新,前提是要建立起自己的本地仓库, 之前的文章中我们已经讲过如何建立nexus本地仓库. 粗体部分是给的提示说你的项目的起始版本, 它给出一个默认值1.0-SNAPSHOT, 通常如果没有特殊需求,我们可以根据默认规则回车确认就可以了, 你也可以输入自定义的版本,但并不推荐这么做.回车后会看到以下提示:

Define value for version:  1.0-SNAPSHOT: :

Confirm properties configuration:

groupId: com.alibaba.base

artifactId: ftpserver

version: 1.0-SNAPSHOT

package: com.alibaba.base

Y: :

Maven会给出项目的相关信息让你确认, 如果没有错误,直接回车确认即可, 然后你就可以看到Maven在努力的刷屏帮你建立起一个spring项目, 在最后如果你可以看到类似的信息,那说明项目已经创建成功:

[INFO] OldArchetype created in dir: D:\work\projects\test\ftpserver

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESSFUL

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 69 minutes 48 seconds

[INFO] Finished at: Fri Jun 26 11:45:52 CST 2009

[INFO] Final Memory: 9M/127M

[INFO] ------------------------------------------------------------------------

粗体部分提示, 项目成功构建.

然后我们来看看,这次的POM文件与上次有什么不同, Maven生成了一个700行左右的POM文件, 里面几乎包含了一个项目所应该有的一切, 构建, 自动单元测试, 构件依赖, 报表(站点), 数据库连接, SCM, 等等, 我们可以根据实际需要来选择我们所需要的项目周期管理, 由于代码太多这里就不贴出来了. 在后面的POM文件详解里面, 我会介绍一下POM文件一些常用的标签以及如何使用.

 

下面我们再看一下目录结构有什么不同:

ftpserver

|-- pom.xml

`-- src

    |-- main

    |   `-- java

    |       `-- com

    |           `-- alibaba

    |               `-- ftpserver

|                   `-- App.java

|    -- resources

|    -- webapp

|-- site

    `-- test

    |   `-- java

    |       `-- com

    |            `-- alibaba

    |                `-- ftpserver

|                    `-- AppTest.java

|    -- resources

 

我们可以看到, 多了粗体部分site是Maven为项目生成站点, 所有的报表都将生成在这个站点里面, 在resources目录里还会有很多资源文件, 比如多语言的资源文件等. 这是根据默认规则建立的项目目录结构,当然你可以自定义目录结构,但是我们推荐在将来的项目中使用maven的默认规则.

 

关于Maven的生命周期管理, 我们会在后面章节讨论.

通过IDE(IDEA)来创建项目
如果你是通过命令行方式创建的项目, 要在IDE(eclipse, 或者Intellij IDEA)上开发, 只需要通过简单的命令就可以生成eclipse或者IDEA的项目文件:

mvn idea:idea

mvn eclipse:eclipse

之后只需要运行对应的工程文件就可以在IDE里面进行后续的开发工作了.

 

如果你不喜欢使用命令行, 那么你也可以在IDE里面通过图形化的界面来创建项目,, IDEA内部集成了对Maven的支持, 如果使用eclipse的话你还需要下载m2e插件. 下面我们以IDEA为例来创建之前例子中的项目:

File->new project, 然后选择第一项 Create project from scratch, 点击下一步可以看到:
 左下角选择Maven Module, 填写目录相关信息, 点击下一步


这里有一个复选框, Create from archetype, 如果不选则是创建基本项目, 在复选框上面打勾, 然后就可以选择你想要创建项目的类型, 这里我们选择跟之前那个例子一样的类型: appfuse-basic-spring, 点击Finish就完成了项目的创建.
通过命令行和IDE生成的项目的POM文件和目录结构是一样的:


小结
通过这一章,我们了解到如何通过Maven根据我们的需要创建项目, 命令行方式和IDE方式, 通过命令行的方式不受操作系统的限制, 可以在没有界面的Linux等操作系统进行生命周期管理, 这在项目后期,我们需要通过命令行方式在测试服务器, 预发布服务器和生产环境服务器进行相应的生命周期管理. IDE方式适合在项目建立初期和开发过程中, 可以很方便的通过界面的方式来管理项目的生命周期. 下面的章节, 我会详细介绍POM文件以及Maven生命周期.

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/arvinzhuo/archive/2009/06/26/4301280.aspx