Maven Archetype(原型,模板)

Maven Archetype(原型,模板)

Archetype 是 Maven 项目的模板工具包,它定义了 Maven 项目的基本架构。Archetype 为开发人员提供了数千种创建 Maven 项目的模板,Maven 通过这些模板可以帮助用户快速的生成项目的目录结构以及 POM 文件。

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

  • maven-archetype-plugin:Archetype 插件。
  • archetype-packaging:用于描述 Archetype 的生命周期与构建项目软件包。
  • archetype-models:用于描述类与引用。
  • archetype-common:核心类。
  • archetype-testing:用于测试 Maven Archetype 的内部组件。

maven-archetype-plugin

我们知道 Maven 的所有功能都是通过插件实现的,Archetype 也不例外,它是由一个名为 maven-archetype-plugin 的插件实现的,该插件提供了 ArcheType 的所有功能。

虽然 ArcheType 只是一个插件,但其应用范围十分的广泛,几乎所有的主流 IDE(例如 Eclipse、NetBeans 和 IntelliJ IDEA)都在集成 Maven 时着重继承了 Archetype 特性,以方便用户快速的创建 Maven 项目。

执行以下命令可以帮助用户快速的创建 Maven 项目

mvn archetype:generate

为了满足用户的需求,Maven 为用户提供了大量不同类型的 Archetype 模板

在执行以上命令时,Maven 会输出一个 ArcheType 列表,每个ArcheType 前面都对应一个编号,我们可以根据不同的需求选择合适的 Archetype。

说到底,Archetype 只是一个模板,为了保持模板的通用性,它的很多重要的信息都是可配置的,在用户选择了 Archetype 后,还需要提供一些关于项目的基本参数,主要包括以下参数:

  • groupId
  • artifactId
  • version
  • package

在输入以上参数后,Archetype 插件就能够为用户生成项目的基本目录结构和 POM 文件了。

示例 1

1. 打开命令控制台,跳转到 D:\maven 目录中,执行以下 Maven 命令。

mvn archetype:generate

Maven 将开始处理,并要求选择所需的项目模板。


[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.2.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.2.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.2.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[WARNING] No archetype found in remote catalog. Defaulting to internal catalog
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: internal -> org.apache.maven.archetypes:maven-archetype-archetype (An archetype which contains a sample archetype.)
2: internal -> org.apache.maven.archetypes:maven-archetype-j2ee-simple (An archetype which contains a simplifed sample J2EE application.)
3: internal -> org.apache.maven.archetypes:maven-archetype-plugin (An archetype which contains a sample Maven plugin.)
4: internal -> org.apache.maven.archetypes:maven-archetype-plugin-site (An archetype which contains a sample Maven plugin site.
      This archetype can be layered upon an existing Maven plugin project.)
5: internal -> org.apache.maven.archetypes:maven-archetype-portlet (An archetype which contains a sample JSR-268 Portlet.)
6: internal -> org.apache.maven.archetypes:maven-archetype-profiles ()
7: internal -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
8: internal -> org.apache.maven.archetypes:maven-archetype-site (An archetype which contains a sample Maven site which demonstrates
      some of the supported document types like APT, XDoc, and FML and demonstrates how
      to i18n your site. This archetype can be layered upon an existing Maven project.)
9: internal -> org.apache.maven.archetypes:maven-archetype-site-simple (An archetype which contains a sample Maven site.)
10: internal -> org.apache.maven.archetypes:maven-archetype-webapp (An archetype which contains a sample Maven Webapp project.)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 7:

2. 直接回车,选择默认选项

Maven 要求提供项目的详细信息,根据要求输入项目的详细信息,若使用默认值,则直接回车即可。

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 7:
Define value for property 'groupId': org.example
Define value for property 'artifactId': thirdMaven
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' org.example: :

Maven 要求用户确认信息,直接回车或输入字母 Y 再按下回车键确认信息。若信息有误,则需要先输入除字母 Y 之外得其他字母按钮,在回车即可重新输入。

Confirm properties configuration:
groupId: org.example
artifactId: thirdMaven
version: 1.0-SNAPSHOT
package: org.example
 Y: :

以上信息确认完成过后,Maven 开始构建项目结构,并显示如下内容。


[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: D:\maven
[INFO] Parameter: package, Value: org.example
[INFO] Parameter: groupId, Value: org.example
[INFO] Parameter: artifactId, Value: thirdMaven
[INFO] Parameter: packageName, Value: org.example
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: D:\maven\thirdMaven
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:28 min
[INFO] Finished at: 2023-12-31T16:29:20+08:00
[INFO] ------------------------------------------------------------------------

进入 D:\maven 目录,我们可以看到 Maven 已经创建了一个名为 thirdMaven 项目,其目录结构如下图。

Maven 为项目生成了一个 POM 文件,如下所示。

<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>org.example</groupId>
  <artifactId>thirdMaven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Maven 创建项目时,还自动生成了两个示例类文件: App.java 和 AppTest.java。

App.java 代码如下。

package org.example;

/**
 * Hello world!
 *
 */
public class App {
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}

AppTest.java 代码如下。

package org.example;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

/**
 * Unit test for simple App.
 */
public class AppTest extends TestCase {
    /**
     * Create the test case
     *
     * @param testName name of the test case
     */
    public AppTest( String testName )
    {
        super( testName );
    }

    /**
     * @return the suite of tests being tested
     */
    public static Test suite()
    {
        return new TestSuite( AppTest.class );
    }

    /**
     * Rigourous Test :-)
     */
    public void testApp()
    {
        assertTrue( true );
    }
}

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值