128

我在 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 服务。我创建了一个具有 main() 方法的 util 文件,该方法基本上删除并重新创建架构。当我需要一个干净的数据库进行测试时,我会运行 main() 方法。它在 Tomcat 7 上运行良好,但当我迁移到 JBoss 6 时它停止工作。

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

4

31 回答 31

57

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

引用Eclipse.org 中此错误报告中的一些答案,这些是解决方法。选择一个对你来说最不痛苦的:

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

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

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

于 2012-05-15T09:42:10.330 回答
19

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

于 2014-04-25T17:47:14.750 回答
19

我今天遇到了这个问题,我能够使用这个 Gradle 插件解决它

它的github 网址是这个

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

plugins {
  id "ua.eshepelyuk.ManifestClasspath" version "1.0.0"
}
于 2018-06-08T13:53:36.443 回答
16

**在此处输入图片描述**

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

于 2020-02-10T05:06:01.243 回答
13

我在尝试在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-11-04T17:47:32.787 回答
8

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

于 2012-05-15T22:18:19.307 回答
7

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

<localRepository>C:\R</localRepository>

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

于 2019-01-31T01:00:36.027 回答
6

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

于 2013-04-18T22:50:34.870 回答
6

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

如问题所述,这并非特定于日食。我在 IntelliJ Idea 14 和 2018 中也遇到了这个问题。

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

叉=假

在 ant 构建文件的 javc 中。

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

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

于 2019-01-02T06:54:20.537 回答
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。
于 2014-05-22T19:52:22.937 回答
3

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

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

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

于 2019-12-02T22:09:31.657 回答
3

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

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

或者

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

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

于 2020-08-07T19:21:15.950 回答
2

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

plugins {
  id "ua.eshepelyuk.ManifestClasspath" version "1.0.0"
}
apply plugin: 'application'
application {
    mainClassName = "com.xxx.MainClass"
}

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

于 2020-03-09T12:33:49.003 回答
1

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

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

有多种方法可以更新大型类路径,如下所述:如何在 Windows 中设置长 Java 类路径?

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

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

于 2015-01-06T20:44:09.837 回答
1

试试这个:

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

于 2017-04-06T17:44:06.730 回答
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>
于 2019-05-31T10:00:42.463 回答
1

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

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

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

于 2019-06-20T01:34:56.737 回答
1

我正在使用旧版本的 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"
于 2020-05-06T13:08:46.430 回答
1

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

错误:

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

使用下面gradle.build的代码片段来修复 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)
    }
}
于 2020-07-08T17:26:29.167 回答
0

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

你必须用这个覆盖它们:

-enhancerName ASM -api JDO -pu MediaToGo

希望能帮到你!

于 2013-05-02T14:55:31.253 回答
0

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

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

于 2018-10-31T10:39:16.867 回答
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

希望这可以帮助!!

于 2020-03-09T12:07:13.860 回答
0

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

文件 -> 项目结构

在此处输入图像描述

于 2021-03-17T05:46:10.347 回答
0

如果您使用的是 Android Studio,请尝试“文件”菜单中的“无效缓存/重新启动..”选项

于 2021-06-05T10:26:31.880 回答
0

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

于 2021-09-15T06:15:07.713 回答
0

如果您使用的是 VSCode:

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

  2. 添加

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

如果您使用的是 intellij :

  1. 打开 .idea/workspace.xml

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

于 2022-01-12T14:31:22.020 回答
-1

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

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

于 2013-11-02T14:45:24.140 回答
-1

运行“ 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 '来修复它。

于 2016-02-04T00:46:13.830 回答
-1

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

于 2017-06-13T09:28:09.700 回答
-1

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

于 2018-08-01T17:52:11.690 回答
-2

这是因为你的项目目录名很长,这给了你一个很长的名字CLASSPATH。要么您需要减少添加的 jars CLASSPATH(确保仅删除不必要的 jars),要么最好的方法是减少项目目录并再次导入项目。这将减少CLASSPATH. 它对我有用。

于 2018-05-22T06:23:45.093 回答