java.lang.IllegalArgumentException:安装 mvn 时格式错误的 \uxxxx 编码

Shy*_*haa 7 java macos encoding maven java-8

在我的项目中运行 mvn install 时,我最终遇到了这个错误。虽然很多答案和资源都指出了/vs 中的错误\,但我想提一下,我没有本地更改,这个 repo 对我团队中的其他人来说很好用。以前对我来说也很好用。

在 Mac Os 10.15.7 和 JDK 1.8.0_291 上运行

请找到完整的堆栈跟踪:

java.lang.IllegalArgumentException: Malformed \uxxxx encoding.
    at java.util.Properties.loadConvert (Properties.java:672)
    at java.util.Properties.load0 (Properties.java:455)
    at java.util.Properties.load (Properties.java:408)
    at org.eclipse.aether.internal.impl.TrackingFileManager.read (TrackingFileManager.java:56)
    at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.read (DefaultUpdateCheckManager.java:511)
    at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.checkMetadata (DefaultUpdateCheckManager.java:250)
    at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolve (DefaultMetadataResolver.java:302)
    at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolveMetadata (DefaultMetadataResolver.java:181)
    at org.apache.maven.repository.internal.DefaultVersionRangeResolver.getVersions (DefaultVersionRangeResolver.java:198)
    at org.apache.maven.repository.internal.DefaultVersionRangeResolver.resolveVersionRange (DefaultVersionRangeResolver.java:148)
    at org.apache.maven.repository.internal.DefaultModelResolver.resolveModel (DefaultModelResolver.java:197)
    at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally (DefaultModelBuilder.java:1070)
    at org.apache.maven.model.building.DefaultModelBuilder.readParent (DefaultModelBuilder.java:846)
    at org.apache.maven.model.building.DefaultModelBuilder.build (DefaultModelBuilder.java:337)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:292)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor (DefaultArtifactDescriptorReader.java:171)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.resolveCachedArtifactDescriptor (DefaultDependencyCollector.java:538)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.getArtifactDescriptorResult (DefaultDependencyCollector.java:523)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:410)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:362)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process (DefaultDependencyCollector.java:349)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.doRecurse (DefaultDependencyCollector.java:506)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:458)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:362)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process (DefaultDependencyCollector.java:349)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.doRecurse (DefaultDependencyCollector.java:506)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:458)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:362)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process (DefaultDependencyCollector.java:349)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.doRecurse (DefaultDependencyCollector.java:506)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:458)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:362)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process (DefaultDependencyCollector.java:349)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.doRecurse (DefaultDependencyCollector.java:506)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:458)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:362)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process (DefaultDependencyCollector.java:349)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.doRecurse (DefaultDependencyCollector.java:506)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:458)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:362)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process (DefaultDependencyCollector.java:349)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.doRecurse (DefaultDependencyCollector.java:506)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:458)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:362)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process (DefaultDependencyCollector.java:349)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.doRecurse (DefaultDependencyCollector.java:506)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:458)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:362)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process (DefaultDependencyCollector.java:349)
    at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies (DefaultDependencyCollector.java:254)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies (DefaultRepositorySystem.java:284)
    at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve (DefaultProjectDependenciesResolver.java:169)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:243)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:147)
    at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:248)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:202)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:78)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:567)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
[ERROR] 
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下方法:

  1. 在我的 mac 上重新安装了 java
  2. 重装maven
  3. 试图使缓存无效并多次重新启动 IntelliJ。

小智 181

对我来说,这也是一个损坏的依赖项。
我不想经历设置调试器的过程,因此决定通过运行以下命令来查找目录\u0000中包含的文件:~/.m2

grep -rnw ~/.m2 -e '\u0000'
Run Code Online (Sandbox Code Playgroud)

之后你会得到损坏的文件,删除这些文件,然后构建maven。

请注意,如果您的配置与默认值不同,则必须指定存储库文件夹。阅读您的~/.m2/settings.xml并使用其中的值localRepository。例如:

<settings>
  <localRepository>/else/where</localRepository>
Run Code Online (Sandbox Code Playgroud)

使用:

grep -rnw /else/where -e '\u0000'
Run Code Online (Sandbox Code Playgroud)

如果您希望删除所有这些文件,请将文件名通过管道传输到xargs rm

grep -lrnw /else/where -e '\u0000' | xargs rm
Run Code Online (Sandbox Code Playgroud)

如果您的 .m2 存储库中有大量文件,您可以使用 find 命令来加快删除速度:

find  ~/.m2 -name "resolver-status.properties" -exec grep -H -e '\u0000' {} \; | sed -r 's/:.*$//g' | xargs rm
Run Code Online (Sandbox Code Playgroud)

  • 如果人们在 Windows 中遇到困难,您可以在 .m2 目录“FINDSTR /S /M“u0”resolver-status.properties”中运行此命令来查找损坏的文件。 (14认同)
  • 这对我有用。在 macOS 上,我运行“grep -r -e '\u0000' ~/.m2”,它生成了正确的解析器-ststus.properties,在删除依赖项后,该属性被正确的解析器替换,并且一切正常。 (9认同)
  • 我需要温习一下“grep”选项。这比我所做的更简洁: ```find ~/.m2 -name "resolver-status.properties" -print -exec grep "u0" {} \;``` (5认同)

mic*_*cle 88

