Ошибка CreateProcess = 206, имя файла или расширение слишком длинное при запуске метода main ()


100

У меня такая ошибка в eclipse helios:

Исключение при выполнении командной строки. Не удается запустить программу «C: \ Program Files (x86) \ Java \ jre6 \ bin \ javaw.exe» (в каталоге «C: \ Users \ motiver \ helios_workspace \ TimeTracker»): ошибка CreateProcess = 206, имя файла или расширение слишком долго

Я немного исследовал, но большинство проблем были связаны с DataNucleus при работе над Google App Engine. Но я не использую ничего отдаленно связанного с Google App Engine. Я делаю небольшой проект с Servlet 3.0 на JBOSS 6. Я использую Hibernate 4.1.2 для ORM и RESTEasy, чтобы открыть веб-службу. Я создал файл util, в котором есть метод main (), который в основном удаляет и воссоздает схему. Я запускаю методы main (), когда мне нужна чистая база данных для целей тестирования. Он отлично работал на Tomcat 7, но перестал работать, когда я перешел на JBoss 6.

Мы будем благодарны за любые подсказки или решения.



Может быть полезно: bugs.eclipse.org/bugs/show_bug.cgi?id=327193
Джереми,

Я хочу понять, 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

Ответы:


50

Простого (в пару кликов или простой команды) решения этой проблемы не существует.

Цитируя некоторые ответы в этом отчете об ошибке на Eclipse.org , это обходные пути. Выберите тот, который наименее болезненен для вас:

  • Уменьшите путь к классам
  • Используйте каталоги вместо файлов jar
  • Используйте упакованные файлы jar, содержащие все другие jar-файлы, используйте переменную classpath внутри файла манифеста, чтобы указать на другие jar-файлы
  • Используйте специальный загрузчик классов, который считывает путь к классам из файла конфигурации
  • Попробуйте использовать один из прикрепленных патчей в документе с отчетом об ошибке
  • Используйте собственную оболочку, например муравей

Обновление : после июля 2014 года есть способ лучше (благодаря ответу @ Brad-Mace ниже :

Если вы создали свой собственный файл сборки вместо использования Project -> Generate Javadocs, вы можете добавить useexternalfile="yes"в Javadoc задачу, которая разработана специально для решения этой проблемы.


16
Как у IntelliJ не возникнет этой проблемы, если это полностью из-за длины пути к классам, используемого при запуске JVM?
nitind

1
Это может быть только проблема с затмением, я могу запустить приложение с помощью maven.
surajz 02

3
@nitind «В IntelliJ IDEA они заменяют основной класс сгенерированным. Он содержит жестко запрограммированный путь к классам и код для запуска исходного основного класса». Взято из bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8
Chobicus

2
В 2014 году этот ответ неверен, и ответ @Brad Mace правильный.
Bananeweizen

5
«Уменьшить путь к классам» - хороший намек, но позвольте мне немного уточнить это: в моем случае я попытался создать проект maven, и -classpathаргумент был сгенерирован, чтобы содержать все зависимости. Так, что - то вроде этого вышло: C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more]. Перемещение моего локального кеша репозитория maven в свое дело: путь к D:\m2классам сократился до D:\m2\…;D:\m2\…- бинго! Не забудьте указать localRepositoryпуть в конфигурации maven.
ThomasR

18

Если вы создаете свой собственный файл сборки, а не используете, Project -> Generate Javadocsвы можете добавить useexternalfile="yes"к javadocзадаче, которая разработана специально для решения этой проблемы.


1
Привет, как именно это добавить?
Prateek Narendra

@PrateekNarendra, вы должны добавить его в свой файл сборки муравья (build.xml): ant.apache.org/manual/Tasks/javadoc.html
Брэд Мейс

17

Сегодня я столкнулся с этой проблемой, и я смог решить ее с помощью этого плагина Gradle

Это URL-адрес github:

ЕСЛИ вы, как и я, понятия не имеете, что такое Gradle, но вам нужно запустить бэкэнд, чтобы выполнять свою работу с внешним интерфейсом, вам нужно найти файл build.gradle, который вызывается для запуска вашего сервера BE, и добавить его в вершина:

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

3
Теперь я получаю «Имя основного класса не настроено и не может быть разрешено», несмотря на то, что оно было установленоattributes["Main-Class"]
Anton3

2
Я пробовал использовать плагин, но безрезультатно. Проблема все еще не решена. Пожалуйста, предложите
amarnathpatel

8

Отвечая на свой вопрос здесь, чтобы решение не было утоплено в комментариях. Я экспортировал проект как запускаемый jar из eclipse и выполнил командную строку «java -jar MyJar.jar», и он отлично работает



5

