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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 从基础实现到性能优化详解Java实现Word转HTML的完整指南

    从基础实现到性能优化详解Java实现Word转HTML的完整指南

    本文将基于实际项目经验,介绍 Java 中 Word 转 HTML 的几种实现方案,并以其中一种为例详细讲解转换过程中的关键配置,性能优化及常见问题处理
    2026-04-04
  • SpringData JPA快速上手之关联查询及JPQL语句书写详解

    SpringData JPA快速上手之关联查询及JPQL语句书写详解

    JPA都有SpringBoot的官方直接提供的starter,而Mybatis没有,直到SpringBoot 3才开始加入到官方模版中,这篇文章主要介绍了SpringData JPA快速上手,关联查询,JPQL语句书写的相关知识,感兴趣的朋友一起看看吧
    2023-09-09
  • SpringBoot应用线上重启脚本的命令详解

    SpringBoot应用线上重启脚本的命令详解

    这篇文章主要介绍了SpringBoot应用线上重启脚本,通过查找应用进程PID,杀死应用进程PID,运行启动脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 解决Spring或SpringBoot开启事务以后无法返回自增主键的问题

    解决Spring或SpringBoot开启事务以后无法返回自增主键的问题

    这篇文章主要介绍了解决Spring或SpringBoot开启事务以后无法返回自增主键的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 使用IDEA深度调试MyBatis SQL执行流程的实用指南

    使用IDEA深度调试MyBatis SQL执行流程的实用指南

    在软件开发的世界中,调试不仅是解决问题的工具,更是理解系统运行机制的窗口,对于像MyBatis这样复杂的持久层框架,掌握高效的调试技巧能够让我们真正洞察SQL从方法调用到数据库执行的完整生命周期,所以本文给大家介绍了使用IDEA深度调试MyBatis SQL执行流程的实用指南
    2025-10-10
  • SpringBoot详细讲解yaml配置文件的用法

    SpringBoot详细讲解yaml配置文件的用法

    这篇文章主要介绍了SpringBoot中的yaml配置文件问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Spring  ApplicationContextAware 接口的作用及使用方式

    Spring  ApplicationContextAware 接口的作用及使用方式

    Spring提供了许多回调接口,用于Bean生命周期中执行特定的操作,通过实现ApplicationContextAware接口,Spring提供了一种便捷的方式让 Bean获取对Spring容器的引用,本文介绍ApplicationContextAware接口的作用、使用方式,以及在实际应用中的常见场景,感兴趣的朋友一起看看吧
    2024-01-01
  • 将SpringBoot项目无缝部署到Tomcat服务器的操作流程

    将SpringBoot项目无缝部署到Tomcat服务器的操作流程

    SpringBoot 是一个用来简化 Spring 应用初始搭建以及开发过程的框架,我们可以通过内置的 Tomcat 容器来轻松地运行我们的应用,本文给大家介绍 SpringBoot 项目部署到独立 Tomcat 服务器的操作流程,需要的朋友可以参考下
    2024-05-05
  • 如何利用Java使用AOP实现数据字典转换

    如何利用Java使用AOP实现数据字典转换

    这篇文章主要介绍了如何利用Java使用AOP实现数据字典转换,AOP也是我们常说的面向切面编程,AOP在我们开发过程中应用也比较多,在这里我们就基于AOP来实现一个数据字典转换的案例
    2022-06-06
  • Java Swing JProgressBar进度条的实现示例

    Java Swing JProgressBar进度条的实现示例

    这篇文章主要介绍了Java Swing JProgressBar进度条的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论