要查找哪个文件格式错误(不必删除整个 Maven 存储库),您可以像这样调试它:

  1. 将断点添加到相关行java.util.Properties(如错误堆栈跟踪中详细说明),然后在调试模式下运行任何 Maven 操作。

在此输入图像描述

  1. 当代码到达该断点时,TrackingFileManager.read(File)在调用堆栈中查找并选择。

在此输入图像描述

  1. 现在找到导致问题的文件的路径。

在此输入图像描述

  1. 该文件确实格式错误...删除该文件(Maven 将在下一个操作期间重新下载它)。

在此输入图像描述

  1. 正确的文件(删除并重新下载后):

在此输入图像描述

  • 这实际上是一个很好的答案,其中包含找到确切文件的逐步详细信息。步骤 1(在 IntelliJ 中添加断点并将其与 Maven 一起使用)可以使用以下命令进行设置:https://spin.atomicobject.com/2020/08/20/maven-debugging-intellij/ (12认同)

mah*_*zer 32

我写了另一个问题的答案,这是类似的问题。下面的解决方案对我有用。

转到主目录中的 .m2 目录,并为每个依赖项删除“resolver-status.properties”。你可以使用

find ~/.m2/ -name resolver-status.properties -delete
Run Code Online (Sandbox Code Playgroud)

它将找到所有“resolver-status.properties”,并且 -delete 标志将删除它们。

现在重新加载 Maven 项目。

  • Windows 用户:使用文件资源管理器在整个 .m2 文件夹中搜索resolver-status.properties 文件,然后删除所有搜索到的文件并重新运行 maven 命令。它将开始工作 (2认同)

Raf*_*afi 23

事实上,大多数答案都是正确的,但有点不完整。显示消息,因为resolver-status.properties文件已损坏并且它们包含 \u0000,如 micycle 的答案所示。有时它有助于删除损坏的文件并重新运行 Maven 命令。有时问题会消失,有时则不会。问题出现了为什么这些文件会损坏。好吧,maven 似乎在解析器中包含一个错误: https: //issues.apache.org/jira/browse/MRESOLVER-216

负责解决依赖关系的多个线程的同步似乎被破坏,并且在某些情况下,多个线程解决相同的工件,并且它们会中断,resolver-status.properties如 micycle 所示。

如果尽管删除了损坏的文件,您的构建仍然无法成功完成,您可能需要将解析器线程限制为一个。为此,请使用 JVM 属性:

-Daether.metadataResolver.threads=1
Run Code Online (Sandbox Code Playgroud)

如果您使用 IntelliJ Idea 使用Settings->Build,Execution,Deployment->Maven->Runner字段VMOptions

IntelliJ IDEA 2021.3.1

进行此更改后,请记住删除损坏的文件(或整个.m2目录),因为一旦文件损坏,它们将无法修复。然后重新运行 Maven 构建。


Sag*_*gar 20

我从 ~/.m2 目录中删除了所有工件并重新运行 mvn build。这次,构建成功了!


Ale*_*aev 11

在我的情况下,问题是在第三方库,不正确的字符cters莫名其妙地被保存到?resolver-status.properties文件(不正确的行的例子:maven-metadata-nexus-releases.xml.lastUpda\u0000\u0000\....)位于下~/.m2/repository/path-to-the-library。刚刚删除了带有库的文件夹并重建了项目。

  • 这似乎是 Maven 3.8.1 中的一个错误。即使从本地 Maven 存储库中删除这些库后,该问题仍然反复出现。升级到最新的 Maven 3.8.3 并使用该版本重建修复了问题。 (3认同)
  • 这些文件是如何损坏的?这是 mvn 的错误还是我以不应该使用 mvn 的方式滥用了 mvn ? (2认同)

Evg*_*ila 8

对于 mac ,您实际上不需要删除整个本地 maven 存储库,只需删除其中的resolver-status.properties文件:

find .m2/ -name resolver-status.properties -delete

起到魅力的作用。我什至添加了一个别名,因为我经常使用它,几周一次。


小智 6

删除 .m2 文件夹并重新安装依赖项对我有用。


小智 6

转到 .m2 存储库,然后从那里运行以下命令 FINDSTR /S /M "u0" resolver-status.properties 这将列出所有损坏的解析器属性文件,删除它们,然后您就可以开始了!


viv*_*kar 6

以下是针对 Windows 用户的此问题的解决方案(没有看到针对 Windows 用户的更好解决方案)。

从 .m2/repository/ 文件夹打开命令提示符并运行以下 FINDSTR 命令:

FINDSTR /S /M "u0" resolver-status.properties
Run Code Online (Sandbox Code Playgroud)

此命令将过滤掉编码损坏的resolver-status.properties。

找到resolver-status.properties 文件列表后,只需删除它们,然后构建您的应用程序即可。

  • 这会查找并删除其中一个文件(powershell 命令): Get-ChildItem -Recurse -Filter "resolver-status.properties" | 选择字符串-模式“u0” | 选择对象-唯一路径 | Foreach-Object { 删除项目 $_.Path } (2认同)

Shy*_*haa 1

发现maven指向的java版本和我使用的java版本不同。看来maven总是指向最新版本的java。

首先通过运行检查这是否是问题mvn --version

如果 java 版本不匹配,请运行设置 JAVA_HOME

export JAVA_HOME=$(/usr/libexec/java_home)

现在运行mvn --version。Maven 应指向正确的 Java 版本。

下次运行时mvn install,maven会自动选取JAVA_HOME中设置的版本