我的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>
这里介绍下一些主要标签的作用:
下面我们看一下生成的项目目录树:
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(eclipse, 或者Intellij IDEA)上开发, 只需要通过简单的命令就可以生成eclipse或者IDEA的项目文件:
mvn idea:idea
mvn eclipse:eclipse
之后只需要运行对应的工程文件就可以在IDE里面进行后续的开发工作了.
如果你不喜欢使用命令行, 那么你也可以在IDE里面通过图形化的界面来创建项目,, IDEA内部集成了对Maven的支持, 如果使用eclipse的话你还需要下载m2e插件. 下面我们以IDEA为例来创建之前例子中的项目:
通过这一章,我们了解到如何通过Maven根据我们的需要创建项目, 命令行方式和IDE方式, 通过命令行的方式不受操作系统的限制, 可以在没有界面的Linux等操作系统进行生命周期管理, 这在项目后期,我们需要通过命令行方式在测试服务器, 预发布服务器和生产环境服务器进行相应的生命周期管理. IDE方式适合在项目建立初期和开发过程中, 可以很方便的通过界面的方式来管理项目的生命周期. 下面的章节, 我会详细介绍POM文件以及Maven生命周期.
?