M
aven archetype 是 Maven Archetype Plugin 用来生成一套 Maven 项目的模板。使用该插件可以非常轻松的创建一个项目, 仅仅需要执行一个命令, 以创建一个简单的 webapp 项目为例:
mvn archetype:generate \
-B \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp \
-DarchetypeVersion=1.0 \
-DgroupId=com.mycompany.webapp \
-DartifactId=myapp \
-Dversion=1.0
命令会产生一个目录: myapp, 结构如下:
|-- pom.xml
`-- src
`-- main
|-- resources
`-- webapp
|-- index.jsp
`-- WEB-INF
`-- web.xml
下面解释下命令的参数:
- mvn archetype:generate, 执行 generate goal。 若要看详细说明,可以运行命令: mvn archetype:help -Ddetail=true -Dgoal=generate
- -B Batch mode, 与其相反的是默认的交互模式。当云行指令: mvn archetype:generate 没有任何参数时, Maven 会启用交互模式, 同时会列出所有已知的 ArcheType 供你选择。
- -DarchetypeGroupId=org.apache.maven.archetypes
- -DarchetypeArtifactId=maven-archetype-webapp
- -DarchetypeVersion=1.0 以上三个参数指定了具体使用哪个 archetype 做为生成当前项目的模板
- -DgroupId=com.mycompany.webapp
- -DartifactId=myapp
- -Dversion=1.0 以上三个参数指定了你要创建项目的 groupId 和 artifactId, version。如果你在模板(使用 velocity)文件中定义了其他变量,需要先在 archetype-metadata.xml 文件中指定,之后通过 -DvarName=value 的方式传入。详见下面的例子。
创建好了我们这个工程, 我们仅仅需要执行:
cd myapp
mvn package
就能得到一个 myapp.war。
使用 maven archetype 的好处显而易见,那就是快速创建工程,不需要一个个文件的创建, 更不许要去写很多 build 脚本。很多人喜欢用 ant + ivy 做为 build 的脚本,因为 ant 是 100% 自由,随意定义 target 和task, 而不像 Maven 给定死了很多 build 中的 phrase, 想做个扩展,还需要开发个 Mojo。但是, 当 Mojo 越来越多,你就发现 Maven 的价值了。 Ant 适合一个工程, 而 Maven 考虑的是一系列的工程。
在上面的那个例子里,我使用的 archetype 是通过 archetypeGroupId, archetypeArtifactId, archetypeVersion 来指定的,那么我是怎么知道这个 archetype 呢? 怎样才知道有哪些 Archetype 可以使用呢?这就需要 Archetype Catalog了。
我们上面提到过, 如果执行命令: mvn archetype:generate 不带参数的时候, Maven 会自动列出很多可用的 Archetype 供你选择, 这个列表实际上是从一个 XML 文件解析出来的, 叫做: archetype-catalog.xml, 默认是先后从: http://repo1.maven.org/maven2/archetype-catalog.xml
, ~/.m2/repository/archetype-catalog.xml 获取。这个 archetype-catalog.xml 就是 archetype catalog, 其定义了当前 repository 里可用的 archetype 列表。我们大概看下这个 xml 文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<archetype-catalog>
<archetypes>
<archetype>
<groupId>com.agilejava.docbkx</groupId>
<artifactId>docbkx-quickstart-archetype</artifactId>
<version>2.0.13</version>
</archetype>
...
<archetype>
<groupId>org.apache.maven.archetypes</groupId>
<artifactId>maven-archetype-webapp</artifactId>
<version>1.0</version>
<description>An archetype which contains a sample Maven Webapp project.</description>
</archetype>
...
</archetypes>
</archetype-catalog>
其中:
- <archetype> 定义一个 archetype
- <groupId> 定义 archetype 的 groupId
- <artifactId> 定义 archetype 的 artifactId
- <version> 定义 archetype 的 version
- <description> 说明了该 archetype 的用处。
每个 Maven repository 都有自己的 archetype catalog 文件, 默认路经是: <Maven Repository URL>/archetype-catalog.xml。 在运行 mvn archetype:generate 的时候,我们可以通过指定 -DarchetypeCatalog=<Catalog Name or URL> 使用任意 Maven repository 下的 archetype-catalog。 Maven archetype plugin 还提供了几个 goals 用来更新本地的 archetype catalog。 具体请运行 mvn archetype:help 查看。
虽然上面的例子很简单的创建了一个 webapp 的 war, 但是它过于简单了, 连个 servlet 都没有,也不是最新 Servlet 3 的规范。当已知的 archetype 不能满足你的要求的时候,你可以自己创建一个。
下面我们创建个 maven-archetype-webapp-servlet3 的 archetype 用来生成基于 Servlet 3 的简单的 webapp:
我们先看一下这个 archetype 的目录结构:
|-- pom.xml # 1
`-- src
`-- main
`-- resources
|-- archetype-resources # 2
| |-- pom.xml # 3
| `-- src
| `-- main
| |-- java
| | `-- HelloWorldServlet.java
| `-- webapp
| |-- index.jsp
| `-- WEB-INF
| `-- web.xml
`-- META-INF
`-- maven # 2
`-- archetype-metadata.xml # 4
其中:
- # 1,这是个 archetype 的 pom,用来生成一个 archetype。
- # 2,这个是 archetype 需要的目录结构。
- # 3,这个是 prototype 的 pom。 当使用该 archetype 生成一个项目的时候, 这个 pom 作为生成项目的 root pom。
- # 4,这个是 archetype 的描述文件, 主要描述生成项目的时候怎么 copy 文件和目录。
我们主要看下 archetype-metadata.xml 总的内容:
<archetype-descriptor xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
name="servlet 3 webapp" partial="false" >
<requiredProperties>
<requiredProperty key="description" >
</requiredProperty>
</requiredProperties>
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8" >
<directory>src/main/java/</directory>
</fileSet>
<fileSet filtered="true" packaged="false" encoding="UTF-8" >
<directory>src/main/webapp/</directory>
</fileSet>
</fileSets>
</archetype-descriptor>
它的格式非常直白,requiredProperties/requiredProperty 指需要定义的属性名字, 可以有默认值,通过命令行中的 -DvarName=value 方式传入。在模板文件中 ${varName} 引用。 fileSets/fileSet 指定一个目录, 如果 filtered=true, 那么Maven把所有的文件作为 velocity 模板文件对待。 如果 packaged=true, 那么将会把该目录 copy 到项目的 package 对应的目录下。encoding=UTF-8 指定采用 UTF-8 编码。
其他文件内容,可以查看附件。
当我们建好了这个 archetype 后, 运行指令: mvn install 安装在本地的 repository 下, 就可以使用了。 因为 mvn archetype:generate 默认到 repo1.maven.org/maven2/ 上寻找 archetype, 我们需要额外增加一个参数:
-DarchetypeRepository=local, 整个的命令为:
mvn archetype:generate \
-B \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp-servlet3 \
-DarchetypeVersion=1.0 \
-DarchetypeRepository=local \
-DgroupId=com.mycompany.webapp \
-DartifactId=myapp \
-Dversion=1.0 \
-Ddescription=Hello Servlet 3
之后运行: cd myapp; mvn package
如果本机正运行着 JBoss AS 7, 可以采用指令: ./jboss-admin.sh --connect --command="deploy .../target/myapp.war" 进行部署。非常简单快捷。
有关 JBoss AS 7 的文章, 推荐阅读 http://jbosscn.iteye.com
分享到:
相关推荐
描述进一步强调了文章的实用性,即通过PDF形式提供了一步一步的指导,帮助用户掌握在Keil51中创建工程文件的具体操作流程。这不仅适用于初学者,对于有一定基础但希望巩固技能的开发者也极具价值。 #### 标签解析:...
在提供的压缩包文件中,包含了一个名为"Create_F"的VS2008工程,用户可以直接运行以体验和学习这一功能。 创建大文件是C语言中的一项基础任务,但当文件大小超过4GB时,这个问题就变得相对复杂。传统的文件操作函数...
使用CMSIS-Pack快速创建STM32F411x裸机工程 1、新建Keil工程 2、选择工程文件夹命名工程文件 3、选择芯片系列 4、 选择要打开的外设(CMSIS-Driver)及添加芯片启动文件(Device) 5、 添加标准main文件及系统滴答定时器...
工程创建开始于在Keil中创建一个全新的工程,并为其指定目标芯片型号,本例中为STM32F103ZE。选择正确的芯片型号是重要的第一步,因为这将决定工程将支持的外设和功能。选择芯片后,Keil会提供选择是否加载启动文件...
使用Codeblocks创建OpenGL工程 OpenGL是一种跨语言、跨平台的图形API,广泛应用于 trois维计算机图形、游戏...使用Codeblocks创建OpenGL工程非常简单,只需要按照上述步骤进行操作,就可以快速创建一个OpenGL工程。
本文将详细介绍如何利用Civil 3D快速创建一条城市道路模型,特别适合刚接触Civil 3D的初学者。 首先,创建道路模型的第一步是获取当地地形的高程点文件。这些数据一般可以通过地形测量获得,或者从现有的地图、地形...
Creo 工程图创建方法 Creo 是一种功能强大且广泛应用的三维造型设计软件,广泛应用于...Creo 工程图创建方法是指在 Creo 软件中创建工程图的方法,具有快速创建高质量的工程图、提高设计效率和产品质量等多种优点。
快速创建基于对话框的 MFC 工程可以按照以下步骤进行: 1. 选择 MFC AppWizard[exe](MFC 应用程序向导)选项。 2. 选择 Dialog based 单选按钮,创建一个生成基于对话框的应用程序。 3. 选择生成框架的类型,例如 ...
"Myeclipse 中创建 webservice 工程" 在 MyEclipse 中创建 ...这些知识点都是我们在创建 webservice 工程中所需要的重要步骤,通过掌握这些知识点,我们可以快速创建自己的 webservice 工程,并进行客户端调用。
这个压缩包"一个django的工程模板,为了快速启动一个工程进行开发.zip"包含了一个预配置的Django项目模板,目的是简化新项目的初始化过程,帮助开发者迅速开始编码。 在Django中,一个项目通常由多个应用组成,每个...
本文将详细介绍如何使用 Maven 在 Eclipse 中创建一个 Web 工程。 #### 二、准备工作 在开始之前,请确保已经安装了以下组件: - **JDK**:Java 开发工具包。 - **Maven**:用于自动化构建过程。 - **Eclipse IDE...
本文介绍了vue使用vue-cli快速创建工程,分享给大家,具体如下: vue-cli安装 npm i vue-cli -g vue init webpack-simple vue-todos vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue ...
在本文中,我们将深入探讨如何在Microsoft Visual C++ 6.0(简称VC6)环境中为Lua编程语言创建一个静态库工程。Lua是一种轻量级的脚本语言,以其简洁的语法、强大的元编程能力以及易集成性而受到广泛欢迎。在VC6中...
UG工程图模板是用于快速创建专业工程图纸的重要工具,它为设计人员提供了预先设定好的布局、尺寸标注样式、注解格式等元素,大大提升了工作效率。本文将深入探讨UG(Unigraphics NX)软件中的工程图模板及其应用。 ...
标题中的“JAVA简易编译器不需创建工程速度快”指的是一个简化版的JAVA集成开发环境(IDE),它省略了创建工程的过程,提高了编程和编译的效率。这个编译器设计的目标是让用户能快速地编写和运行Java代码,而不需要...
本教程将详细介绍如何使用STM32CubeMX工具来快速设置一个使用FreeRTOS操作系统的基础工程,特别针对STM32F103C8T6开发板,这是正点原子系列中的一款经典开发平台。 **1. STM32CubeMX介绍** STM32CubeMX是意法半导体...
作为初学者,学习 Java 的第一步就是创建一个 Java 工程,并成功地编译和运行第一个 Java 程序。本文将指导您如何使用 Eclipse 创建一个 Java 应用程序,并详细介绍了 Java 工程创建的每个步骤。 一、Eclipse 简介 ...
此外,创建工程的目录(包括上级目录)也不可以是中文,否则会出错。 在创建第一个Android工程时,需要了解一些基本概念,如Activity、Layout、Intent等。Activity是Android应用程序的基本组件,它负责与用户进行...
本文将详细介绍如何使用Keil5创建一个新的STM32工程,包括创建工程的基本步骤、设置芯片型号和运行环境、添加文件和设置搜索路径等内容。 #### 二、创建新工程 ##### 1. 新工程的存储路径及名字 - **创建文件夹...