CreateProcess error=206, 运行 main() 方法时文件名或扩展名太长

Posted

技术标签:

【中文标题】CreateProcess error=206, 运行 main() 方法时文件名或扩展名太长【英文标题】:CreateProcess error=206, The filename or extension is too long when running main() method 【发布时间】:2012-05-18 04:09:14 【问题描述】:

我在 eclipse helios 中有这个错误:

执行命令行时发生异常。 无法运行程序“C:\Program Files (x86)\Java\jre6\bin\javaw.exe”(在目录“C:\Users\motiver\helios_workspace\TimeTracker”中):CreateProcess 错误=206,文件名或扩展名为太长了

我进行了一些研究,但大多数问题都与使用 Google App Engine 时的 DataNucleus 有关。但我没有使用任何与 Google App Engine 远程相关的东西。我正在 JBOSS 6 上使用 Servlet 3.0 做一个小项目。我正在使用 Hibernate 4.1.2 for ORM 和 RESTEasy 来公开 Web 服务。我创建了一个具有 main() 方法的 util 文件,该方法基本上删除并重新创建架构。当我需要一个干净的数据库进行测试时,我会运行 main() 方法。它在 Tomcat 7 上运行良好,但当我迁移到 JBoss 6 时它停止运行。

任何提示或解决方案将不胜感激。

【问题讨论】:

CreateProcess error=206, The filename or extension is too long的可能重复 可能有用:bugs.eclipse.org/bugs/show_bug.cgi?id=327193 我想了解C:\Program Files (x86)\Java\jre6\bin\javaw.exe是长还是另一个C:\Users\motiver\helios_workspace\TimeTracker。我也遇到了同样的问题。 后人:我也遇到过类似的情况,但是,在 WLS 上部署了一个简单的企业应用程序,并在 Eclipse 上部署了客户端。我注意到类路径非常庞大,因为 Eclipse 默认包含整个 WLS 库(所有 jar)。我将其删除并仅添加了 weblogic.jar(仅需要)。之后,它工作得很好。因此,根据我的观察,只需删除不必要的罐子。 【参考方案1】:

对于这个问题没有简单的(比如点击几下或一个简单的命令)解决方案。

引用this bug report in Eclipse.org 中的一些答案,这些是解决方法。选择一个对你来说最不痛苦的:

减少类路径 使用目录而不是 jar 文件 使用包含所有其他 jar 的打包 jar 文件,使用清单文件中的 classpath 变量指向其他 jar 使用特殊的类加载器从配置文件中读取类路径 尝试使用错误报告文档中的附加补丁之一 使用自己的包装器,例如蚂蚁

更新:2014 年 7 月之后,有更好的方法(感谢@Brad-Mace's answer below:

如果您已经创建了自己的构建文件而不是使用Project -> Generate Javadocs,那么您可以将useexternalfile="yes" 添加到Javadoc 任务中,该任务专门用于解决此问题。

【讨论】:

如果完全是因为启动 JVM 时使用的类路径的长度,IntelliJ not 怎么会有这个问题? 这可能只是 eclipse 问题,我可以使用 maven 运行应用程序。 @nitind “在 IntelliJ IDEA 中,他们用生成的类替换主类。它包含硬编码的类路径和启动原始主类的代码。”取自bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8 2014 年,这个答案是错误的,@Brad Mace 的答案是正确的。 “减少类路径”是一个很好的提示,但让我详细说明一下:在我的例子中,我尝试构建一个 maven 项目,并生成了 -classpath 参数以包含所有依赖项。所以,出现了这样的事情:C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more]。将我的本地 maven repo 缓存移动到 D:\m2 就成功了:类路径缩小到 D:\m2\…;D:\m2\… - 宾果游戏!请记住在您的 maven 配置中设置 localRepository 路径。【参考方案2】:

如果您创建自己的构建文件而不是使用Project -> Generate Javadocs,则可以将useexternalfile="yes" 添加到专门用于解决此问题的javadoc 任务中。

【讨论】:

嗨 - 我该如何添加这个? @PrateekNarendra 您将其添加到您的 ant 构建文件 (build.xml) 中:ant.apache.org/manual/Tasks/javadoc.html【参考方案3】:

我今天遇到了这个问题,我可以使用 this Gradle plugin 解决它

我是github url is this

如果你和我一样不知道 Gradle 是什么,但需要运行后端来完成前端工作,那么你需要做的就是找到正在生成的 build.gradle 文件调用以启动您的 BE 服务器并将其添加到顶部:

plugins 
  id "ua.eshepelyuk.ManifestClasspath" version "1.0.0"

【讨论】:

现在我得到“主类名尚未配置,无法解析”,尽管设置了attributes["Main-Class"] 我尝试使用插件但没有效果。问题还是来了。请建议 对我来说,一个类似的插件通过添加plugins id "com.github.ManifestClasspath" version "0.1.0-RELEASE" mainClassName = "com.sample.YourMainClass"来工作【参考方案4】:

