Android Studio 3.1.1 CreateProcess error=206,文件名或扩展名太长。

19

从Android Studio构建应用程序时,我遇到了以下异常:

CreateProcess error=206,文件名或扩展名太长,位于

我尝试在Windows注册表中启用更长的路径,但仍然遇到了问题。请帮忙!

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithDesugarForDebug'. com.android.build.api.transform.TransformException: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'C:\jdk1.8.0_171\bin\java.exe''

* Try:
Run with --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithDesugarForDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
    at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
    at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: com.android.build.api.transform.TransformException: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'C:\jdk1.8.0_171\bin\java.exe''
    at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104)
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:212)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
    at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
    ... 32 more
Caused by: com.android.build.api.transform.TransformException: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'C:\jdk1.8.0_171\bin\java.exe''
    at com.android.build.gradle.internal.transforms.DesugarTransform.transform(DesugarTransform.java:292)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:221)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:217)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    ... 48 more
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'C:\jdk1.8.0_171\bin\java.exe''
    at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:222)
    at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:202)
    at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:342)
    at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:86)
    at org.gradle.internal.operations.BuildOperationIdentifierPreservingRunnable.run(BuildOperationIdentifierPreservingRunnable.java:35)
    ... 6 more
Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'C:\jdk1.8.0_171\bin\java.exe'
    at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27)
    at net.rubygrapefruit.platform.internal.WindowsProcessLauncher.start(WindowsProcessLauncher.java:22)
    at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36)
    at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:68)
    ... 7 more
Caused by: java.io.IOException: Cannot run program "C:\jdk1.8.0_171\bin\java.exe" (in directory "D:\CodeRepository\Android\iamhere-android-app\app"): CreateProcess error=206, The filename or extension is too long
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25)
    ... 10 more
Caused by: java.io.IOException: CreateProcess error=206, The filename or extension is too long
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
    at java.lang.ProcessImpl.start(ProcessImpl.java:137)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 11 more


* Get more help at https://help.gradle.org

构建失败,耗时7分38秒。共有107个可执行任务,其中11个已经被执行,96个是最新的。


你的代码长什么样? - pinegulf
这是一个使用Java和Kotlin代码的Android项目。但是,我的同事使用相同的代码却没有遇到这个问题。 - user2067340
尝试减少目录结构的层级。将您的项目尽可能地靠近根目录。 - Sagar
感谢Sagar和pinegulf。 - user2067340
你找出是哪个依赖项引起了这个问题了吗? - ono
1
你是怎么解决这个问题的?(我也遇到了同样的问题)把项目放到更靠近根目录的位置了吗?但这对我没有用。 - Jackky777
6个回答

15

我猜你是Windows用户,在Windows XP及以上版本中存在8191个文件路径限制。

http://support.microsoft.com/kb/830473/en-us

最简单的方法是缩短文件路径,例如将项目文件夹更改为D:\,重构项目路径,并始终使用ASCII字符作为文件夹名称。 UTF-8字符使用2-3个字节。 或移除无用的依赖项。 或更改为MAC平台。;)

原因是在编译步骤中,有一个类似javac xxxx的命令,将所有依赖路径组合成一行。


1
是的,这是我所知道的唯一方法。如果您不想移动所有文件,仍然可以使用指向原始文件夹的虚拟驱动器!请参阅此博客文章以获取详细说明! - Sylfo
虚拟驱动器对我很有用。创建一个批处理文件;subst Z: "D:\Projects\Your Project...." - kaya
这个解决方法真的很有效。我简直不敢相信gradle的开发人员是多么的天真。 - finejustice
4
我把我的项目移动到了D盘,但还是出现了相同的错误? - Jono
2
路径更改对我无效,我有许多文件仍然出现错误。还有其他解决方案吗? - Ahmad
显示剩余4条评论

8

对我来说,这种方法是有效的。

  1. 进入“构建”->“清理”。
  2. 文件 -> “无效缓存并重新启动”

或者

这可能是由于网络问题造成的。请检查网络连接。


是的,在清除缓存和重启后它已经起作用了。 - Shailendra Madda
糟糕的解决方案,所以我每次构建都必须这样做吗? - GHH

1
如果您使用的是Intellij IDEA,可以通过以下方式缩短命令行:
1. 进入“Run/Debug Configuration”; 2. 在“Shorten command line”下拉框中选择“classpath file”。如下面的示例所示。

Shorten comman line example


1

对于我来说,按照以下步骤解决了问题:

  1. Build -> Clean Project.
  2. File -> Invalidate caches & Restart.

这并没有回答问题。一旦您拥有足够的声望,您就可以评论任何帖子;相反,提供不需要提问者澄清的答案。- [来自审查] (/review/late-answers/29762371) - gtxtreme

1

最近我也偶然发现了这个方法。以下是我成功的步骤:

  1. 使用 subst X: C:\Users$PATH_TO_YOUR_PROJECT 命令创建一个虚拟挂载点。
  2. 打开命令提示符(cmd)
    • 输入 gpedit.msc 命令
    • 本地计算机策略 > 计算机配置 > 管理模板 > 系统 > 文件系统
    • 启用 Win32 长路径
    • 重新启动计算机

0
在我的情况下,我所需要做的就是将项目文件夹从原来的位置移动到桌面上。 新的项目位置变为 - C:\Users\你的电脑名称\Desktop\你的项目名称

这看起来更像是一条注释而不是一个答案。 - Sanjeev S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接