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

我在日食中有一个错误:

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

如有任何提示或解决方案,我们将不胜感激。

282143 次浏览

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

引用 Eclipse.org 中的 bug 报告中的一些答案,这些是变通方法。选择一个对你来说最不痛苦的:

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

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

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

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

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

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

你必须用这个覆盖它们:

- enhancerName ASM-api JDO-pu MediaToGo

希望能帮到你!

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

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

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

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

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

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

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

我在调用 Maven 时也出现了同样的错误。

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

有多种方法可以更新这里提到的大型类路径: 如何在 Windows 中设置一个长的 Java 类路径?

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

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

当我运行‘ 蚂蚁部署’时,我得到了下面的错误

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

通过在它之前运行‘ 蚂蚁干净’修正了它。

试试这个:

Java-jar-Dserver.port = 8080 build/libs/APP _ NAME _ Here. jar

我在机器人工作室也犯了同样的错误。我能够通过在 IDE 中运行 建造-> 清洁工程来解决这个问题。

这是因为您的项目目录名很长,所以总共有一个非常长的 CLASSPATH。要么您需要减少在 CLASSPATH中添加的 jar (确保只删除不必要的 jar) ,要么最好的方法是减少项目目录并再次导入项目。这将降低 CLASSPATH。 这招对我很管用。

我今天遇到了这个问题,我能够用 这个格拉德插件解决它

Github url 是这个

如果你像我一样不知道 Gradle 是什么,只是需要运行一个后端来完成前端工作,那么你需要做的就是找到正在调用的 建造,分级文件来启动 BE 服务器,然后把它添加到顶部:

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

我也遇到过同样的问题,但我用的是 netbeans。
我已经找到了一个解决方案,所以我在这里分享,因为我还没有找到这个任何地方,所以如果你有这个问题在 netbeans 上,试试这个:
(名字可能不对,因为我的网豆是葡萄牙语) 右键单击 project > properties > build >  编译 > 取消在外部 VM 上运行编译。

我得到了相同的错误。尝试解决方案,如清理,重建,失效缓存,重启等,但没有工作。

我刚刚创建了一个新的文件夹的短名称和复制所有的文件(应用程序文件夹,梯度文件等)在新的文件夹。在 android 工作室中的开放应用及其工作效果。

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

正如问题所提到的,这不是特定于 Eclipse 的。我在 IntelliJ Ideas 14和2018年也遇到过这个问题。

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

Fork = false

在 ant 构建文件的 javc 中。

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

这是我的蚂蚁编译 javac 现在的样子。要了解更多关于 fork 的信息,请 参考蚂蚁文献。

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

<localRepository>C:\R</localRepository>

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

为了解决这个问题:

如果您正在使用 Eclipse:

将.m2存储库移至

转到 Eclipse > Windows/Preferences/Maven/User Settings-> Create your own seting.xml with its content:

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

如果你正在使用 IntelliJ: 转到 IntelliJ > 单击“ pom.xml”> maven > create“ setings.xml”上的鼠标右键

内容:

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

在我的例子中,显示错误是因为系统 java 版本与 intellijj/eclipsejava 版本不同。系统和用户有不同的 Java 版本。如果您使用一个版本编译代码并尝试使用不同的版本运行,它将出错。 User java version is 1.8

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

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

将以下内容添加到你的等级文件中:

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

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

**enter image description here**

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

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

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

如果您正在使用 Gradle 构建工具,并且可执行文件放置在应用程序的 build/libs 目录中。 在项目的根目录中创建这个文件,并将其复制到下面的脚本中,然后转到 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

希望这个能帮上忙!

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

我使用遗留版本的渐变插件和 这个插件为我解决了这个问题。

用法(查看源代码了解更多细节) :

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

在 Windows 机器中,命令行中的 jar 文件名/路径长度有限制,由于这个原因,您可以看到下面的错误消息,我尝试了很多次搜索,甚至我尝试应用上述解决方案,但由于某些原因,它不能工作,我找到了 Gradle (Gradle-4.10.2-all.zip)的工作代码片段

错误:

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

使用下面的 gradle.build代码片段来修复 IntelliJ 或 STS 中的上述问题,或者遮盖任何内容。

格拉德代码修正:

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

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

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

或者

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

但是我找到的更好的解决方案是终止 JVM 进程,一切都完成了。

我在尝试在 IntelliJ 2020.2Hibernate/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

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

文件-> 项目结构

enter image description here

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

我使用 com.virgo47.ClasspathJar插件来修复这个问题 Https://plugins.gradle.org/plugin/com.virgo47.classpathjar

如果你正在使用 VSCode:

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

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

如果你使用 intellij:

  1. Open. idea/workspace.xml

  2. <component name="PropertiesComponent">内 加入 <property name="dynamic.classpath" value="true"/>

你可以使用以下命令:

mklink /J c:\repo C:\<long path to your maven repository>




mvn -Dmaven.repo.local=c:\repo any mvn command