在 intellij 中有一个 'shorten command line' 选项,选择 'JAR manifest' 或 '@argFiles' 会解决问题,基本上它会将你冗长的类路径放入 jar 文件或临时文件中

【讨论】:

工作!。我花了一段时间才弄清楚它在哪里。选择应用程序 > 编辑配置 缩短命令行的替代方法:***.com/questions/47926382/…【参考方案5】:

我在 IntelliJ 2020.2

Hibernate / JPA 控制台 中尝试执行 JPQL 查询时遇到了这个问题

将此添加到我的 .idea/workspace.xml 修复它

<component name="PropertiesComponent">
 
...
     <property name="dynamic.classpath" value="true"/>
 
...
 
</component>

解决方案出处:https://youtrack.jetbrains.com/issue/IDEA-166929?_ga=2.167622078.1290412178.1604511702-23036228.1574844686

【讨论】:

没有其他解决方案,但这适用于 2020.2。 是的,IntelliJ IDEA 2021.2.1 也是如此——这也只有这解决了我的问题,谢谢! 一年后偶然发现了这个问题和我的答案。问题依然存在【参考方案6】:

在这里回答我自己的问题,以免解决方案被埋没在 cmets 中。我从 Eclipse 中将项目导出为可运行的 jar,并执行了命令行“java -jar MyJar.jar”,它工作得非常好

【讨论】:

【参考方案7】:

这不是专门针对 eclipse 的,但我解决这个问题的方法是创建一个指向我的 maven 存储库的符号链接并将其指向类似“C:\R”的东西。然后我将以下内容添加到我的 settings.xml 文件中:

<localRepository>C:\R</localRepository>

Maven 存储库路径导致我的 Windows 机器出现长度问题。

【讨论】:

【参考方案8】:

尝试更新您的 Eclipse 版本,该问题最近已关闭 (2013-03-12)。查看错误报告https://bugs.eclipse.org/bugs/show_bug.cgi?id=327193

【讨论】:

【参考方案9】:

问题很旧,但仍然有效。每当有新成员加入我的团队或将新代码段添加到现有代码中时,我经常会遇到这种情况。我们遵循的简单解决方法是通过向上移动目录来“减少类路径”。

正如问题所述,这不是 Eclipse 特有的。我在 IntelliJ Idea 14 和 2018 中也遇到了这个问题。

经过长时间的研究,我发现解决方案是设置

叉=假

在 ant 构建文件的 javc 中。

<javac destdir="$build.dir" fork="false" debug="on">
    <classpath .../>
    <src ... />
    <patternset ... />
</javac>

这就是我的 ant build javac 现在的样子。想了解更多关于fork的信息,请refer ant documentation.

【讨论】:

这是我找到的有效答案。谢谢【参考方案10】:

在错误报告 Bug 327193 中,它被认为是已修复的,但它最近在 Eclipse Kepler 4.3.2 中发生在我身上。

请下载 Eclipse Juno 或更新版本的补丁:

https://bugs.eclipse.org/bugs/attachment.cgi?id=216593

    下载后备份现有 eclipse/plugins/org.eclipse.jdt.launching_3.*.jar 将补丁中的类复制并粘贴到 org.eclipse.jdt.launching JAR (替换现有文件)。 重启 Eclipse。

【讨论】:

这对我有用。请注意,应用此操作会从已安装的 JRE 中删除我的 JDK Java 安装。我不得不再次重新添加它们。仅保留了 1 个 JRE 安装。 有趣的是,您在 SO 上寻找有关您的问题的答案,其中一个答案来自您曾经一起学习/工作的人:)【参考方案11】:

上面有多少人伤心,有很多插件可以在这个问题中执行一个bypass,比如:

plugins 
  id "ua.eshepelyuk.ManifestClasspath" version "1.0.0"

plugins 
  id "com.github.ManifestClasspath" version "0.1.0-RELEASE"

但我发现更好的解决方案是杀死 JVM 进程,一切都完成了。

【讨论】:

在 > 中添加两个结果中的任何一个主类名尚未配置,无法解析知道如何解决吗?不幸的是,我不知道 Gradle 是什么【参考方案12】:

将以下内容添加到您的 gradle 文件中:

plugins 
`id "com.github.ManifestClasspath" version "0.1.0-RELEASE"       

见https://plugins.gradle.org/plugin/com.github.ManifestClasspath

【讨论】:

这在我的情况下不起作用。我在目录中的最短路径中有工作室的 JRE,但仍然出现错误。到目前为止唯一的解决方案是删除 java.exe 进程。【参考方案13】:

尝试在 build.gradle (gradle version 4.10.x) 文件中添加它并检查它com.xxx.MainClass 这是您的主要方法所在的类:

plugins 
  id "ua.eshepelyuk.ManifestClasspath" version "1.0.0"

apply plugin: 'application'
application 
    mainClassName = "com.xxx.MainClass"

以上更改必须解决问题,下面还有另一种使用脚本run.sh 的方法可以解决此问题,但更多的是命令行修复,而不是在IntelliJ 中启动gradle bootRun

【讨论】:

一个愚蠢的问题,但是 xxx 中需要替换什么? 如果你的 Application.java 有 main 方法并且这个类在包示例中:com.example.demo 那么在 build.gradle 你必须提到mainClassName = "com.example.demo.Application"【参考方案14】:

试试这个:

java -jar -Dserver.port=8080 build/libs/APP_NAME_HERE.jar

【讨论】:

【参考方案15】:

解决它:

如果您使用的是 Eclipse:

将 .m2 存储库移至

c:\ 转到 Eclipse > Windows/Preferences/Maven/User Settings -> 创建您自己的 setting.xml 及其内容:

<settings>
  <localRepository>c:/.m2/repository</localRepository>
</settings>

如果您使用 IntelliJ: 转到 IntelliJ > 在“pom.xml”上单击鼠标右键 > maven > 创建“settings.xml”

及其内容:

<settings>
      xmlns="yourcontent"
      xmlns:xsi="yourcontent"
      xsi:schemaLocation="yourcontent.xsd">
  <localRepository>c:/.m2/repository</localRepository>
</settings>

【讨论】:

【参考方案16】:

在我的情况下,错误显示是因为系统 java 版本与 intellijj/eclipse java 版本不同。系统和用户有不同的 java 版本。如果您使用一个版本编译代码并尝试使用不同版本运行,则会出错。

#The system java version is 1.7.131
$ java -version
java version "1.7.0_131"

长话短说,确保您的代码由相同的 java 版本编译和运行。

【讨论】:

【参考方案17】:

我正在使用旧版本的 gradle 插件,this 插件为我解决了这个问题。

用法(查看来源了解更多详情):

为 Gradle 2.1 及更高版本的插件 DSL 构建脚本 sn-p

plugins 
  id "com.github.ManifestClasspath" version "0.1.0-RELEASE"

构建脚本 sn-p 以用于较旧的 Gradle 版本或动态 需要配置

buildscript 
  repositories 
    maven 
      url "https://plugins.gradle.org/m2/"
    
  
  dependencies 
    classpath "gradle.plugin.com.github.viswaramamoorthy:gradle-util-plugins:0.1.0-RELEASE"
  


apply plugin: "com.github.ManifestClasspath"

【讨论】:

【参考方案18】:

我在调用 Maven 时遇到了同样的错误。

我的问题的根本原因是classpath 非常大。更新类路径解决了这个问题。

有多种方法可以更新大型类路径,如下所述:How to set a long Java classpath in Windows?

    使用通配符 参数文件 路径罐

由于我使用的是 Intellij,它们提供了使用我使用的参数文件的选项。

【讨论】:

Updating the classpath - 怎么样? 一个非常模糊的答案。你到底是怎么更新类路径的? 有多种方法可以更新类路径,例如通配符。【参考方案19】:

在Windows机器中,命令行中的jar文件名/路径长度有限制,因此您会看到以下错误消息,我尝试了很多搜索,即使我尝试应用上述解决方案,出于某种原因,它不起作用,我找到了 Gradle 的工作 sn-p (gradle-4.10.2-all.zip)

错误:

CreateProcess error=206, The filename or extension is too long

使用下面的gradle.build 代码 sn-p 来修复 IntelliJ 或 STS 中的上述问题,或者 eclipse 任何东西。

Gradle 代码修复:

apply plugin: 'application'

task pathingJar(type: Jar) 
    dependsOn configurations.runtime
    appendix = 'pathing'

    doFirst 
        manifest 
            attributes "Class-Path": configurations.runtimeClasspath.files.collect  it.getName() .join(' ')
        
    


task copyToLib(type: Copy) 
    into "$buildDir/libs"
    from configurations.runtime


bootRun 
    systemProperties = System.properties
    //This below line is for if you have different profiles prod, dev etc...
    //systemProperty 'spring.profiles.active', 'dev'
    jvmArgs('-Djava.util.logging.config.file=none')
    mainClassName = "com.xxxx.Main"
    dependsOn pathingJar
    dependsOn copyToLib
    doFirst 
        classpath = files("$buildDir/classes/java/main", "$buildDir/resources/main", pathingJar.archivePath)
    

【讨论】:

【参考方案20】:

这是因为 DataNucleus 有时会用许多路径覆盖参数。

你必须用这个覆盖它们:

-enhancerName ASM -api JDO -pu MediaToGo

希望能帮到你!

【讨论】:

【参考方案21】:

我遇到了同样的错误。尝试了清理、重建、invalidateCache、重新启动等解决方案,但没有任何效果。

我刚刚创建了一个短名称的新文件夹,并将所有文件(app 文件夹、gradle 文件等)复制到新文件夹中。在 android studio 中打开的应用程序运行良好。

【讨论】:

【参考方案22】:

对我来说,这是错误的 JDK 路径。请确保您有正确的 JDK 文件路径

文件 -> 项目结构

【讨论】:

【参考方案23】:

如果您使用的是 Android Studio,请尝试“文件”菜单中的 Invalidate Caches/Restart.. 选项

【讨论】:

【参考方案24】:

我使用com.virgo47.ClasspathJar 插件解决了这个问题 https://plugins.gradle.org/plugin/com.virgo47.ClasspathJar

【讨论】:

【参考方案25】:

如果你使用的是 VSCode:

    在 .vscode/ 中创建 launch.json 文件

    添加

    "configurations": [ "type": "java","shortenCommandLine ": "auto",]
    

如果您使用的是 intellij:

    打开 .idea/workspace.xml

    &lt;component name="PropertiesComponent"&gt; 添加&lt;property name="dynamic.classpath" value="true"/&gt;

【讨论】:

【参考方案26】:

为了解决下面的错误,我做了足够的研究,没有找到任何好的解决方案,我准备了这个脚本,它运行良好,想分享给公众并利用它并节省时间。

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

如果您使用的是 Gradle 构建工具,并且可执行文件位于应用程序的 build/libs 目录中。 run.sh -> 在你项目的根目录下创建这个文件,把下面的脚本复制进去,然后进入 git bash 并输入 run.sh 然后回车。希望这会有所帮助!

#!/bin/bash
dir_name=`pwd`
if [ $# == 1 ] && [ $1 == "debug" ]
then
    port=$RANDOM
    quit=0
    echo "Finding free port for debugging"
    while [ "$quit" -ne 1 ]; do
        netstat -anp | grep $port >> /dev/null
        if [ $? -gt 0 ]; then
            quit=1
        else
            port=`expr $port + 1`
        fi
    done
    echo "Starting in Debug Mode on "$port
    gradle clean bootjar
    jar_name="build/libs/"`ls -l ./build/libs/|grep jar|grep -v grep|awk 'print $NF'`
    #java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$port $jar_name 
elif [ $# == 1 ] && [ $1 == 'help' ]
then
    echo "please use this commands"
    echo "------------------------"
    echo "Start in Debug Mode: sh run.sh debug"
        echo "Start in Run Mode: sh run.sh" 
    echo "------------------------"
else
    gradle clean bootjar
    word_count=`ls -l ./build/libs/|grep jar|grep -v grep|wc -w`
    jar_name=`ls -l ./build/libs/|grep jar|grep -v grep|awk 'print $NF'`  
    jar_path=build/libs/$jar_name
    echo $jar_name
    #java -jar $jar_path
fi

希望这会有所帮助!

【讨论】:

【参考方案27】:

此线程的有效答案是我的特殊情况的正确答案。 为datanucleus指定ORM文件夹路径当然减少java路径编译。

https://***.com/a/1219427/1469481

【讨论】:

【参考方案28】:

当我运行“ant deploy”时出现以下错误

Cannot run program "C:\java\jdk1.8.0_45\bin\java.exe": CreateProcess error=206, The filename or extension is too long

通过在它之前运行“ant clean”修复它。

【讨论】:

如果我使用 Android Studio 会怎样?我也收到了同样的问题 我正在使用 intelliJ【参考方案29】:

我在 android studio 中遇到了同样的错误。我能够通过在 IDE 中运行 Build->Clean Project 来解决它。

【讨论】:

【参考方案30】:

我遇到了同样的问题,但我使用的是 netbeans。 我找到了一个解决方案,所以我在这里分享,因为我在任何地方都没有找到这个,所以如果你在 netbeans 上遇到这个问题,试试这个: (因为我的 netbeans 是葡萄牙语,所以名字可能会消失) 右键单击项目 > 属性 > 构建 > 编译 > 取消选中在外部 VM 上运行编译。

【讨论】:

以上是关于CreateProcess error=206, 运行 main() 方法时文件名或扩展名太长的主要内容,如果未能解决你的问题,请参考以下文章

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

Android 编译错误:CreateProcess error=206, 文件名或扩展名太长。

Android 编译错误:CreateProcess error=206, 文件名或扩展名太长。

Android 编译错误:CreateProcess error=206, 文件名或扩展名太长。

关于CreateProcess error=206, 文件名或扩展名太长 AS运行错误

关于CreateProcess error=206, 文件名或扩展名太长 AS运行错误