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

时间:2012-05-09 15:49:24

标签: java eclipse hibernate servlets resteasy

我在eclipse helios中有这个错误:

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

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

非常感谢任何提示或解决方案。

29 个答案:

答案 0 :(得分:37)

此问题没有简单的解决方案(如点击几下或简单命令)。

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

  • 减少类路径
  • 使用目录而不是jar文件
  • 使用包含所有其他jar的打包jar文件,使用清单文件中的classpath变量指向其他jar
  • 使用特殊的类加载器从配置文件中读取类路径
  • 尝试使用错误报告文档中的一个附加补丁
  • 使用自己的包装纸,例如蚂蚁
  • 转到IntelliJ(更新:@nitind指出,这不是一个选项)

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

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

答案 1 :(得分:16)

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

答案 2 :(得分:11)

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

来解决它

它是github url is this

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

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

答案 3 :(得分:6)

在这里回答我自己的问题,以便解决方案不会被置于评论中。我从eclipse中将项目导出为可运行的jar,并执行命令行“java -jar MyJar.jar”,它的工作完全正常

答案 4 :(得分:6)

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

答案 5 :(得分:5)

**enter image description here**

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

答案 6 :(得分:4)

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

我的问题的根本原因是classpath非常庞大。更新类路径修复了问题。

答案 7 :(得分:3)

在错误报告Bug 327193中,它被认为是固定的,但最近发生在Eclipse Kepler 4.3.2上。

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

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

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

答案 8 :(得分:1)

试试这个:

  

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

答案 9 :(得分:1)

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

<localRepository>C:\R</localRepository>

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

答案 10 :(得分: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

答案 11 :(得分:1)

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

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

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

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

答案 12 :(得分: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)
    }
}

答案 13 :(得分:0)

我使用的是Gradle插件的旧版,而this插件为我解决了这个问题。

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

为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"

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

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

希望这会有所帮助!

答案 16 :(得分:0)

我在尝试在 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

答案 17 :(得分:0)

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

文件 -> 项目结构

enter image description here

答案 18 :(得分:0)

在下方添加到您的gradle文件中:

插件{ `id“ com.github.ManifestClasspath”版本“ 0.1.0-RELEASE”
}

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

答案 19 :(得分:0)

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

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

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

答案 20 :(得分:0)

要解决它:

如果您使用的是Eclipse:

将.m2存储库移至

c:\ 转到Eclipse> Windows /首选项/ Maven /用户设置->创建您自己的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>

答案 21 :(得分:0)

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

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

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

  

fork = false

蚂蚁构建文件的javc中的

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

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

答案 22 :(得分:0)

我遇到了同样的错误。尝试过的解决方案,例如清理,重建,invalidateCache,retart等,但无济于事。

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

答案 23 :(得分:0)

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

答案 24 :(得分:0)

这是因为您的项目目录名称较长,因此总共需要很长的CLASSPATH。您需要减少在CLASSPATH添加的jar(确保仅删除不必要的jar)或者最好的方法是减少项目目录并再次导入项目。这将减少CLASSPATH。 它对我有用。

答案 25 :(得分:0)

我在android studio中遇到了同样的错误。我能够通过在IDE中运行构建 - &gt; 清理项目来解决此问题。

答案 26 :(得分:0)

我在运行&#39; ant deploy &#39;

时收到以下错误
Cannot run program "C:\java\jdk1.8.0_45\bin\java.exe": CreateProcess error=206, The filename or extension is too long

通过运行修复它&#39; ant clean &#39;在它之前。

答案 27 :(得分:0)

这个帖子的有效答案是我特例的正确答案。 指定datanucleus的ORM文件夹路径肯定会减少java路径编译。

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

答案 28 :(得分:0)

它发生的原因是DataNucleus有时会用很多路径覆盖Arguments。

你必须用这个覆盖它们:

-enhancerName ASM -api JDO -pu MediaToGo

希望能帮到你!