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


98

我在日食日光灯中遇到此错误:

执行命令行时发生异常。无法运行程序“ 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时停止了工作。

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




我想知道C:\Program Files (x86)\Java\jre6\bin\javaw.exe是长还是另一个C:\Users\motiver\helios_workspace\TimeTracker。我也有同样的问题。
Siva R

后代:我也遇到类似的情况,但是在WLS上部署了一个简单的企业应用程序,在Eclipse上部署了客户端。我注意到的是类路径很大,因为默认情况下Eclipse包含整个WLS库(所有jar)。我删除了它,并添加了weblogic.jar(仅必需)。之后,它运行良好。因此,据我观察,只需移除不必要的罐子即可。
lupchiazoem

Answers:


49

对于此问题,没有简单的解决方案(如单击几下或执行一个简单的命令)。

引用Eclipse.org此错误报告中的一些答案,这些是变通办法。选择最让您痛苦的一种:

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

更新:2014年7月之后,有更好的方法(感谢@ Brad-Mace的回答如下

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


16
如果完全由于启动JVM时使用的类路径的长度,IntelliJ怎么会没有此问题?
nitind 2012年

1
这可能只是日食问题,我能够使用Maven运行该应用程序。
surajz 2012年

3
@nitind“在IntelliJ IDEA中,他们用生成的类替换了主类。它包含硬编码的类路径和启动原始主类的代码。” 取自bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8
Chobicus 2013年

2
在2014年,这个答案是错误的,@ Brad Mace的答案是正确的。
Bananeweizen 2014年

5
“减少类路径”是一个很好的提示,但让我对此进行详细说明:就我而言,我试图构建一个maven项目,并且-classpath生成了包含所有依赖项的参数。因此,出现了以下内容:C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more]。将我的本地Maven存储库缓存移动到D:\m2了窍门:Classpath缩小为D:\m2\…;D:\m2\…-Bingo!请记住localRepository在您的Maven配置中设置路径。
ThomasR


17

我今天遇到了这个问题,我可以使用此Gradle插件解决它

这是github url是

如果您像我一样不知道Gradle是什么,但是需要运行后端来进行前端工作,那么您需要找到被调用以启动BE服务器的build.gradle文件并将其添加到顶端:

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

3
尽管设置了,但我现在仍然得到“尚未配置主类名称并且无法解析”attributes["Main-Class"]
Anton3

1
我尝试使用插件,但没有效果。问题仍然存在。请提出建议
-amarnathpatel

8

在这里回答我自己的问题,这样解决方案就不会埋在评论中。我从eclipse中将项目导出为可运行的jar,并执行了命令行“ java -jar MyJar.jar”,它运行良好



5

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

<localRepository>C:\R</localRepository>

Maven存储库路径导致Windows计算机的长度问题。


5

**在此处输入图片说明**

在intellij中,有一个“缩短命令行”选项,选择“ JAR清单”或“ @argFiles”将解决此问题,基本上它将把您冗长的类路径放入jar文件或临时文件中


4

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

正如所提到的问题,这不是特定于日食的。我也在IntelliJ Idea 14和2018中遇到了这个问题。

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

叉=假

在javc的ant构建文件中。

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

这就是我的蚂蚁构建javac现在的样子。要了解有关fork的更多信息,请参阅ant文档。


这是我正在寻找的有效答案。谢谢
huuthang

3

在错误报告Bug 327193中,它被视为已修复,但最近在Eclipse Kepler 4.3.2中发生了。

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

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

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

这对我有用。请注意,应用此操作将从“已安装的JRE”中删除了我的JDK Java安装。我不得不再次添加它们。只有1个JRE安装持续存在。
Joetjah 2014年

有趣的事情,你看你的问题的答案,SO和答案之一是从用来学习/工作,:)一个人
米哈尔Szkudlarek

1

试试这个:

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


1

解决方法:

如果您使用的是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>

1

调用Maven时遇到相同的错误。

我的问题的根本原因classpath是巨大的。更新类路径可解决此问题。

有多种更新大类路径的方法,如本文所述:如何在Windows中设置长Java类路径?

  1. 使用通配符
  2. 参数文件
  3. 路径罐

由于我使用的是Intellij,因此它们提供了使用我使用的Argument File的选项。


5
Updating the classpath- 怎么样?
Woland

1
一个非常模糊的答案。您如何更新classpath?
Testilla

有多种更新类路径的方法,例如通配符。
Sandeep Jindal

1

尝试将其添加到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


0

发生这种情况是由于DataNucleus有时会使用许多路径覆盖Arguments。

您必须使用以下命令覆盖它们:

-enhancerName ASM -api JDO -pu MediaToGo

希望对你有帮助!



0

运行“ 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 ”进行修复。


1
如果我使用的是Android Studio,该怎么办?我也收到同样的问题
portfoliobuilder

我正在使用intelliJ
kn3l

0

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


0

这是因为您的项目目录名很长,所以您的总目录名非常长CLASSPATH。您需要减少添加的jar CLASSPATH(确保仅删除不必要的jar),或者最好的方法是减少项目目录并再次导入项目。这将减少CLASSPATH。它为我工作。


0

我遇到了同样的问题,但是我使用的是netbeans。
我找到了一个解决方案,所以我在这里分享,因为我在任何地方都找不到,所以如果您在netbeans上遇到此问题,请尝试以下操作:(
由于我的netbeans是葡萄牙语,因此名称可能已关闭)右键单击project> properties >构建>编译>取消选中在外部VM上运行编译。


0

我遇到了同样的错误。尝试过的解决方案,例如清理,重建,invalidateCache,retart等,但没有任何效果。

我刚刚用短名称创建了一个新文件夹,并将所有文件(应用程序文件夹,gradle文件等)复制到新文件夹中。在android studio中打开了应用程序,并且工作正常。


0

在我的情况下,由于系统Java版本与intellijj / eclipse Java版本不同而显示错误。系统和用户具有diff Java版本。如果您使用一个版本编译代码并尝试使用其他版本运行,则会出错。 用户Java版本为1.8

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

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



0

为了解决此错误,我做了足够的研究,没有任何好的解决方案,我准备了此脚本,并且该脚本运行良好,可以与公众分享并使用它并节省时间。

CreateProcess错误= 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

希望这可以帮助!!


0

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

用法(查看源以获取更多详细信息):

用于Gradle 2.1及更高版本的DSL插件的构建脚本代码段

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

构建脚本片段,用于较旧的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"

0

在Windows计算机中,命令行中的jar文件名/路径长度受到限制,因此您会看到以下错误消息,我尝试了很多搜索,甚至尝试使用上述解决方案,它不起作用,我找到了Gradle的有效代码段(gradle-4.10.2-all.zip)

错误:

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

使用下面的以下gradle.build代码片段可解决IntelliJ或STS中的上述问题,或使任何东西黯然失色。

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)
    }
}

0

上面有多少人感到难过,在这个问题中,有很多插件可以让绕行执行:

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

要么

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.