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
在<component name="PropertiesComponent">
添加<property name="dynamic.classpath" value="true"/>
【讨论】:
【参考方案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, 文件名或扩展名太长。