Это не специально для eclipse, но я решил обойти это, создав символическую ссылку на мой репозиторий maven и указав ее на что-то вроде «C: \ R». Затем я добавил в свой файл settings.xml следующее:

<localRepository>C:\R</localRepository>

Путь к репозиторию maven способствовал возникновению проблем с длиной на моей машине с Windows.


5

** введите описание изображения здесь **

В intellij есть опция «сократить командную строку», выбрать «JAR manifest» или «@argFiles» решит проблему, в основном это поместит ваш длинный путь к классу в файл jar или временный файл.


4

Вопрос старый, но актуальный. Я часто сталкиваюсь с этой ситуацией, когда к моей команде присоединяется новый участник или к существующему коду добавляется новый сегмент кода. Простой обходной путь, которому мы следуем, - это «уменьшить путь к классам» путем перемещения вверх по каталогам.

Как уже упоминалось, это не относится к затмению. Я также сталкивался с этой проблемой в IntelliJ Idea 14 и 2018.

После долгих исследований я нашел решение - установить

вилка = ложь

в javc файла сборки ant.

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

Вот так теперь выглядит мой Ant build javac. Чтобы узнать больше о fork, обратитесь к документации ant.


Это чертовски эффективный ответ, который я нахожу. Спасибо
huuthang

3

В отчете об ошибке ошибка 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.

Это сработало для меня. Обратите внимание, что применение этого метода удалило мои установки JDK Java из установленных JRE. Пришлось снова добавить их. Осталась только 1 установка JRE.
Joetjah

Забавно, вы ищете ответы на SO по вашей проблеме, и один из ответов от человека, с которым вы когда-то учились / работали :)
Михал Шкудларек,


1

Чтобы решить эту проблему:

Если вы используете Eclipse:

Переместить репозиторий .m2 в

c: \ Перейдите в Eclipse> Windows / Preferences / Maven / User Settings -> Создайте свой собственный файл settings.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была очень огромной. Обновление пути к классам устранило проблему.

Есть несколько способов обновить большой путь к классам, как упоминалось в этом: Как установить длинный путь к классам Java в Windows?

  1. Используйте подстановочные знаки
  2. Файл аргумента
  3. Путь jar

Поскольку я использую Intellij, они предоставляют возможность использовать файл аргументов, который я использовал.


5
Updating the classpath- как?
Воланд

1
Очень расплывчатый ответ. Как, черт возьми, вы обновили путь к классам?
Testilla

Есть несколько способов обновить путь к классам, например, подстановочный знак.
Сандип Джиндал,

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 иногда перезаписывает аргументы с множеством путей.

Вы должны перезаписать их следующим образом:

-enhancerName ASM -api JDO -pu MediaToGo

Надеюсь помочь вам!


0

Правильный ответ из этой ветки был правильным ответом для моего особого случая. Укажите путь к папке ORM для datanucleus, безусловно, уменьшите компиляцию пути java.

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


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? Я также получаю ту же самую проблему
Создатель портфолио

Я использую intelliJ
kn3l

0

У меня такая же ошибка в студии Android. Мне удалось решить эту проблему, запустив Build -> Clean Project в IDE.


0

Это из-за вашего длинного имени каталога проекта, которое в CLASSPATHцелом дает вам очень длинный . Либо вам нужно уменьшить количество добавленных jar-файлов CLASSPATH(убедитесь, что удаляются только ненужные jar-файлы), либо лучше всего уменьшить каталог проекта и снова импортировать проект. Это уменьшит CLASSPATH. У меня это сработало.


0

У меня была такая же проблема, но вместо этого я использовал netbeans.
Я нашел решение, поэтому делюсь здесь, потому что я нигде этого не нашел, поэтому, если у вас есть эта проблема с netbeans, попробуйте следующее:
(имена могут быть отключены, так как мои netbeans на португальском языке) Щелкните правой кнопкой мыши проект> свойства > сборка> компиляция> снимите флажок запускать компиляцию на внешней виртуальной машине.


0

У меня такая же ошибка. Пробные решения, такие как очистка, восстановление, недействительность кеша, повторный запуск и т. Д., Но ничего не работает.

Я только что создал новую папку с коротким именем и скопировал все файлы (папку приложения, файлы gradle и т. Д.) В новую папку. Открыл приложение в студии Android и работает нормально.


0

В моем случае ошибка проявлялась из-за того, что системная версия 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.


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, и это плагин решил проблему для меня.

Использование (подробнее см. В источнике):

Фрагмент скрипта сборки для плагинов DSL для Gradle 2.1 и новее

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

Как много людей грустно выше, есть много плагинов для Gradle, выполняющих обход в этой проблеме, например:

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

или

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

Но лучшим решением, которое я нашел, было убить процесс JVM, и все готово.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.