[Maven] Maven FAQ

Maven

Q: 推荐的 Maven 中央仓库

https://mvnrepository.com/ 【有人机检查,非常繁琐】
https://search.maven.org/ 【推荐,无人机检查】

Q: maven install时,报:"找不到符号"错误

  • 问题描述

maven install时,报:"找不到符号"

[INFO] 
[INFO] ---------------------< com.xx.xx:xxx-common-sdk >---------------------
[INFO] Building xxx-common-sdk 1.4.10-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ xxx-common-sdk ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\source_code\XxxXxxx\xxx_common_parent\xxx-common-sdk\src\main\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ xxx-common-sdk ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 8 source files to E:\source_code\XxxXxxx\xxx_common_parent\xxx-common-sdk\target\classes
[INFO] /E:/source_code/XxxXxxx/xxx_common_parent/xxx-common-sdk/src/main/java/com/xx/xx/sdk/parse/mqttmessage/CanParseServiceV2.java: 某些输入文件使用了未经检查或不安全的操作。
[INFO] /E:/source_code/XxxXxxx/xxx_common_parent/xxx-common-sdk/src/main/java/com/xx/xx/sdk/parse/mqttmessage/CanParseServiceV2.java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /E:/source_code/XxxXxxx/xxx_common_parent/xxx-common-sdk/src/main/java/com/xx/xx/sdk/parse/mqttmessage/MqttMessageParseServiceImpl.java:[340,88] 找不到符号
  符号:   方法 next()
  位置: 类型为com.xx.xx.utils.SourceStringReader的变量 reader
[ERROR] /E:/source_code/XxxXxxx/xxx_common_parent/xxx-common-sdk/src/main/java/com/xx/xx/sdk/parse/mqttmessage/MqttMessageParseServiceImpl.java:[348,160] 找不到符号
  符号:   方法 next()
  位置: 类型为com.xx.xx.utils.SourceStringReader的变量 reader
[ERROR] /E:/source_code/XxxXxxx/xxx_common_parent/xxx-common-sdk/src/main/java/com/xx/xx/sdk/parse/mqttmessage/MqttMessageParseServiceImpl.java:[350,116] 找不到符号
  符号:   方法 next()
  位置: 类型为com.xx.xx.utils.SourceStringReader的变量 reader
[INFO] 3 errors 
[INFO] -------------------------------------------------------------
  • 解决思路
  • 排查报"找不到符号"错误的java类所在工程是否为另一工程该工程的JAR包太老、或者该JAR包有包冲突的可能

如果是JAR包太老,则需要更新该工程的JAR包:(如下是示例)

  • mvn install该工程,
  • 再在本工程中maven重新导入(reimport)该工程,
  • 接着,再重新mvn install本工程
  • ...

(比如本问题中,就是另一工程中的JAR包太老,需要更新所致)。

Q: 将本地打的JAR包部署到本地仓库

  • 问题描述
  • 本地电脑 mvn install 时,只会打包到本工程(A)的 /target 目录下;不会自动部署到【本地仓库】下
  • 导致其他工程(B)引入本地打包工程(A)时,将不会获取到上面的本地包,而是使用原来的老包、或从远程仓库拉。

Git-Bash or Linux Terminal

mvn install:install-file -Dfile="E:\source_code\xxx\xxx\xxx-common-sdk\target\xxx-common-sdk-1.0.1-SNAPSHOT.jar" \
	-DgroupId=cn.xxx.xxx \
	-DartifactId=xxx-common-sdk \
	-Dversion=1.0.xx-SNAPSHOT \
	-Dpackaging=jar

优化脚本:

version=1.0.x-SNAPSHOT
groupId=com.xx.yy
artifactId=xxx-common-sdk

mvn install:install-file -Dfile="E:\source_code\Xxxx\xxx_common_xxx\xxx-common-sdk\target\xxx-common-sdk-1.0.x-SNAPSHOT.jar" \
	-DgroupId=$groupId \
	-DartifactId=$artifactId \
	-Dversion=$version \
	-Dpackaging=jar
  • 特别说明
  • 单纯地手动将JAR包拷贝、移入到本地仓库的目录下,并不管用。

IDEA 等 IDE 在工程下根据 pom.xml reimport JAR包时,甚至会将远程拉下来的JAR包去覆盖掉你人工放入本地仓库目录下的JAR包。感兴趣的可以研究下这是啥机制。

  • mvn install:install-file ...除了拷贝jar包到本地仓库的目录下,还会更新别处的相关元数据。

