CreateProcess error = 206, Der Dateiname oder die Erweiterung ist zu lang, wenn die main () -Methode ausgeführt wird

98

Ich habe diesen Fehler in Eclipse Helios:

Bei der Ausführung der Befehlszeile ist eine Ausnahme aufgetreten. Programm "C: \ Programme (x86) \ Java \ jre6 \ bin \ javaw.exe" (im Verzeichnis "C: \ Users \ motiver \ helios_workspace \ TimeTracker") kann nicht ausgeführt werden: CreateProcess error = 206, Der Dateiname oder die Erweiterung lautet zu lang

Ich habe ein wenig recherchiert, aber die meisten Probleme betrafen DataNucleus bei der Arbeit an Google App Engine. Ich verwende jedoch nichts im Zusammenhang mit Google App Engine. Ich mache ein kleines Projekt mit Servlet 3.0 auf JBOSS 6. Ich verwende Hibernate 4.1.2 für ORM und RESTEasy, um einen Webdienst verfügbar zu machen. Ich habe eine util-Datei mit einer main () -Methode erstellt, die das Schema im Grunde genommen löscht und neu erstellt. Ich führe die Methode main () aus, wenn ich zu Testzwecken eine saubere Datenbank benötige. Auf Tomcat 7 hat es gut funktioniert, aber es hat aufgehört zu funktionieren, als ich zu JBoss 6 gewechselt bin.

Jeder Hinweis oder jede Lösung wäre sehr dankbar.

Motiv
quelle
Könnte
Jeremy
Ich möchte verstehen, ob C:\Program Files (x86)\Java\jre6\bin\javaw.exees lang ist oder der andere C:\Users\motiver\helios_workspace\TimeTracker. Ich habe auch das gleiche Problem.
Siva R
Nachwelt: Ich hatte eine ähnliche Situation, aber mit einer einfachen Unternehmensanwendung, die auf WLS und Client von Eclipse aus bereitgestellt wurde. Was mir auffiel, war, dass der Klassenpfad enorm war, da Eclipse standardmäßig die gesamte WLS-Bibliothek (alle Jars) enthielt. Ich habe es entfernt und nur weblogic.jar hinzugefügt (nur erforderlich). Danach hat es gut funktioniert. Entfernen Sie nach meiner Beobachtung einfach unnötige Gläser.
Lupchiazoem

Antworten:

49

Es gibt keine einfache Lösung (wie mit ein paar Klicks oder einem einfachen Befehl) für dieses Problem.

Ausgehend von einigen Antworten in diesem Fehlerbericht auf Eclipse.org sind dies die Problemumgehungen . Wählen Sie die aus, die für Sie am wenigsten schmerzhaft ist:

  • Reduzieren Sie den Klassenpfad
  • Verwenden Sie Verzeichnisse anstelle von JAR-Dateien
  • Verwenden Sie gepackte JAR-Dateien, die alle anderen Jars enthalten. Verwenden Sie die Klassenpfadvariable in der Manifestdatei, um auf die anderen Jars zu verweisen
  • Verwenden Sie einen speziellen Klassenlader, der den Klassenpfad aus einer Konfigurationsdatei liest
  • Versuchen Sie, einen der angehängten Patches im Fehlerberichtdokument zu verwenden
  • Verwenden Sie eine eigene Hülle, z. B. Ameise

Update : Nach Juli 2014 gibt es einen besseren Weg (dank der Antwort von @ Brad-Mace unten :

Wenn Sie Ihre eigene Build-Datei erstellt haben, anstatt sie zu verwenden Project -> Generate Javadocs, können Sie useexternalfile="yes"sie zur Javadoc-Aufgabe hinzufügen , die speziell zur Lösung dieses Problems entwickelt wurde.

Espinchi
quelle
15
Wie würden IntelliJ nicht haben dieses Problem wenn es vollständig auf dem Classpath wegen der Länge wird verwendet , wenn die JVM startet?
Nitind
1
Dies könnte nur ein Eclipse-Problem sein. Ich kann die App mit maven ausführen.
Surajz
3
@nitind "In IntelliJ IDEA ersetzen sie die Hauptklasse durch eine generierte. Sie enthält den fest codierten Klassenpfad und den Code zum Starten der ursprünglichen Hauptklasse." Entnommen aus bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8
Chobicus
2
Im Jahr 2014 ist diese Antwort falsch und die von @Brad Mace ist richtig.
Bananeweizen
5
"Reduzieren Sie den Klassenpfad" ist ein netter Hinweis, aber lassen Sie mich ein wenig näher darauf eingehen: In meinem Fall habe ich versucht, ein Maven-Projekt zu erstellen, und das -classpathArgument wurde generiert, um alle Abhängigkeiten zu enthalten. So etwas kam heraus : C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more]. Das Verschieben meines lokalen Maven-Repo-Caches auf D:\m2den Trick: Classpath schrumpfte auf D:\m2\…;D:\m2\…- Bingo! Denken Sie daran, den localRepositoryPfad in Ihrer Maven-Konfiguration festzulegen.
ThomasR
18

