Maven项目管理工具:MavenArchetype(原型/模板)

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

MavenArchetype由下面5个模块组成:

maven-archetype-plugin:Archetype插件。

archetype-packaging:用于描述Archetype的生命周期与构建项目软件包。

archetype-models:用于描述类与引用。

archetype-common:核心类。

archetype-testing:用于测试MavenArchetype的内部组件。

maven-archetype-plugin

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

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

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

mvn archetype:generate1复制代码类型:[java]

为了满足用户的需求,Maven为用户提供了大量不同类型的Archetype模板(到本教程编写时共提供了2916个Archetype模板)。

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

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

groupId

artifactId

version

package

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

示例1

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

mvn archetype:generate1复制代码类型:[python]

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.0:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.2.0:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.2.0:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
……
2860: remote -> tk.skuro:clojure-maven-archetype (A simple Maven archetype for Clojure)2861: remote -> top.lshaci:framework-archetype (top lshaci framework maven archetype)2862: remote -> top.marchand.archetype:sie-xf-prio-dep-import-generic ([ELS] Modèle de projet d'import Flash basé sur l'importeur générique)2863: remote -> top.ssrsdev:eightroes-plugin-archetype (eightroes-webapp-archetype)2864: remote -> top.ssrsdev:eightroes-webapp-archetype (eightroes-webapp-archetype)2865: remote -> tr.com.lucidcode:kite-archetype (A Maven Archetype that allows users to create a Fresh Kite project)2866: remote -> tr.com.obss.sdlc.archetype:obss-archetype-java (This archetype provides a common skelton for the Java packages.)2867: remote -> tr.com.obss.sdlc.archetype:obss-archetype-webapp (This archetype provides a skelton for the Java Web Application packages.)2868: remote -> ua.co.gravy.archetype:single-project-with-junit-and-slf4j (Create a single project with jUnit, Mockito and slf4j dependencies.)2869: remote -> uk.ac.ebi.gxa:atlas-archetype (Archetype for generating a custom Atlas webapp)2870: remote -> uk.ac.gate:gate-plugin-archetype (Maven archetype to create a new GATE plugin project.)2871: remote -> uk.ac.gate:gate-pr-archetype (Maven archetype to create a new GATE plugin project including a sample PR class (an empty LanguageAnalyser).)
2872: remote -> uk.ac.nactem.argo:argo-analysis-engine-archetype (An archetype which contains a sample Argo (UIMA) Analysis Engine)
2873: remote -> uk.ac.nactem.argo:argo-reader-archetype (An archetype which contains a sample Argo (UIMA) Reader)
2874: remote -> uk.ac.rdg.resc:edal-ncwms-based-webapp (-)2875: remote -> uk.co.markg.archetypes:java11-junit5 (An archetype for generate java 11 projects with junit 5.)2876: remote -> uk.co.nemstix:basic-javaee7-archetype (A basic Java EE7 Maven archetype)2877: remote -> uk.co.solong:angular-spring-archetype (So Long archetype for RESTful spring services with an AngularJS frontend. Includes debian deployment)2878: remote -> us.fatehi:schemacrawler-archetype-maven-project (-)2879: remote -> us.fatehi:schemacrawler-archetype-plugin-command (-)2880: remote -> us.fatehi:schemacrawler-archetype-plugin-dbconnector (-)2881: remote -> us.fatehi:schemacrawler-archetype-plugin-lint (-)2882: remote -> ws.osiris:osiris-archetype (Maven Archetype for Osiris)2883: remote -> xyz.luan.generator:xyz-gae-generator (-)2884: remote -> xyz.luan.generator:xyz-generator (-)2885: remote -> za.co.absa.hyperdrive:component-archetype (-)Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1744:1234567891011121314151617181920212223242526272829303132333435363738394041复制代码类型:[java]

2.直接回车,选择默认选项(1744:maven-archetype-quickstart)。

接下来,Maven选择Archetype版本。

Choose org.apache.maven.archetypes:maven-archetype-quickstart version:1: 1.0-alpha-12: 1.0-alpha-23: 1.0-alpha-34: 1.0-alpha-4 5: 1.06: 1.17: 1.38: 1.4Choose a number: 8:12345678910复制代码类型:[java]

直接回车,选择默认选项(8:maven-archetype-quickstart:1.4)。

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

Define value for property 'groupId': net.biancheng.www
Define value for property 'artifactId': thirdMaven
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' net.biancheng.www: :1234复制代码类型:[java]

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

Confirm properties configuration:
groupId: net.biancheng.www
artifactId: thirdMaven
version: 1.0-SNAPSHOTpackage: net.biancheng.www
Y: :123456复制代码类型:[java]

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

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: net.biancheng.www
[INFO] Parameter: artifactId, Value: thirdMaven
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: net.biancheng.www
[INFO] Parameter: packageInPathFormat, Value: net/biancheng/www
[INFO] Parameter: package, Value: net.biancheng.www
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: net.biancheng.www
[INFO] Parameter: artifactId, Value: thirdMaven
[INFO] Project created from Archetype in dir: d:\maven\thirdMaven
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:39 min[INFO] Finished at: 2021-03-03T16:18:11+08:00[INFO] ------------------------------------------------------------------------12345678910111213141516171819复制代码类型:[python]

