一、Archetype介绍

Archetype是一个Maven项目的模板工具包,它定义了一类项目的基本架构。Archetype为开发人员提供了创建Maven项目的模板,同时它也可以根据已有的Maven项目生成参数化的模板。通过archetype,开发人员可以很方便地将一类项目的最佳实现应用到自己的项目中。在一个Maven项目中,开发者可以通过archetype提供的范例快速入门并了解该项目的结构与特点。

Maven Archetype由下面几个模块组成:

  • maven-archetype-plugin:Archetype插件。通过该插件,开发者可以在Maven中使用Archetype。
  • maven-archetype-plugin:Archetype插件。通过该插件,开发者可以在Maven中使用Archetype。
  • archetype-packaging:用于描述archetype的生命周期与构建项目软件包
  • archetype-models:用于描述类与引用
  • archetype-common:核心类
  • archetype-testing:用于测试Maven Archetype的内部组件

二、Archetype插件

Maven的Archetype插件让用户能够基于已有的项目骨架创建新的Maven项目,同时,该插件也可以从已有的项目中生成新的archetype。Maven项目与archetype之间的关系如下图所示:

1.png

Archetype插件有四个目标可以直接使用:

  • archetype:create(不推荐):从archetype 中创建一个Maven项目。
  • archetype:generate:从archetype 中创建一个Maven项目,需要开发人员在指定archetype,插件会从远程仓库中自动获取。
  • archetype:create-from-project:从已有的项目中生成archetype。
  • archetype:crawl:搜索并更新仓库中的archetype。

三、Archetype的使用与设计

在此我们仅介绍Maven 3的使用过程。

1、使用maven archetype来创建项目骨架

可以简单地运行:

mvn archetype:generate

紧接着会看到一段长长的输出,有很多可用的Archetype供选择。每一个Archetype前面都会对应有一个编号。同时,命令行会提示一个默认的编号,这个编号对应的Archetype为maven archetype quickstart。我们可以直接回车以选择maven archetype quickstart,紧接着Maven会提示输入maven archetype quickstart的版本,以及要创建项目的groupId、artifactId、version和包名package。如下输入并确认:

    Define value for groupId: : com.juvenxu.mvnbook  
    Define value for artifactId: : hello world  
    Define value for version:  1.0 SNAPSHOT: :  
    Define value for package:  com.juvenxu.mvnbook: :

会得到下图所示的结果:

2.png

Archetype插件将根据我们提供的信息创建项目骨架。在上面的例子中,Archetype插件会创建一个名为hello world的子目录。从中可以看到项目的基本结构:

  • pom.xml:包含了必要的信息以及一个junit依赖
  • 主代码目录src/main/java:包含了一个Java类com.juvenxu.mvnbook.helloworld.App,该类也只有一个简单的输出Hello World!的main方法
  • 测试代码目录src/test/java:包含了一个测试用例com.juvenxu.mvnbook.helloworld.AppTest。

当然,对于有经验的开发人员来说,上述过程并不方便。在确定了archetype名称的情况下,我们也可以使用下边的命令创建Maven项目:

mvn archetype:generate -DgroupId=org.sonatype.mavenbook.ch05 -DartifactId=simple-webapp -DpackageName=org.sonatype.mavenbook.ch05 -DarchetypeArtifactId=maven-archetype-webapp

即在关键词groupId、artifactId、archetypeArtifactIdn和packageName之前加-D来定义对应的内容。

2、Archetype的设计与生成

Archetype的设计可以根据项目的需求有所变化,本文以一个简单Spring Boot应用为例,介绍archetype的生成过程。

(1)创建一个新的maven项目,把配置好的文件放到相应的目录下面

a)修改Maven配置文件pom.xml

用以下代码覆盖原文件

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.midgetontoes</groupId>
<artifactId>spring-boot-simple</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
    <spring.boot.version>1.1.4.RELEASE</spring.boot.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${spring.boot.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring.boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-archetype-plugin</artifactId>  
            <version>2.0-alpha-4</version>  
        </plugin>
    </plugins>
</build>
</project>

可以看到,这个应用所声明的依赖很少,只有一个“org.springframework.boot:spring-boot-starter-web”,它是Spring Boot所提供的推荐的基础 POM 文件之一,用来提供创建基于Spring MVC的Web应用所需的第三方库依赖。

在添加完与Spring Boot相关的依赖以后,还需要将maven的archetype plugin添加到pom.xml中。

<plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-archetype-plugin</artifactId>  
            <version>2.0-alpha-4</version>  
        </plugin>

b)在src/main/java新建一个Application类,并加入示例代码

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class Application {
    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

代码中的Java类Application是一个简单的可以独立运行的 Web 应用。直接运行该Java 类会启动一个内嵌的Tomcat服务器运行在8080端口。访问“http://localhost:8080”可以看到页面上显示“Hello World!”。至此,一个简单的spring boot应用已经制作完成。

(2)生成archetype

打开cmd窗口,在刚才的maven项目的根目录中运行maven命令:

mvn archetype:create-from-project

(3)发布archetype

上面的步骤运行成功后,在工程的target/generated-sources/archetype目录下,会生成一个Archetype,进入这个目录。如果想要将新生成的archetype运行在本地仓库,就运行maven命令:mvn install;如果想要共享这个archetype,就使用deploy命令。

登录发表评论 注册

反馈意见