老问题了:idea中使用maven archetype新建项目时卡住

问题,idea,使用,maven,archetype,新建,项目,卡住 · 浏览次数 : 229

小编点评

**分析问题:** 生成maven项目时,出现以下错误信息: ``` [DEBUG] Getting archetypes from catalog: F:\\maven\\repository\\archetype-catalog.xml [INFO] Archetype repository not defined. Using the one from [org.apache.maven.archetypes:maven-archetype-quickstart:1.4] found in catalog local ``` **分析原因:** 该错误是因为 `maven-archetype-plugin` 需要 `archetype-catalog.xml` 文件才能生成项目,但 `archetype-catalog.xml` 文件无法在本地找到。 **解决方案:** 1. **将 `-DarchetypeCatalog` 参数设置为本地仓库的位置。** - 在命令中添加 `-DarchetypeCatalog=local` 参数。 - `local` 表示本地仓库的根目录。 2. **重新运行项目。** **注意:** - `-DarchetypeCatalog` 参数只能设置为本地仓库的位置,不能设置为远程仓库地址。 - `archetype-catalog.xml` 文件应该存在于本地仓库中。 - 如果 `archetype-catalog.xml` 文件存在,但其权限设置不正确,可能导致无法访问。

正文

背景

作为一个后端Java打工人,idea就是最重要的打饭工具。创建项目,熟悉吧,但是,这么多年下来,因为idea换了版本,电脑换了等等,我还是时不时遇到根据maven archetype新建maven项目卡住。没错,我说的就是下面这样的场景:

image-20230818220009447

image-20230818220115722

总之吧,就是停在上面这里,不动了:

[INFO] --- maven-archetype-plugin:3.2.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode

以前都是网上随便找个文章搞一搞,或者有时候多等一会,解决了也就不管了,直到下次因为换电脑、重装idea等等,又不行了。我也奇怪,你拿Generating project in Batch mode去网上一搜,出来的解决办法还各不相同。

这次我决定好好探究下,了解下内部原理,知其然,也要知其所以然,把这个小问题搞清楚。

打开debug级别参数,查看阻塞原因

首先,点这里,可以看到完整命令:

image-20230818220715248

基本就是:

"C:\Program Files\Java\jdk1.8.0_202\bin\java.exe" 
-Dmaven.home=F:\tools\apache-maven-3.8.1-bin\apache-maven-3.8.1  
--errors
-DgroupId=org.example
-DartifactId=test8
-Dversion=1.0-SNAPSHOT

-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-quickstart
-DarchetypeVersion=1.4

-DarchetypeRepository=F:/maven/repository

org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate

可以看下上面的命令,我已经去除了不重要的参数,剩下的分几个部分:

  • maven home目录
  • 日志级别,目前是-errors,不会打印太详细的日志
  • -DgroupId/-DartifactId/-Dversion 我们要生成的业务module的坐标
  • -DarchetypeGroupId/-DarchetypeArtifactId/-DarchetypeVersion module模版/原型的坐标
  • -DarchetypeRepository module模版/原型的本地仓库位置
  • org.apache.maven.plugins:maven-archetype-plugin:RELEASE:generate 丢给maven的执行参数,表示要执行的插件及目标

上面这里,日志级别是比较高的,我们需要调低,怎么调呢,通过idea的settings即可:image-20230818221451851