Wenn Sie Ihre eigene Build-Datei erstellen, anstatt sie zu verwenden Project -> Generate Javadocs, können Sie useexternalfile="yes"sie der javadocAufgabe hinzufügen , die speziell zur Lösung dieses Problems entwickelt wurde.

Brad Mace
quelle
1
Hallo - wie genau füge ich das hinzu?
Prateek Narendra
@PrateekNarendra Sie würden es in Ihrer Ameisen-Builddatei (build.xml) hinzufügen
Brad Mace
17

Ich war heute mit diesem Problem konfrontiert und konnte es mit diesem Gradle-Plugin lösen

Es ist Github URL ist dies

Wenn Sie wie ich keine Ahnung haben, was Gradle ist, sondern ein Backend ausführen müssen, um Ihre Front-End-Arbeit zu erledigen, müssen Sie die Datei build.gradle suchen, die aufgerufen wird, um Ihren BE-Server zu starten, und diese hinzufügen die Spitze:

plugins {
  id "ua.eshepelyuk.ManifestClasspath" version "1.0.0"
}
Alejandro B.
quelle
3
Jetzt erhalte ich " attributes["Main-Class"]
Hauptklassenname
1
Ich habe versucht, Plugin zu verwenden, aber keine Wirkung. Das Problem kommt noch. Bitte vorschlagen
Amarnathpatel
8

Beantworte meine eigene Frage hier, damit die Lösung nicht in Kommentaren vergraben wird. Ich habe das Projekt als ausführbares JAR aus Eclipse exportiert und eine Befehlszeile "java -jar MyJar.jar" ausgeführt, die einwandfrei funktioniert

Motiv
quelle
5

Dies ist nicht speziell für Eclipse gedacht, aber ich habe dies umgangen, indem ich einen symbolischen Link zu meinem Maven-Repository erstellt und auf etwas wie "C: \ R" verwiesen habe. Dann habe ich meiner Datei settings.xml Folgendes hinzugefügt:

<localRepository>C:\R</localRepository>

Der Maven-Repository-Pfad trug zu den Längenproblemen auf meinem Windows-Computer bei.

Shygar
quelle
5

** Geben Sie hier die Bildbeschreibung ein **

In Intellij gibt es eine Option zum 'Kürzen der Befehlszeile', Auswählen von 'JAR-Manifest' oder '@argFiles', um das Problem zu lösen. Im Grunde wird Ihr langer Klassenpfad in eine JAR-Datei oder eine temporäre Datei eingefügt

Actan
quelle
4

Frage ist alt, aber immer noch gültig. Ich stoße häufig auf diese Situation, wenn ein neues Mitglied meinem Team beitritt oder ein neues Codesegment zu vorhandenem Code hinzugefügt wird. Eine einfache Problemumgehung besteht darin, den Klassenpfad zu verkleinern, indem Sie die Verzeichnisse nach oben verschieben.

Wie bereits erwähnt, ist dies nicht spezifisch für Eclipse. Ich bin auch in IntelliJ Idea 14 und 2018 auf dieses Problem gestoßen.

Nach langer Recherche fand ich die Lösung darin, das einzustellen

Gabel = falsch

in javc von ant build file.

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

So sieht mein Ameisenbau-Javac jetzt aus. Weitere Informationen zur Gabel finden Sie in der Dokumentation zu Ameisen.

Don D.
quelle
Dies ist die effektivste Antwort, die ich finde. Danke
Huuthang
3

Im Bug Report Bug 327193 wird es als behoben angesehen, aber es passiert mir kürzlich mit Eclipse Kepler 4.3.2.

