蜀国阵容最佳战宠:我的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文件:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
这里介绍下一些主要标签的作用:
modelVersion 制定POM文件所使用的模板版本, 虽然POM文件版本是不经常更新的,但是强制指定版本可以保持整个项目的一致性和稳定性.
groupId 这个标签用来指定这个项目所属的公司或者组织, 在这个例子里, groupId为com.alibaba.base, 表示这个构件是属于alibaba基础模块的. 这个属性通常与artifaceId一起共同标识一个构件
artifactId 指定这个构件的名称, 这个例子里面是ftpserver, 在生成的最终文件中,这里的artifactId将作为文件名的一部分出现, 标准的文件命名格式为
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