打开debug级别后,再次运行,命令里就会多出一个:--debug参数,而运行时就会出现如下日志:

	![image-20230818221704629](https://dump-1252523945.cos.ap-shanghai.myqcloud.com/img/202308182217713.png)

日志显示正在获取某个xml文件。

这个文件的url已经给出来了,网上都是说,文件特别大,可以自己浏览器下载下来,放到某个位置,然后再改个参数-DarchetypeCatalog=local,后续让maven都从这个位置去读即可。

我看了下,这个文件确实大,14M左右,而且是从maven官方仓库那小水管下载,确实要卡很久,文件是干啥的呢,catalog表示目录,合起来意思就是项目模版的目录,比如我们常用的quickstart,只是其中的一个:

-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-quickstart
-DarchetypeVersion=1.4

文件内容大概如下,整个文件包含了5w多个模板,这么多,能不慢吗:

image-20230818223322663

image-20230818223432985

一个疑问

按照网上的方案,我把文件下载下来了,但我还不知道把文件放到哪里去。

我想着,我先把参数-DarchetypeCatalog=local改了,看看debug日志,在local参数情况下,是去哪里获取这个文件:

image-20230818223623549

然后,注意啊,敲黑板了!rerun的话,这个参数是不生效的,必须新建project或module,这个参数才会生效,也就是说,之前建的都没效果,仅对新project、module生效。

image-20230818223920206

此时,如下,它会去本地仓库的根目录下查找这个目录文件:

image-20230818224159385

ok,知道去哪里放这个目录文件了,问题是,我还没放呢,但它这次执行为啥就成功了呢?

image-20230818224430566

虽然成功了,但是给我整得有点迷茫,不知道怎么就成功了。我以为是idea有什么缓存,我还重启了几次idea,后来发现应该就是这样设计的:

加了-DarchetypeCatalog=local的情况下,会在本地的本地仓库下找archetype-catalog.xml。但我们没放,所以找不到。找不到的话,它也就放弃了,会直接去maven中央仓库拉取这个指定模版的jar下来。

[DEBUG] Getting archetypes from catalog: F:\maven\repository\archetype-catalog.xml
// 下面这行,意思是容错处理,去中央仓库拉取
[WARNING] Archetype not found in any catalog. Falling back to central repository.

拉取下来的模版/原型的内容

我们前面提到,模版的坐标为:

-DarchetypeGroupId=org.apache.maven.archetypes
-DarchetypeArtifactId=maven-archetype-quickstart
-DarchetypeVersion=1.4

拉取下来后,我们看看其内容:

image-20230818225230149

jar包解压后,发现很眼熟,就是我们模板项目的内容:

image-20230818225400014

打开其中两个文件查看,发现还有不少占位符:

image-20230818225611178

image-20230818225619818

下面这个App.java的$package占位符,我们在命令里没有显式传递,是maven获取了-DgroupId=com.example的值作为其默认值。

所以,解决本问题的方法,就是在maven的runner加上参数-DarchetypeCatalog=local就可以了,不需要下载xml文件再放到指定目录。

如果我们放置的话呢,看看日志是啥样:

[INFO] Generating project in Batch mode
[DEBUG] Getting archetypes from catalog: F:\maven\repository\archetype-catalog.xml
[INFO] Archetype repository not defined. Using the one from [org.apache.maven.archetypes:maven-archetype-quickstart:1.4] found in catalog local

了解该插件

https://maven.apache.org/archetype/maven-archetype-plugin/

image-20230818230444710

我也是才知道,还可以根据现在已有的项目来生成模版,感觉还是不错的,后面打算研究下,毕竟公司内项目一多,在项目间需要复用的东西就越来越多,搞个模版工程还是不错的。

该插件的goal:generate

我们上面使用的就是该插件的generate 目标:

https://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html

这里就有各个参数的解释,这也是为什么网上文章都让我们这么改参数的原因:

image-20230818230727608

mvn命令如何执行该插件

 mvn archetype:generate  
 -DarchetypeGroupId=org.apache.maven.archetypes
 -DarchetypeArtifactId=maven-archetype-quickstart
 -DarchetypeVersion=1.1 
 
 -DgroupId=com.company
 -DartifactId=project
 -Dversion=1.0-SNAPSHOT
 -Dpackage=com.company.project
 
 -X --errors -DarchetypeCatalog=local

这里-X,就和表示前面idea中的debug级别日志是一样的,具体可查看mvn -h:

 -X,--debug                             Produce execution debug output

另外,注意这里,指定了-Dpackage,即手动指定了我们module的包名。

总结

魔鬼藏于细节,但我们不要放过细节。

与老问题了:idea中使用maven archetype新建项目时卡住相似的内容:

老问题了:idea中使用maven archetype新建项目时卡住

# 背景 作为一个后端Java打工人,idea就是最重要的打饭工具。创建项目,熟悉吧,但是,这么多年下来,因为idea换了版本,电脑换了等等,我还是时不时遇到根据maven archetype新建maven项目卡住。没错,我说的就是下面这样的场景: ![image-20230818220009447

个人网站接入Google Ads的一点心得

前言 前段时间花了一些精力尝试和摸索主题接入 Google Ads 的问题,算是阶段性成功了吧,这次简单分享一下,如果有缘看到这篇文章,应该会有些启发。 1. 展示效果 上篇文章说到,前两天我在我的两款主题中内置了 Google Ads 广告位,并且我自己的网站也启用了,下图是这两天的成果: 确实有

OpenStack 下 CentOS6.X 镜像网络初始化失败问题排查

问题表现 在我的 OpenStack 集群上迁移了一批老旧的镜像(从其他三方云平台过来的)发现这批镜像在使用 ConfigDrive 的方式注入配置初始化时无法对非首张网卡镜像初始化(后经过测试非 ConfigDrive 的数据源也不行)。 排查路径 首先检查 cloud-init 是否是正常工作的

接口优化的常见方案实战总结

针对老项目,去年做了许多降本增效的事情,其中发现最多的就是接口耗时过长的问题,就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案。

微服务使用openfeign调用单点的会话失效问题

# 项目Springcloud,认证中心方式实现SSO使用开源框架Sa-Token >本身的单独访问每个客户端服务的单点就没有问题。然后单点通过Fegin调用就不好使了! ##### 主要使用的Sa-Token的微服务单点功能 ##### 使用的依赖如下 ```xml cn.dev33 sa-tok

【VMware vCenter】VMware vCenter Server(VCSA) 5.5 版本证书过期问题处理过程。

之前帮客户处理了一个因证书过期导致 vCenter Server 无法登录的问题,在此记录一下,因为时间过去有点久了,可能会有些地方描述的不是很清楚,所以就当作参考就行。客户环境是一个非常老的 vCenter Server 5.5 版本并基于 Linux 版本的 VCSA (当时这个版本还有基于 W

运维排查篇 | Linux 连接跟踪表满了怎么处理

nf_conntrack (在老版本的 Linux 内核中叫 ip_conntrack )是一个内核模块,用于跟踪一个网络连接的状态 一旦内核 netfilter 模块 conntrack 相关参数配置不合理,导致 nf_conntrack table full ,就会出现丢包、连接无法建立的问题

太坑了吧!一次某某云上的redis读超时排查经历

一次排查某某云上的redis读超时经历 性能排查,服务监控方面的知识往往涉及量广且比较零散,如何较为系统化的分析和解决问题,建立其对性能排查,性能优化的思路,我将在这个系列里给出我的答案。 问题背景 最近一两天线上老是偶现的redis读超时报警,并且是业务低峰期间,甚是不解,于是开始着手排查。 以下

记Codes 重新定义 SaaS模式开源免费研发项目管理平台——多事项闭环迭代的创新实现

市面上老一点的项目管理工具迭代下只含任务,其他一些新的项目管理工具迭代下包含了需求、任务和缺陷。迭代下只包含任务显然很不合理;只有需求、任务和缺陷,也是有问题的。且看文中详解。。。。。。

国产开源标杆,九年用心做好一款堡垒机

安全问题是企业信息化建设过程中非常重要的一环。随着数字经济时代的到来,近年来,企业 IT 环境发生了巨大的变化。作为保障企业 IT 运维安全审计的主要工具,堡垒机逐渐进入到大家的视野,越来越多的企业用户开始部署堡垒机,让企业的运维操作变得更加安全、更加高效。 传统的硬件堡垒机功能老旧,价格还很昂贵,