首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

小弟我的Maven之旅(6)-通过Maven创建项目

2013-10-08 
我的Maven之旅(6)-通过Maven创建项目下面我们看一下生成的POM.xml文件:project xmlnshttp://maven.apac

我的Maven之旅(6)-通过Maven创建项目

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

<project xmlns="http://maven.apache.org/POM/4.0.0"
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">

<modelVersion>4.0.0</modelVersion>

<groupId>com.alibaba.base</groupId>

<artifactId>ftpserver</artifactId>

<packaging>jar</packaging>

<version>1.0-SNAPSHOT</version>

<name>ftpserver</name>

<url>http://maven.apache.org</url>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>3.8.1</version>

<scope>test</scope>

</dependency>

</dependencies>

</project>

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

  • modelVersion 制定POM文件所使用的模板版本, 虽然POM文件版本是不经常更新的,但是强制指定版本可以保持整个项目的一致性和稳定性.
  • groupId 这个标签用来指定这个项目所属的公司或者组织, 在这个例子里, groupId为com.alibaba.base, 表示这个构件是属于alibaba基础模块的. 这个属性通常与artifaceId一起共同标识一个构件
  • artifactId 指定这个构件的名称, 这个例子里面是ftpserver, 在生成的最终文件中,这里的artifactId将作为文件名的一部分出现, 标准的文件命名格式为<artifactId>-<version>.<extension>, 这个例子就是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

    1. 创建模板项目

    上面我们创建了一个基本项目, 现在我们介绍一下如何创建一个模板项目, 比如我们要创建一个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为例来创建之前例子中的项目:

    1. File->new project, 然后选择第一项 Create project from scratch, 点击下一步可以看到:
      小弟我的Maven之旅(6)-通过Maven创建项目左下角选择Maven Module, 填写目录相关信息, 点击下一步

    小弟我的Maven之旅(6)-通过Maven创建项目

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

    小弟我的Maven之旅(6)-通过Maven创建项目

    小结

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

    ?

  • 热点排行