项目结构

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

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

<?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>net.biancheng.www</groupId>
 <artifactId>thirdMaven</artifactId>
 <version>1.0-SNAPSHOT</version>
 <name>thirdMaven</name>
 <!-- FIXME change it to the project's website -->
 <url>http://www.example.com</url>
 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>
 </properties>
 <dependencies>
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.11</version>
   <scope>test</scope>
  </dependency>
 </dependencies>
 <build>
  <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
   <plugins>
 <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
 <plugin>
  <artifactId>maven-clean-plugin</artifactId>
  <version>3.1.0</version>
 </plugin>
 <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
 <plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <version>3.0.2</version>
 </plugin>
 <plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.0</version>
 </plugin>
 <plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.22.1</version>
 </plugin>
 <plugin>
  <artifactId>maven-jar-plugin</artifactId>
  <version>3.0.2</version>
 </plugin>
 <plugin>
  <artifactId>maven-install-plugin</artifactId>
  <version>2.5.2</version>
 </plugin>
 <plugin>
  <artifactId>maven-deploy-plugin</artifactId>
  <version>2.8.2</version>
 </plugin>
 <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
 <plugin>
  <artifactId>maven-site-plugin</artifactId>
  <version>3.7.1</version>
 </plugin>
 <plugin>
  <artifactId>maven-project-info-reports-plugin</artifactId>
  <version>3.0.0</version>
 </plugin>
   </plugins>
  </pluginManagement>
 </build>
</project>123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869复制代码类型:[java]

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

App.java代码如下。

package net.biancheng.www;
/**
* Hello world!
*/
public class App { public static void main(String[] args) {  System.out.println("Hello World!");
 }
}123456789复制代码类型:[python]

AppTest.java代码如下。

package net.biancheng.www;import static org.junit.Assert.assertTrue;import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest {
 /**
  * Rigorous Test :-)
  */ @Test
 public void shouldAnswerWithTrue() {
  assertTrue(true);
 }
}
(0)

相关推荐

  • 一文搞懂 Maven 原理

    作者简介大数据研发工程师,主要研究 Hive,Presto,Spark 等计算引擎.有任何问题,欢迎大家随时联系:- 知乎: tkanng- GitHub: tkanng- Email: tkanng ...

  • Maven项目管理工具:Maven生命周期(clean+site+default)

    在Maven出现之前,项目构建的生命周期就已经存在,开发人员每天都在对项目进行清理,编译,测试及部署,但由于没有统一的规范,不同公司甚至不同项目之间的构建的方式都不尽相同. Maven从大量项目和构建 ...

  • Maven项目管理工具:Maven仓库(本地仓库+远程仓库)

    在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称为构件. Maven在某个统一的位置存储所有项目的构件,这个统一的位置,我们就称之为仓库.换言之,仓库就是存放依赖和插件的地方. 任何的构 ...

  • Maven项目管理工具:Maven依赖

    Maven是一款优秀的依赖管理工具,那么什么是依赖呢? 通俗的说,如果一个Maven构建所产生的构件(例如Jar文件)被其他项目引用,那么该构件就是其他项目的依赖. 依赖声明 Maven坐标是依赖的前 ...

  • Maven项目管理工具:Maven自动化构建

    Maven自动化构建是一种方案,即当某个项目构建完成后(特别是有代码更新的情况下),所有依赖它的相关项目也应该开始构建过程,以确保这些项目的稳定运行. Maven的自动化构建主要通过如下两种方案实现: ...

  • Maven项目管理工具:MavenSNAPSHOT(快照)

    我们知道,Maven项目第一构建时,会自动从远程仓库搜索依赖项,并将其下载到本地仓库中.当项目再进行构建时,会直接从本地仓库搜索依赖项并引用,而不会再次向远程仓库获取.这样的设计能够避免项目每次构建时 ...

  • Maven项目管理工具:Maven聚合

    在实际的开发过程中,我们所接触的项目一般都由多个模块组成.在构建项目时,如果每次都按模块一个一个地进行构建会十分得麻烦,Maven的聚合功能很好的解决了这个问题. 聚合 使用Maven聚合功能对项目进 ...

  • Maven项目管理工具:IDEA配置Maven环境

    IntelliJIDEA是当前最流行的JavaIDE(集成开发环境)之一,也是业界公认最好用的Java开发工具之一.IntelliJIDEA支持Maven的全部功能,通过它我们可以很轻松地实现创建Ma ...

  • Maven项目管理工具:Eclipse配置Maven

    前面所涉及的Maven项目结构和代码都十分的简单,即使是使用最简单的文本编辑器也能够很快就能完成.但在实际的开发过程中,我们所涉及的Maven项目往往要复杂得多,此时我们就需要借助IDE(集成开发环境 ...

  • Maven项目管理工具:Maven创建Web项目

    到目前为止,我们所接触的Maven项目的打包类型只有JAR和POM,但在现今的互联网时代,我们创建的大部分应用程序都是Web应用,在Java中Web应用的打包方式是WAR. 本节我们将介绍如何使用Ma ...