maven中自定义MavenArchetype的实现

 更新时间:2025年01月03日 09:30:27   作者:只年  
Maven自身提供了许多Archetype来方便用户创建Project,为了避免在创建project时重复的拷贝和修改,我们通过自定义Archetype来规范显得还蛮有必要,下面就来介绍一下,感兴趣的可以了解一下

Maven自身提供了许多Archetype来方便用户创建Project,但是每个团队都可能会有一些常用的文件或配置,为了避免在创建project时重复的拷贝和修改,我们通过自定义Archetype来规范显得还蛮有必要,下面简单介绍下使用maven-archetype-archetype来构建自己的Archetype的过程。

1、创建项目

示例

mvn archetype:generate    \
-DgroupId=com.zn.opit.template    \
-DartifactId=zn-springboot-template    \
-DarchetypeArtifactId=maven-archetype-quickstart    \
-DinteractiveMode=false
  • groupId: 项目的包名,通常是公司或组织的反向域名。
  • artifactId: 项目的名称,代表项目在 Maven 中的标识。
  • archetypeArtifactId: 我们使用 maven-archetype-quickstart 来创建一个简单的 Maven 项目。

创建完成后,你将有一个基本的 Maven 项目目录结构。

2、编写你的项目结构和代码

将Java文件和目录保持你项目的标准结构。这样,你已经完成了原型项目的编写。

3、转换为 Maven Archetype

现在你需要将该项目转换为 Maven Archetype。首先,你需要确保项目编译无误:

mvn clean install

之后,使用以下命令将现有项目打包为 Archetype:

mvn archetype:create-from-project

此命令将项目转换为 Archetype,并在 target/generated-sources/archetype 目录中生成 Archetype 的源码。

4、安装 Archetype 到本地仓库

将生成的 Archetype 安装到本地仓库中:

cd target/generated-sources/archetype
mvn clean install

这将把 Archetype 安装到你的本地 Maven 仓库,通常位于 ~/.m2/repository。

5、使用生成的 Archetype 创建新项目

现在,你已经有了一个本地安装的 Archetype,可以使用它来生成新项目。

首先,列出本地可用的 Archetype:

mvn archetype:generate

在这个列表中,查找你刚刚创建的 chaos-template。你应该能够找到它。

6、确认生成的项目是否正确

  • 打开你生成的新项目,检查文件结构是否和你原始项目一致。
  • 运行项目,确认代码没有问题。

7、在 IDE 中使用本地 Archetype

在 New Project 中,你应该能够选择 “Maven Archetype”,并在本地 Archetype 列表中看到 zn-springboot-tpl。

详细说明:

  • Archetype 是什么: Maven Archetype 是一个项目模板,可以用来快速生成带有特定结构和内容的项目。我们将上述代码作为模板,以便可以反复使用。
  • ${package} 的作用: 在 Archetype 中,你可以使用 ${package} 这种变量,它会在生成项目时自动替换为实际的包名。这让 Archetype 更加灵活。
  • 安装到本地仓库的目的是: 通过将 Archetype 安装到本地仓库,你可以在没有远程仓库的情况下,通过 IDE 或 Maven 使用本地模板来生成项目。

通过这些步骤,你将成功构建一个 Maven Archetype,并使用它来生成基于你代码模板的新项目。

FAQ

?org.apache.maven.archetype.source.ArchetypeDataSourceException: org.eclipse.aether.transfer.MetadataNotFoundException: Failure to find /archetype-catalog.xml in http://maven.aliyun.com/nexus/content/groups/public/ was cached in the local repository, resolution will not be reattempted until the update interval of alimaven has elapsed or updates are forced

这个错误是由于 Maven 在尝试从远程仓库中下载 Archetype catalog 时失败,尤其是在访问阿里云的 Maven 仓库时,无法找到 archetype-catalog.xml 文件。它最终会回退到使用本地或内部的 Archetype catalog。

你可以通过以下几种方式解决这个问题:

检查你的 Maven 的 settings.xml 配置文件,确保配置的远程仓库可用。你可以在 ~/.m2/settings.xml 中配置阿里云的镜像,但如果它不可用,可能需要更新或切换到其他可用的公共仓库。
在 settings.xml 中,检查是否有类似的配置:

<mirrors>
    <mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

尝试将这个 mirror 替换为更稳定的仓库,比如 Maven Central:

<mirrors>
    <mirror>
        <id>maven-default-mirror</id>
        <mirrorOf>central</mirrorOf>
        <name>Maven Central</name>
        <url>https://repo.maven.apache.org/maven2/</url>
    </mirror>
</mirrors>

保存并重试命令。

  • 强制更新仓库

由于该错误提到缓存可能导致不能自动重新下载文件,你可以使用 -U 选项来强制更新 Maven 仓库中的缓存:

mvn archetype:generate -U
  • 手动下载 Archetype catalog

如果远程仓库的问题持续,另一种解决办法是手动下载 archetype-catalog.xml 文件并将其放入本地仓库。你可以从其他 Maven 仓库或官方网站找到这个文件,然后放置在本地仓库合适的位置。

  • 使用本地 Archetype

由于你已经创建并安装了 Archetype 在本地仓库,可以通过以下命令使用本地的 Archetype 来生成项目:

mvn archetype:generate \
  -DarchetypeCatalog=local \
  -DarchetypeGroupId=com.zn.opit.chaos \
  -DarchetypeArtifactId=chaos-template \
  -DarchetypeVersion=1.0-SNAPSHOT \
  -DgroupId=com.example \
  -DartifactId=my-new-project

不用上述命令,此时已经可以执行install命令成功。

?在idea的New Project页面选择Archetype时并没有自己制作的那个

mvn clean install
# 生成本地 archetype-catalog.xml
# 当你在本地创建了 Archetype 后,Maven 需要生成一个 archetype-catalog.xml 文件,以便 IDE 能够识别本地的 Archetype。
# 使用以下命令生成本地的 Archetype 目录:
mvn archetype:crawl
# 该命令会在 ~/.m2/repository 目录下生成一个 archetype-catalog.xml 文件,该文件会包含所有本地安装的 Archetype 信息。
# 你可以在命令行中检查是否生成了此文件,通常路径是:
~/.m2/repository/archetype-catalog.xml

此时还没有,可以在 New Project → Catalog → Manage catalogs → 新增一个路径(name自定义、type是Local、location选择archetype-catalog.xml的路径,例如: /Users/zhinian/.m2/repository/archetype-catalog.xml)
。此时New Project,Catalog选择zhinian-tpl,下方已经有可选项了

在这里插入图片描述

到此这篇关于maven中自定义MavenArchetype的实现的文章就介绍到这了,更多相关自定义MavenArchetype内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • spring boot 日志/页面处理、实体类构建、后台管理功能的实现

    spring boot 日志/页面处理、实体类构建、后台管理功能的实现

    这篇文章主要介绍了spring boot 日志/页面处理、实体类构建、后台管理功能的实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • java-SSH2实现数据库和界面的分页

    java-SSH2实现数据库和界面的分页

    本文主要是介绍SSH2实现数据库和界面的分页的代码,分页在web应用中是经常要做的事情,实用性比较大,有需要的朋友可以来了解一下。
    2016-10-10
  • @PathParam和@QueryParam区别简析

    @PathParam和@QueryParam区别简析

    这篇文章主要介绍了@PathParam和@QueryParam区别,分享了相关实例代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Java日常练习题,每天进步一点点(49)

    Java日常练习题,每天进步一点点(49)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-08-08
  • Kotlin语言编程Regex正则表达式实例详解

    Kotlin语言编程Regex正则表达式实例详解

    这篇文章主要为大家介绍了Kotlin语言编程Regex正则表达式实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 为spring get请求添加自定义的参数处理操作(如下划线转驼峰)

    为spring get请求添加自定义的参数处理操作(如下划线转驼峰)

    这篇文章主要介绍了为spring get请求添加自定义的参数处理操作(如下划线转驼峰),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java中命令行参数--与-D的区别

    Java中命令行参数--与-D的区别

    本文主要介绍了Java中命令行参数--与-D的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java多线程——之一创建线程的四种方法

    Java多线程——之一创建线程的四种方法

    这篇文章主要介绍了Java创建线程方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Java 批量生成条码的示例代码

    Java 批量生成条码的示例代码

    这篇文章主要介绍了Java 批量生成条码的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • 深入浅析TomCat Session管理分析

    深入浅析TomCat Session管理分析

    这篇文章主要介绍了深入浅析TomCat Session管理分析,需要的朋友可以参考下
    2015-11-11

最新评论