Bitte laden Sie den Patch für Eclipse Juno oder höher herunter:

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

  1. Nach dem Download sichern Sie vorhandene Eclipse / Plugins / org.eclipse.jdt.launching_3. *. Jar
  2. Kopieren Sie Klassen im Patch und fügen Sie sie in org.eclipse.jdt.launching JAR ein (ersetzen Sie vorhandene Dateien).
  3. Starten Sie Eclipse neu.
Maciej Dzikowicki
quelle
Das hat bei mir funktioniert. Beachten Sie, dass durch diese Anwendung meine JDK-Java-Installationen aus den installierten JREs entfernt wurden. Ich musste sie erneut hinzufügen. Nur 1 JRE-Installation blieb bestehen.
Joetjah
Lustige Sache, Sie suchen nach Antworten auf SO zu Ihrem Problem und eine der Antworten stammt von einer Person, mit der Sie studiert / gearbeitet haben :)
Michał Szkudlarek
1

Versuche dies:

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

user3272405
quelle
1

Um es zu lösen:

Wenn Sie Eclipse verwenden:

Verschieben Sie das .m2-Repository nach

c: \ Gehen Sie zu Eclipse> Windows / Einstellungen / Maven / Benutzereinstellungen -> Erstellen Sie Ihre eigene settings.xml mit ihrem Inhalt:

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

Wenn Sie IntelliJ verwenden: Gehen Sie zu IntelliJ> klicken Sie mit der rechten Maustaste auf "pom.xml"> maven> erstellen Sie "settings.xml".

mit seinem Inhalt:

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

Ich habe den gleichen Fehler beim Aufrufen von Maven.

Die Hauptursache für mein Problem war, dass classpathes sehr groß war. Das Aktualisieren des Klassenpfads hat das Problem behoben.

Es gibt mehrere Möglichkeiten, den großen Klassenpfad zu aktualisieren, wie in diesem Abschnitt beschrieben: Wie wird ein langer Java-Klassenpfad in Windows festgelegt?

  1. Verwenden Sie Platzhalter
  2. Argumentdatei
  3. Pathing Glas

Da ich Intellij verwende, bieten sie die Option, die von mir verwendete Argumentdatei zu verwenden.

Sandeep Jindal
quelle
5
Updating the classpath- Wie?
Woland
1
Eine sehr vage Antwort. Wie zum Teufel hast du den Klassenpfad aktualisiert?
Testilla
Es gibt mehrere Möglichkeiten, den Klassenpfad zu aktualisieren, z. B. Platzhalter.
Sandeep Jindal
1

Fügen Sie dies in die gradle version 4.10.xDatei build.gradle ( ) ein und überprüfen Sie, ob com.xxx.MainClassdies die Klasse ist, in der sich Ihre Hauptmethode befindet:

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

Die obige Änderung muss das Problem beheben. Es gibt eine andere Möglichkeit, das Problem mithilfe des folgenden Skripts zu run.shbeheben. Es handelt sich jedoch eher um eine Befehlszeilenkorrektur, die nicht in IntelliJ gestartet werden kann gradle bootRun.

Ravibeli
quelle
0

Dies geschieht, weil DataNucleus die Argumente manchmal mit vielen Pfaden überschreibt.

Sie müssen sie damit überschreiben:

-enhancerName ASM -api JDO -pu MediaToGo

Hoffe dir zu helfen!

Rodrigohsb
quelle
0

Eine gültige Antwort aus diesem Thread war die richtige Antwort für meinen Sonderfall. Wenn Sie den ORM-Ordnerpfad für den Datenkern angeben, wird die Kompilierung des Java-Pfads auf jeden Fall reduziert.

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

smora
quelle
0

Ich habe den folgenden Fehler erhalten, wenn ich ' ant deploy ' ausführe.

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

Es wurde behoben, indem ' ant clean ' davor ausgeführt wurde.

Maoyang
quelle
1
Was ist, wenn ich Android Studio verwende? Ich erhalte auch die gleiche Ausgabe
portfoliobuilder
Ich benutze IntelliJ
Kn3l
0

Ich habe den gleichen Fehler in Android Studio. Ich konnte es beheben, indem ich Build -> Clean Project in der IDE ausführte.

Kiran
quelle
0