Q: 工程内引入本地指定路径的JAR包

  • 其他下游工程(B)在pom.xml临时引入工程A的指定路径的JAR包
<dependency>
	<groupId>xx.yy.zz</groupId>
	<artifactId>xxx-common-sdk</artifactId>
	<version>1.0.1-SNAPSHOT</version>
	<scope>system</scope>
	<systemPath>D:\Program_Data\maven_repository\xx\yy\zz\xxx-common-sdk\1.0.1-SNAPSHOT\xxx-common-sdk-1.0.1-SNAPSHOT.jar</systemPath>
</dependency>

Q1 : IDEA中报"unexpected markup <!d (position:"

问题描述

关键词: com\fasterxml\jackson\jackson-bom\2.11.4\jackson-bom-2.11.4.pomunexpected markup <!d (position:

The build could not read 1 project -> [Help 1]
  
  The project cn.loveconnect:user-service-parent:1.0.0-SNAPSHOT (H:\Gitee\xx-Project\01-source_code\xx-user-service\pom.xml) has 1 error
    Non-parseable POM D:\Program-Data\Maven-Repository\com\fasterxml\jackson\jackson-bom\2.11.4\jackson-bom-2.11.4.pom: unexpected markup <!d (position: START_DOCUMENT seen \n<!d... @2:4)  @ D:\Program-Data\Maven-Repository\com\fasterxml\jackson\jackson-bom\2.11.4\jackson-bom-2.11.4.pom, line 2, column 4 -> [Help 2]
To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.
For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[Help 2] http://cwiki.apache.org/confluence/display/MAVEN/ModelParseException

问题分析

unexpected markup <!d (position: 出现了不期望的标记<!d ...

可能是 pom.xml 文件有问题
打开后,果不其然!

压根就不是XML文件!

解决方法

  • 本地maven仓库中,删除该 jar 对应的整个目录。手动去下载对应的JAR包

参考文献

Q2 : IDEA卡在Resolving Maven dependencies

问题原因

  • 可能原因1: 项目过大,maven依赖过多,需要调整maven的jvm参数

在Reimpot All Maven Porjects时, 如果项目过大, maven依赖过多, 会直接卡在Resolving Maven dependencies这步

  • 可能原因2: maven构建异常,比如下载依赖时形成死锁

解决方法

  • 针对原因1,在尝试过更换maven版本, 更换阿里镜像无果的情况下, 可以尝试以下解决方案:

修改IDEA-Settings-Build,Execution,Deployment-Maven-Importing的JVM参数, 默认为768M, 可直接修改成 :

-Xms1024m -Xmx2048m
  • 针对原因2,如果不是“可能原因1”中的问题, 可以先看下 idea 的event log, 是否有构建异常, 比如我这里出现的 “Auto build completed with errors”. 由于不明确具体是什么构建异常, 可以进入命令行手动执行构建命令:
mvn clean install -X -D "maven.test.skip=true"

注意指定 -x 参数进入debug模式

从debug模式可以看出, maven构建卡在了依赖下载这里, 显示有并发的下载进程所以等待下载, 结果就卡住了,明显有假死进程形成死锁了。 可以按以下方式解决:

解决方案1: 重启电脑, 大概率可以解决这个问题
解决方案2: 找到假死进程,手动kill之后,重新构建:

  • 手动退出电脑上的所有已知java应用, 如idea, 自启动的java应用, 刚刚打开的mavn命令行等
  • 查看目前还剩余哪些java进程, 是否都是已知的, 比如我这里的三个java进程就是意料外的:
  • 手动kill意料外的进程
  • 重新进入命令行手动构建, 发现已经能构建成功了
  • 重新打开idea, 验证问题有无解决

参考文献

Q3 IDEA中,有其它类编译错误,如何单独运行main方法?

问题描述

使用过idea工具开发java项目的,经常会创建一个类包含一个main方法来测试代码,但此时如果项目中其它类文件有编译错误,这个时候main方法默认是运行不了的,会提示项目中有编译错误而终止运行。
其实,我们大多数的时候只是单元测试,只想运行此main相关的代码,其它代码编译错误希望后面再修改,那么我们需要更改idea默认的机制才可以单独运行单个类,下面就来介绍下如何操作

解决方法

  • 方法1

点击Edit Configurations,可以在左上角的工具按钮上点,也可以在菜单栏Run菜单中选择

默认在运行之前会Make/Build项目,也就是编译项目,将当前的Make/Build删除掉

然后点击加号,重新选择一个,如图所示,选择Make/Build,no error check,就是编译通过不进行错误检查

修改完成之后,点击确认,然后再次运行目标类的main方法,则可以看到此次可以正常运行了,不再受其它类编译错误影响了。

  • 方法2

如果项目中编译错误的类文件比较少,可以在错误的类上,如图所示,右击选择Exclude from Compile,将这个编译错误的类排除编译,就可以继续运行Test的main方法了。
但如果项目中编译错误的类比较多,排除方法比较麻烦,不建议这么操作

参考文献

Q4 : maven install编译打包时报"Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.4:jar (default-jar) on project xxx"

问题原因&解决思路

这个问题是有其他程序占用了jar包。

例如,你正在上传jar包或者用软件使用了jar包导致,把占用jar包的程序关闭即可重新打包maven。

Q5 : maven repository 找不到包

问题原因&解决思路

  • 有些jar在mvn repository可搜索到,但是用gradle/maven就是刷不下来,则:可以通过安装本地jar包的方式解决:
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.5.0 -Dpackaging=jar -Dfile=本地路径\ojdbc12.jar

特别注意:-DartifactId-Dversion等坐标信息,需与使用的jar保持一致

Q6 : 清理本地Maven仓库

问题原因&解决思路

  • 当maven项目的pom文件爆红时,可能是下载依赖jar包中途失败,导致jar包下载不完整。此时,可以使用以下命令来对仓库中的依赖删除,然后重新下载。

  • 方法1 清理target

mvn clean -U
  • 方法2 清理该项目依赖的本地仓库中的maven包
mvn dependency:purge-local-repository

本命令会清理pom.xml中的依赖包,并重新下载;但是并【不清理】不在pom.xml中的依赖包
默认情况下, purge-local-repository 将从本地存储库中删除与其运行的项目的每个依赖项(包括传递)的版本相关联的所有文件:
purge : (英译)v. 清洗、清除、排除

  • 扩展命令:mvn dependency:purge-local-repository -DreResolve=false

reResolve : 是否重新解析依赖关系

mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false 
  • 扩展命令: mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false --fail-at-end

actTransitively : 是否应该对所有传递依赖性起作用。默认值为true。
忽略错误( --fail-at-end )。 对于那些有一些依赖关系混乱的项目,或者依赖于一些内部的仓库(这种情况发生),这样做有时是有用的。

  • 方法3 清理maven本地仓库中下载失败的包

很多时候,maven工具帮我们下载jar包的时候,由于种种原因,或断电、或蓝屏、或工具抽风等等等等情况导致我们下载jar包失败,但此时工具已经在我们的maven仓库中创建了一个jar包文件夹了,但是这个jar包是不完整的,也就是不能用的。

rem 仅适用于 WINDOWS OS

set REPOSITORY_PATH=D:\maven\repository
rem 正在搜索 ...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完毕
pause

修改上述中的PATH参数为maven本地仓库地址
将上述代码复制粘贴到你的记事本中,命名随意,但一定要要以 .bat作为文件后缀名
双击执行
最好放入到C:\Windows 或 Maven本地仓库的根路径下,然后执行之

参考文献

Q:mvn install时报错:程序包lombok.extern.slf4j不存在

问题描述

  • pom.xml中有引入lombok依赖,且源代码中正常使用

  • IDEA 中有安装lombok插件

  • 但唯独 mvn install 时报此错误

问题分析&解决方法

  • 针对“程序包lombok.extern.slf4j不存在”的问题,可以按照以下步骤进行排查和解决:

  • step1. 检查项目是否已正确引入lombok依赖

首先,确保你的项目中已经正确添加了Lombok的依赖。如果你使用的是Maven,可以在pom.xml文件中添加如下依赖:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>最新版本号</version> <!-- 请替换为最新版本号,如: 1.18.24 -->
    <scope>provided</scope>
</dependency>

一定是在目标工程中显式引入,如果是目标工程pom.xml中别的依赖的内部引入了 lombok ,但目标工程的pom.xml没有显式引入,可能也会导致此错误。 -- 2024.12.25 踩此坑

如果你使用的是Gradle,可以在build.gradle文件中添加如下依赖:

implementation 'org.projectlombok:lombok:最新版本号' // 请替换为最新版本号
  • step2. 确认IDE是否已安装Lombok插件

在IntelliJ IDEA或Eclipse等IDE中,需要安装Lombok插件才能正确解析Lombok注解。以下以IntelliJ IDEA为例说明如何安装Lombok插件:

打开IntelliJ IDEA,进入File > Settings(Windows系统)或IntelliJ IDEA > Preferences(Mac系统)。
在设置窗口中,选择Plugins
插件市场中搜索Lombok,找到后点击Install进行安装。
安装完成后,重启IDE以使插件生效。

  • step3. 验证Lombok插件是否与当前IDE版本兼容

通常,Lombok插件会支持多个版本的IDE。但如果你的IDE版本较新或较旧,可能会遇到兼容性问题。建议查看Lombok插件的文档或更新日志,确认其是否支持你当前使用的IDE版本。

  • step4. 配置 IDE 来支持 Lombok 注解 (解决 IDEA 报: "Error:(3, 27) java: 程序包lombok.extern.slf4j不存在"的问题,而非 Maven的报错)
  • 打开 IntelliJ IDEA,进入 Preferences(Windows 系统下是 Settings)。
  • 在弹出的窗口中,找到 Build, Execution, Deployment。
  • 展开 Compiler,选择 Annotation Processors。
  • 勾选 Enable annotation processing,然后点击 Apply 或 OK 保存配置。
  • step5. 清理并重新构建项目
    在IDE中,你可以使用清理和重新构建项目的功能来解决一些由于依赖未正确加载导致的问题。

在IntelliJ IDEA中,可以使用Build > Rebuild Project重新构建项目
在Eclipse中,可以使用Project > Clean...来清理项目,然后使用Project > Build Project来重新构建项目。

  • step6. 在项目中直接添加slf4j的依赖

虽然lombok.extern.slf4j是Lombok提供的一个注解,用于简化日志记录的代码,但通常不需要单独添加slf4j的依赖到项目中(除非你需要使用slf4j的日志API进行编程)。然而,如果你确实需要在项目中直接使用slf4j的日志API,可以添加如下依赖:

对于Maven:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>最新版本号</version> <!-- 请替换为最新版本号 -->
</dependency>
<dependency>
    <!-- 添加slf4j的具体实现,如logback -->
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>最新版本号</version> <!-- 请替换为最新版本号 -->
</dependency>

对于Gradle:

implementation 'org.slf4j:slf4j-api:最新版本号' // 请替换为最新版本号
implementation 'ch.qos.logback:logback-classic:最新版本号' // 请替换为最新版本号

请注意,即使你添加了slf4j的依赖,如果仍然遇到lombok.extern.slf4j不存在的错误,那么问题通常与Lombok的依赖和插件配置有关,而不是slf4j本身的问题。

希望以上步骤能帮助你解决“程序包lombok.extern.slf4j不存在”的问题。如果问题仍然存在,建议检查IDE 或Maven(mvn xxxxCommand -X:可查看详细日志)的日志输出,看是否有更详细的错误信息可以帮助进一步定位问题。

参考文献

Q:IDEA中,mvn install时报错:程序包com.biz.xxx.XxxClass不存在

问题描述

解决方法

方法0: mvn idea:clean

  • 清除工程及各个子工程IDEA的*.iml文件 : mvn idea:clean

20250328 亲测

补充: mvn idea:module 二次生成 .iml文件

方法1:Settings-Build,Execution,Deployment-Build Tools-Maven-Runner

此方法,比较奏效。(20250321 亲测)

  • 可选:在maven项目下的pom.xml中加入如下代码
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.4.2</version>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>

方法2:File -> Setting -> Build,Execution,Deployment -> Maven -> Importing

此方法,未验证ok

  • 然后,点击apply,ok,刷新idea。

  • 如果还没解决,进行如下操作:

  • 在弹出的框中输入mvn idea:idea命令,回车。

方法3:maven包管理的clean方法

此方法,未亲测通过

  • 1、把项目的 Maven Project 打开
  • 2、点击clean,再点击run,即可运行

分析其原因:
之前点击了clean,再点击install,生成了错误的target,清除target之后重新生成就ok了

方法4:清理缓存

  • 1、清理缓存并重启

  • 2、刷新依赖(重新引入)

  • 3、查看依赖导入是否成功

  • 4、如果导入不成功,看看maven配置是否有问题

如果导入不成功,看看导入依赖是否有问题(单词错误、拼写错误等)

  • 附:各种清理方法

参考文献

Q:mvn install时报错:Could not transfer artifact org.sonatype.sisu:sisu-inject-plexus:jar:1.4.2 from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/146.75.112.215] failed: Connect timed out

问题描述

  • mvn install时报错:
D:\Program\JDK\openjdk-17.0.2_windows-x64_bin\jdk-17.0.2\bin\java.exe -Dmaven.multiModuleProjectDirectory=D:\Workspace\CodeRepositories\xxx-platform\xxx-sdk\xxx-sdk-utils -Djansi.passthrough=true -Dmaven.home=D:\Program\Maven\apache-maven-3.9.9-bin -Dclassworlds.conf=D:\Program\Maven\apache-maven-3.9.9-bin\bin\m2.conf -Dmaven.ext.class.path=D:\Program\Intellij-IDEA\ideaIC-2024.3.win\plugins\maven\lib\maven-event-listener.jar -javaagent:D:\Program\Intellij-IDEA\ideaIC-2024.3.win\lib\idea_rt.jar=55445:D:\Program\Intellij-IDEA\ideaIC-2024.3.win\bin -Dfile.encoding=UTF-8 -classpath D:\Program\Maven\apache-maven-3.9.9-bin\boot\plexus-classworlds-2.8.0.jar;D:\Program\Maven\apache-maven-3.9.9-bin\boot\plexus-classworlds.license org.codehaus.classworlds.Launcher -Didea.version=2024.3 -s D:\Program\Maven\apache-maven-3.9.9-bin\conf\settings.xml -Dmaven.repo.local=D:\Program-Data\Maven-Repository install
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.xxx:xxx-sdk-utils:jar:1.0.0
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: com.xxx:xxx-sdk-pojo:jar -> version (?) vs ${project.version} @ line 50, column 21
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO] 
[INFO] -----------------------< com.xxx:xxx-sdk-utils >------------------------
[INFO] Building xxx-sdk-utils 1.0.0
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- resources:3.3.1:resources (default-resources) @ xxx-sdk-utils ---
[INFO] Copying 1 resource from src\main\resources to target\classes
[INFO] 
[INFO] --- compiler:3.13.0:compile (default-compile) @ xxx-sdk-utils ---
[INFO] Nothing to compile - all classes are up to date.
[INFO] 
[INFO] --- resources:3.3.1:testResources (default-testResources) @ xxx-sdk-utils ---
[INFO] Copying 1 resource from src\test\resources to target\test-classes
[INFO] 
[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ xxx-sdk-utils ---
[INFO] Nothing to compile - all classes are up to date.
[INFO] 
[INFO] --- surefire:3.2.5:test (default-test) @ xxx-sdk-utils ---
[INFO] Artifact org.apache.maven.surefire:surefire-logger-api:jar:3.2.5 is present in the local repository, but cached from a remote repository ID that is unavailable in current build context, verifying that is downloadable from [central (https://repo.maven.apache.org/maven2, default, releases), apache.snapshots (https://repository.apache.org/snapshots, default, snapshots)]
[INFO] Artifact org.apache.maven.surefire:surefire-logger-api:jar:3.2.5 is present in the local repository, but cached from a remote repository ID that is unavailable in current build context, verifying that is downloadable from [central (https://repo.maven.apache.org/maven2, default, releases), apache.snapshots (https://repository.apache.org/snapshots, default, snapshots)]
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-logger-api/3.2.5/surefire-logger-api-3.2.5.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  11.762 s
[INFO] Finished at: 2024-12-25T11:13:12+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.2.5:test (default-test) on project xxx-sdk-utils: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:3.2.5:test failed: Plugin org.apache.maven.plugins:maven-surefire-plugin:3.2.5 or one of its dependencies could not be resolved:
[ERROR] 	Could not transfer artifact org.apache.maven.surefire:surefire-logger-api:jar:3.2.5 from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.108.215] failed: Connect timed out
[ERROR] 
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException

Process finished with exit code 1

问题分析

  • 关键词:
  • Could not transfer artifact org.apache.maven.surefire:surefire-logger-api:jar
  • Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.108.215] failed: Connect timed out

连接超时,大概率是网络问题

解决方法

  • 检查网络连接
  • 排查自己电脑是否开启了网络代理(如:V-P-N)

有网络代理,则解决、调整之

尝试使用浏览器访问上述仓库地址,检查是否可以正常访问。

  • 探测问题主机与repo.maven.apache.org:443的网络可达性

如果上面2步骤做完,确实还是不行,则:(原则上,不建议执行下面的步骤)

  • 检查 Maven 配置文件
  • 打开 Maven 的配置文件 settings.xml(一般位于 Maven 安装目录下的 conf 文件夹中,或者用户目录下的 .m2 文件夹中)。
  • 检查 <mirrors><repositories> 节点中的仓库地址是否配置正确。如果没有配置,可以手动添加仓库地址,例如:
<mirror>
    <id>central</id>
    <mirrorOf>central</mirrorOf>
    <url>https://repo.maven.apache.org/maven2</url>
</mirror>
  • 清理本地仓库:
  • 有时候本地仓库可能存在问题,例如下载失败的依赖项会在本地仓库中生成一个 lastUpdated 文件,导致以后都不会真正下载该依赖项。
  • 尝试删除本地仓库中的 lastUpdated 文件和相关依赖项,然后重新执行 mvn install。
  • 本地仓库通常位于用户目录下的 .m2/repository 文件夹中,具体路径查看settings.xml#localRepository的配置。
  • 使用代理或镜像仓库

如果你的网络环境需要设置代理,可以在 settings.xml 文件中添加代理配置:

<proxies>
    <proxy>
        <id>example-proxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>proxy.example.com</host>
        <port>8080</port>
        <username></username>
        <password></password>
        <nonProxyHosts>www.google.com|*.example.com</nonProxyHosts>
    </proxy>
</proxies>

或者,你可以设置使用镜像仓库来代替默认的中央仓库。在 settings.xml 文件中的 节点中添加镜像仓库配置,例如使用阿里云 Maven 镜像

<mirror>
    <id>aliyun-maven</id>
    <mirrorOf>central</mirrorOf>
    <name>Alibaba Maven Mirror</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>
  • 检查依赖项版本:
  • 确保 pom.xml 文件中声明的依赖项版本是正确的,并且与 Maven 仓库中的版本相匹配。
  • 如果依赖项的版本不正确,可能会导致冲突或无法解析。
  • 检查 POM 文件:
  • 确保 pom.xml 文件中的依赖项配置正确,没有错误的标签或缺失的依赖项。
  • 使用命令行导入:
  • 在命令行窗口中使用 Maven 命令导入依赖项,例如 mvn clean install -X,观察控制台输出,查看是否有错误信息。
  • 重启 IDE 或电脑:

有时候,IDE 或电脑的状态可能会影响 Maven 的行为。尝试重启 IDE 或电脑,并重新导入依赖项。

如果以上所有方法都没有解决问题,可以考虑查阅相关文档、搜索社区或寻求帮助。

参考文献

  • 文心快码BaiduComate

Q:如何在 IntelliJ IDEA 中配置 Maven 以优先使用本地依赖包?

在使用 IntelliJ IDEA 和 Maven 构建项目时,有时我们希望优先使用本地已安装的依赖包,而不是从远程仓库下载。这可能是因为本地版本包含特定配置或因为我们正在处理一个无法从远程仓库获取的私有依赖。以下是如何配置 IntelliJ IDEA 以优先使用本地依赖包的步骤:

  • 打开 IntelliJ IDEA 并打开您的 Maven 项目:首先,打开您的 IntelliJ IDEA 并在欢迎界面上选择您的 Maven 项目。如果您已经打开了 IntelliJ IDEA,您可以在欢迎界面或“最近的项目”列表中找到您的 Maven 项目并打开它。

  • 配置 Maven 下载管理器:在菜单栏中,选择“File” -> “Settings”(或使用快捷键Ctrl+Alt+S)。在弹出的“Settings”对话框中,展开“Build, Execution, Deployment” -> “Build Tools” -> “Maven”,然后在右侧选择“Runner”。在“Runner”选项卡中,您将看到一个名为“Maven Download Manager”的选项。确保此选项已选中。

  • 设置本地仓库路径:在“Settings”对话框中,展开“Build Tools” -> “Maven” -> “Repositories”。在这里,您可以添加、编辑或删除远程仓库配置。如果您知道本地依赖包的路径,您可以在“Local repository”字段中设置它。这告诉 Maven 在构建项目时优先检查此路径。

  • **使用 -o--offline 标志:在命令行中运行 Maven 命令时,可以使用 -o 或 --offline 标志来使 Maven 进入离线模式。这将告诉 Maven 只使用本地已缓存的依赖项,不尝试从远程仓库下载任何内容。

例如: mvn clean install -o / mvn clean install --offline

【本方法,亲测有效】
image

image

  • 检查 .m2 本地仓库:在您的用户目录下(通常是 ~/.m2/repository),您将找到本地存储的 Maven 依赖项。确保您的本地依赖包已正确安装在此目录下,以便 Maven 可以找到并使用它们。

通过遵循上述步骤,您应该能够配置 IntelliJ IDEA 和 Maven 以优先使用本地安装的依赖包。
请注意,这种方法通常适用于私有依赖或特定配置的依赖,而不是公共库。对于公共库,通常建议从官方仓库或中央仓库获取最新版本。
记住,始终保持您的本地依赖与项目需求和远程仓库同步,以确保最佳的构建效果和安全性。

  • 参考文献

Q: Maven 引入pom.xml的外包依赖包时报 401 Unauthorized 账号鉴权错误

问题描述

  • 近期公司制品仓库的账号密码有变更,故本地 maven settings.xml 的密码我也跟着换了一换。但Maven 引入pom.xml的外包依赖包时依旧报 401 Unauthorized 账号鉴权错误:

2025.8.27

cn.xxx.bd:bdp-common-pojo:pom:1.4.15-SNAPSHOT failed to transfer from https://artifactory.xxx.cn/artifactory/maven-snapshot during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of snapshots has elapsed or updates are forced. Original error: Could not transfer artifact cn.xxx.bd:bdp-common-pojo:pom:1.4.15-SNAPSHOT from/to snapshots (https://artifactory.xxx.cn/artifactory/maven-snapshot): authentication failed for https://artifactory.xxx.cn/artifactory/maven-snapshot/cn/xxx/bd/bdp-common-pojo/1.4.15-SNAPSHOT/bdp-common-pojo-1.4.15-SNAPSHOT.pom, status: 401 Unauthorized

Try to run Maven import with -U flag (force update snapshots)
> mvn clean install -U

cn.xxx.bd:bdp-common-pojo:pom:1.4.15-SNAPSHOT 先前尝试从 https://artifactory.xxx.cn/artifactory/maven-snapshot 传输失败。此故障缓存在本地存储库中,直到快照更新间隔过了或强制更新后才尝试重新解决。原始错误:无法将工件 cn.xxx.bd:bdp-common-pojo:pom:1.4.15-SNAPSHOT 从/传输到快照( https://artifactory.xxx.cn/artifactory/maven-snapshot ): authentication failed for https://artifactory.xxx.cn/artifactory/maven-snapshot/cn/xxx/bd/bdp-common-pojo/1.4.15-SNAPSHOT/bdp-common-pojo-1.4.15-SNAPSHOT.pom , status: 401 Unauthorized

问题分析

  • 从maven报错信息可见,我使用的是 server.id = snapshots 的仓库

  • 查验 本工程的 pom.xml 和父级工程 pom.xml 中配置的何种远程仓库

<project>
    //...
	
    <distributionManagement>
        <repository>
            <id>central</id>
            <name>maven-release</name>
            <url>http://artifactory.xxx.cn/artifactory/maven-release/</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>maven-snapshot</name>
            <url>http://artifactory.xxx.cn/artifactory/maven-snapshot/</url>
        </snapshotRepository>
    </distributionManagement>
</project>

由此知道,工程中使用了 server.id = central / snapshots 2个远程仓库

  • 再检查 maven conf/settings.xml 的 <servers><server> 的远程仓库的账号配置
  • 其一, server.id = central 、snapshots 的仓库是否有配置
<settings ...>
  //...

  <servers>
    <server>
	  <id>central</id>
	  <username>svc-dev</username>
	  <password>xxx</password>
    </server>
    <server>
      <id>snapshots</id>
      <username>svc-dev</username>
      <password>xxx</password>
    </server>
  <servers>
  
  //...

</settings>
  • 其二, 该仓库的账号、密码是否正确(可通过浏览器或 curl 自行登录 http://artifactory.xxx.cn/artifactory 验证)
  • IDE(如 IDEA),重启 + 整个工程 Reimport

问题延伸: Maven 导入外部依赖包时,报 403 错误

  • 解决方法
  • 删除本地仓库的问题包,再尝试重新导入

X 参考文献

posted @ 2024-12-25 09:22  千千寰宇  阅读(209)  评论(0)    收藏  举报