You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下执行Maven命令报错CreateProcess error=206:文件名过长

Windows下Maven命令执行报错CreateProcess error=206的解决方法

问题场景

在Windows系统中执行以下Maven命令:

mvn install -DjenkinsAcceptance=true -Dcucumber.forkCount=4 -Dcucumber.test.failure.ignore=true

触发如下错误:

[ERROR] Command execution failed.
java.io.IOException: Cannot run program "C:\Users\myuser\.sdkman\candidates\java\current\bin\java.exe" (in directory "C:\dev\myproject\module2\target\runtime"): CreateProcess error=206, The filename or extension is too long
    at java.lang.ProcessBuilder.start (ProcessBuilder.java:1048)
    at java.lang.Runtime.exec (Runtime.java:594)
    at org.apache.commons.exec.launcher.Java13CommandLauncher.exec (Java13CommandLauncher.java:61)
    at org.apache.commons.exec.DefaultExecutor.launch (DefaultExecutor.java:279)
    at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:336)
    at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:764)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:711)
    at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:289)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:904)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:281)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:204)
    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.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
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:453)
    at java.lang.ProcessImpl.start (ProcessImpl.java:139)
    at java.lang.ProcessBuilder.start (ProcessBuilder.java:1029)
    at java.lang.Runtime.exec (Runtime.java:594)

解决方法

该错误源于Windows系统命令行长度限制(传统上限为8191字符),Maven构建时生成的类路径过长触发了此限制。以下是几种可行的解决方式:

1. 启用Maven长类路径支持(Maven 3.5.2+)

通过MAVEN_OPTS设置使用vfork模式传递类路径,绕过命令行长度限制:

set MAVEN_OPTS=-Djdk.lang.Process.launchMechanism=vfork

设置完成后再执行原Maven构建命令。

2. 缩短项目或Java安装路径

将项目从长路径(如C:\dev\myproject\module2\target\runtime)迁移到更短的路径(如C:\dev\p\m2\rt),或为Java安装目录创建短路径的符号链接:

mklink /D C:\jdk C:\Users\myuser\.sdkman\candidates\java\current

之后修改环境变量或Maven配置,使用短路径的Java执行文件。

3. 用插件通过文件传递类路径

如果是exec-maven-plugin或maven-javadoc-plugin触发的问题,配置插件通过文件传递类路径:

  • 针对exec-maven-plugin:
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <configuration>
        <useFile>true</useFile>
    </configuration>
</plugin>
  • 针对maven-javadoc-plugin:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <configuration>
        <useFile>true</useFile>
    </configuration>
</plugin>

4. 打包成单个JAR减少类路径

使用maven-shade-plugin将项目及依赖打包成单个可执行JAR,大幅缩短类路径:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>你的主类全路径</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

内容的提问来源于stack exchange,提问作者Alexei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:14:51