Dies liegt an Ihrem langen Projektverzeichnisnamen, der Ihnen insgesamt einen sehr langen Namen gibt CLASSPATH. Entweder müssen Sie die Anzahl der hinzugefügten Gläser reduzieren CLASSPATH(stellen Sie sicher, dass nur unnötige Gläser entfernt werden), oder Sie können das Projektverzeichnis am besten verkleinern und das Projekt erneut importieren. Dies wird die reduzieren CLASSPATH. Es hat bei mir funktioniert.

Deepesh Kumar
quelle
0

Ich hatte das gleiche Problem, aber ich habe stattdessen Netbeans verwendet.
Ich habe eine Lösung gefunden, die ich hier teile, weil ich sie nirgendwo gefunden habe. Wenn Sie dieses Problem bei Netbeans haben, versuchen Sie Folgendes:
(Namen sind möglicherweise deaktiviert, da meine Netbeans auf Portugiesisch sind.) Klicken Sie mit der rechten Maustaste auf Projekt> Eigenschaften > build> compiling> Deaktivieren Sie "Kompilierung auf externer VM ausführen".

Régis B.
quelle
0

Ich habe den gleichen Fehler bekommen. Versuchte Lösungen wie Bereinigen, Wiederherstellen, Ungültigmachen des Caches, Neustarten usw., aber nichts funktioniert.

Ich habe gerade einen neuen Ordner mit Kurznamen erstellt und alle Dateien (App-Ordner, Gradle-Dateien usw.) in einen neuen Ordner kopiert. Geöffnete Anwendung in Android Studio und es funktioniert gut.

Tara
quelle
0

In meinem Fall wurde der Fehler angezeigt, da sich die Java-Version des Systems von der Java-Version von Intellijj / Eclipse unterschied. System und Benutzer hatten verschiedene Java-Versionen. Wenn Sie Ihren Code mit einer Version kompilieren und versuchen, ihn mit einer anderen Version auszuführen, tritt ein Fehler auf. Die Java-Version des Benutzers ist 1.8

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

Kurz gesagt, stellen Sie sicher, dass Ihr Code von derselben Java-Version kompiliert und ausgeführt wird.

zee
quelle
0

Um diesen Fehler zu beheben, habe ich genug recherchiert, keine großartige Lösung gefunden. Ich habe dieses Skript vorbereitet und es funktioniert einwandfrei. Ich dachte, ich möchte es der Öffentlichkeit zugänglich machen und es nutzen und dort Zeit sparen.

CreateProcess error = 206, Der Dateiname oder die Erweiterung ist zu lang

Wenn Sie das Gradle-Build-Tool verwenden und die ausführbare Datei im Verzeichnis build / libs Ihrer Anwendung abgelegt ist. run.sh-> Erstellen Sie diese Datei im Stammverzeichnis Ihres Projekts, kopieren Sie das folgende Skript darin, gehen Sie zu git bash, geben Sie run.sh ein und geben Sie ein. Hoffe das hilft!

#!/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

Hoffe das hilft!!

Ravibeli
quelle
0

Ich verwende eine ältere Version von Gradle-Plugins und dies Plugin hat das Problem für mich gelöst.

Verwendung (siehe Quelle für weitere Details):

Erstellen Sie ein Skript-Snippet für Plugins DSL für Gradle 2.1 und höher

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

Erstellen Sie ein Skript-Snippet zur Verwendung in älteren Gradle-Versionen oder wenn eine dynamische Konfiguration erforderlich ist

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"
Ilkin
quelle
0

Auf einem Windows-Computer gibt es eine Einschränkung des JAR-Dateinamens / der Pfadlänge in der Befehlszeile. Aufgrund der folgenden Fehlermeldung habe ich viel gesucht, auch wenn ich aus irgendeinem Grund versucht habe, die oben genannte Lösung anzuwenden. es hat nicht funktioniert, ich habe das funktionierende Snippet für Gradle gefunden (gradle-4.10.2-all.zip)

Error:

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

Verwenden Sie dies unten gradle.build Codefragment, um das oben genannte Problem in IntelliJ oder STS zu beheben oder etwas in den Schatten zu stellen.

Gradle Code Fix:

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)
    }
}
Ravibeli
quelle
0

Wie viele Leute oben traurig sind, gibt es eine Menge Plugins, um einen Bypass in diesem Problem auszuführen, wie:

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

oder

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

Aber die bessere Lösung, die ich gefunden habe, war, den JVM-Prozess zu beenden und alles ist erledigt.

Ivan Rodrigues
quelle