Błąd CreateProcess = 206, nazwa pliku lub rozszerzenie jest za długie podczas uruchamiania metody main ()


99

Mam ten błąd w heliosach zaćmienia:

Wystąpił wyjątek podczas wykonywania wiersza poleceń. Nie można uruchomić programu „C: \ Program Files (x86) \ Java \ jre6 \ bin \ javaw.exe” (w katalogu „C: \ Users \ motiver \ helios_workspace \ TimeTracker”): CreateProcess error = 206, Nazwa pliku lub rozszerzenie to za długo

Trochę badałem, ale większość problemów była związana z DataNucleus podczas pracy w Google App Engine. Ale nie używam niczego zdalnie związanego z Google App Engine. Robię mały projekt z Servlet 3.0 na JBOSS 6. Używam Hibernate 4.1.2 dla ORM i RESTEasy do udostępnienia usługi sieciowej. Utworzyłem plik narzędziowy, który ma metodę main (), która w zasadzie porzuca i ponownie tworzy schemat. Uruchamiam metodę main (), gdy potrzebuję czystej bazy danych do celów testowych. Działało dobrze na Tomcat 7, ale przestało działać, kiedy przeniosłem się na JBoss 6.

Każda wskazówka lub rozwiązanie byłyby bardzo mile widziane.




Chcę zrozumieć, czy C:\Program Files (x86)\Java\jre6\bin\javaw.exejest długi, czy inny C:\Users\motiver\helios_workspace\TimeTracker. Ja też mam ten sam problem.
Siva R

Potomność: miałem podobną sytuację, ale z prostą aplikacją korporacyjną wdrożoną na WLS i kliencie z Eclipse. Zauważyłem, że ścieżka klas była ogromna, ponieważ Eclipse domyślnie zawierał całą bibliotekę WLS (wszystkie pliki jar). Usunąłem go i dodałem po prostu weblogic.jar (tylko wymagane). Potem działało dobrze. Tak więc, z mojej obserwacji, po prostu usuń niepotrzebne słoiki.
lupchiazoem

Odpowiedzi:


50

Nie ma prostego (jak za pomocą kilku kliknięć lub prostego polecenia) rozwiązania tego problemu.

Cytując niektóre odpowiedzi w tym raporcie o błędzie na Eclipse.org , oto sposoby obejścia tego problemu . Wybierz ten, który jest dla Ciebie najmniej bolesny:

  • Zmniejsz ścieżkę klas
  • Używaj katalogów zamiast plików jar
  • Użyj spakowanych plików jar, które zawierają wszystkie inne pliki jar, użyj zmiennej classpath w pliku manifestu, aby wskazać inne pliki jar
  • Użyj specjalnego programu ładującego klasy, który odczytuje ścieżkę klas z pliku konfiguracyjnego
  • Spróbuj użyć jednej z załączonych łatek w dokumencie zgłoszenia błędu
  • Użyj własnego opakowania, np. Ant

Aktualizacja : po lipcu 2014 jest lepszy sposób (dzięki odpowiedzi @ Brad-Mace poniżej :

Jeśli utworzyłeś własny plik kompilacji zamiast używać Project -> Generate Javadocs, możesz dodać useexternalfile="yes"do zadania Javadoc, które zostało zaprojektowane specjalnie w celu rozwiązania tego problemu.


16
W jaki sposób IntelliJ nie miałby tego problemu, skoro wynika to wyłącznie z długości ścieżki klas używanej podczas uruchamiania maszyny JVM?
nitind

1
To może być tylko problem z zaćmieniem, jestem w stanie uruchomić aplikację za pomocą mavena.
surajz

3
@nitind "W IntelliJ IDEA zastępują główną klasę wygenerowaną klasą. Zawiera zakodowaną na stałe ścieżkę klas i kod do uruchomienia oryginalnej klasy głównej." Zaczerpnięte z bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8
Chobicus

2
W 2014 roku ta odpowiedź jest błędna, a ta autorstwa @Brad Mace jest poprawna.
Bananeweizen

5
„Reduce the classpath” to fajna wskazówka, ale pozwólcie, że omówię to trochę: w moim przypadku próbowałem zbudować projekt mavena, a -classpathargument został wygenerowany tak, aby zawierał wszystkie zależności. Tak, coś takiego wyszło: C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more]. Przeniesienie mojej lokalnej pamięci podręcznej repozytorium Maven, aby D:\m2załatwić sprawę: Classpath skurczył się do D:\m2\…;D:\m2\…- bingo! Pamiętaj, aby ustawić localRepositoryścieżkę w konfiguracji maven.
ThomasR


17

Zmierzyłem się dzisiaj z tym problemem i udało mi się go rozwiązać za pomocą tej wtyczki Gradle

To jest adres github

JEŚLI, tak jak ja, nie masz pojęcia, czym jest Gradle, ale potrzebujesz uruchomić backend, aby wykonać swoją pracę z przodu, co musisz zrobić, to znaleźć plik build.gradle , który jest wywoływany, aby uruchomić serwer BE i dodać go do szczyt:

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

3
Teraz otrzymuję komunikat „Główna nazwa klasy nie została skonfigurowana i nie można jej rozwiązać”, pomimo ustawieniaattributes["Main-Class"]
Anton3

2
Próbowałem użyć wtyczki, ale bez efektu. Problem wciąż nadchodzi. Proszę zasugerować
amarnathpatel

8

Odpowiadam tutaj na własne pytanie, aby rozwiązanie nie zostało zakopane w komentarzach. Wyeksportowałem projekt jako działający plik jar z poziomu zaćmienia i wykonałem polecenie "java -jar MyJar.jar" i działa doskonale



5

Nie dotyczy to specjalnie zaćmienia, ale sposobem obejścia tego problemu było utworzenie symbolicznego łącza do mojego repozytorium Maven i wskazanie go na coś takiego jak „C: \ R”. Następnie dodałem do mojego pliku settings.xml:

<localRepository>C:\R</localRepository>

Ścieżka repozytorium maven przyczyniała się do problemów z długością na moim komputerze z systemem Windows.


5

** wprowadź opis obrazu tutaj **

W intellij jest opcja `` skracania wiersza poleceń '', wybierając `` manifest JAR '' lub `` @argFiles '' rozwiązałoby problem, w zasadzie umieści twoją długą ścieżkę klasy w pliku jar lub pliku tymczasowym


4

Pytanie jest stare, ale nadal aktualne. Często spotykam się z taką sytuacją, gdy do mojego zespołu dołącza nowy członek lub nowy segment kodu jest dodawany do istniejącego kodu. Prostym obejściem, które stosujemy, jest „Zmniejszenie ścieżki klas” przez przesunięcie katalogów w górę.

Jak wspomniano w pytaniu, nie jest to specyficzne dla zaćmienia. Trafiłem na ten problem również w IntelliJ Idea 14 i 2018.

Po długich poszukiwaniach stwierdziłem, że rozwiązaniem jest ustawienie

fork = false

w javc pliku kompilacji Ant.

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

Tak wygląda teraz moja kompilacja mrówek javac. Aby dowiedzieć się więcej na temat forka, zapoznaj się z dokumentacją ant.


To jest cholernie skuteczna odpowiedź, którą znajduję. Dzięki
huuthang

3

W raporcie o błędzie Bug 327193 jest uważany za naprawiony, ale ostatnio zdarzyło mi się to w przypadku Eclipse Kepler 4.3.2.

Pobierz poprawkę dla Eclipse Juno lub nowszą:

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

  1. Po pobraniu wykonaj kopię zapasową istniejących eclipse / plugins / org.eclipse.jdt.launching_3. *. Jar
  2. Skopiuj i wklej klasy z poprawki do org.eclipse.jdt.launching JAR (zastąp istniejące pliki).
  3. Uruchom ponownie Eclipse.

To zadziałało dla mnie. Zauważ, że zastosowanie tego spowodowało usunięcie moich instalacji JDK Java z zainstalowanych JRE. Musiałem je ponownie dodać. Utrzymała się tylko 1 instalacja środowiska JRE.
Joetjah

Zabawne, szukasz odpowiedzi w SO na swój problem, a jedna z odpowiedzi pochodzi od osoby, z którą kiedyś się uczyłeś / pracowałeś :)
Michał Szkudlarek


1

Aby to rozwiązać:

Jeśli używasz Eclipse:

Przenieś repozytorium .m2 do

c: \ Idź do Eclipse> Windows / Preferences / Maven / User Settings -> Stwórz swój własny plik setting.xml z jego zawartością:

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

Jeśli używasz IntelliJ: Idź do IntelliJ> kliknij prawym przyciskiem myszy na "pom.xml"> maven> utwórz "settings.xml"

z jego zawartością:

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

1

Mam ten sam błąd podczas wywoływania Mavena.

Główną przyczyną mojego problemu był plik classpath była bardzo duża. Aktualizacja ścieżki klas rozwiązała problem.

Jak wspomniano w tym artykule, istnieje wiele sposobów aktualizowania dużej ścieżki klas: Jak ustawić długą ścieżkę klas Java w systemie Windows?

  1. Użyj symboli wieloznacznych
  2. Plik argumentów
  3. Słoik do ścieżki

Ponieważ używam Intellij, zapewniają one opcję użycia pliku argumentów, którego użyłem.


5
Updating the classpath- w jaki sposób?
Woland

1
Bardzo niejasna odpowiedź. Jak do cholery zaktualizowałeś ścieżkę klas?
Testilla

Istnieje wiele sposobów aktualizacji ścieżki klas, np. Symbole wieloznaczne.
Sandeep Jindal

1

Spróbuj dodać to w gradle version 4.10.xpliku build.gradle ( ) i sprawdź, czy com.xxx.MainClassjest to klasa, w której znajduje się twoja główna metoda:

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

Powyższa zmiana musi rozwiązać problem, jest inny sposób, aby użyć run.shponiższego skryptu, aby rozwiązać ten problem, ale będzie to bardziej naprawa wiersza poleceń, a nie IntelliJ do uruchomienia gradle bootRun.


0

dzieje się tak, ponieważ DataNucleus czasami nadpisuje Argumenty wieloma ścieżkami.

Musisz je nadpisać tym:

-enhancerName ASM -api JDO -pu MediaToGo

Mam nadzieję, że ci pomogę!



0

Pojawił się poniższy błąd, gdy uruchamiam „ Ant deploy

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

Naprawiono go, uruchamiając przed nim polecenie „ ant clean ”.


1
Co jeśli używam Android Studio? Otrzymuję również ten sam numer
portfoliobuilder

Używam intelliJ
kn3l

0

Ten sam błąd wystąpił w Android Studio. Udało mi się to rozwiązać, uruchamiając Build -> Clean Project w IDE.


0

Dzieje się tak z powodu długiej nazwy katalogu projektu, która daje w CLASSPATHsumie bardzo długą nazwę . Albo musisz zmniejszyć liczbę dodanych plików JAR CLASSPATH(pamiętaj, aby usunąć tylko niepotrzebne pliki JAR) lub najlepszym sposobem jest zmniejszenie katalogu projektu i ponowne zaimportowanie projektu. Zmniejszy to CLASSPATH. U mnie to zadziałało.


0

Miałem ten sam problem, ale zamiast tego korzystałem z netbeanów.
Znalazłem rozwiązanie, więc udostępniam tutaj, ponieważ nigdzie tego nie znalazłem, więc jeśli masz ten problem w sieciach sieciowych, wypróbuj to:
(nazwy mogą być wyłączone, ponieważ moje netbeans są w języku portugalskim) Projekt kliknij prawym przyciskiem myszy> właściwości > build> compiling> Odznacz opcję uruchom kompilację na zewnętrznej maszynie wirtualnej.


0

Mam ten sam błąd. Wypróbowane rozwiązania, takie jak czyszczenie, odbudowa, unieważnienie pamięci podręcznej, ponowne uruchomienie itp., Ale nic nie działa.

Właśnie utworzyłem nowy folder o krótkiej nazwie i skopiowałem wszystkie pliki (folder aplikacji, pliki Gradle itp.) Do nowego folderu. Otwarta aplikacja w Android Studio i działa poprawnie.


0

W moim przypadku błąd był wyświetlany, ponieważ wersja systemu java różniła się od wersji java intellijj / eclipse. System i użytkownik mieli różne wersje java. Jeśli skompilujesz swój kod przy użyciu jednej wersji i spróbujesz uruchomić go przy użyciu innej wersji, wystąpi błąd. Wersja Java użytkownika to 1.8

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

Krótko mówiąc, upewnij się, że Twój kod jest skompilowany i uruchamiany w tej samej wersji Java.



0

Aby naprawić ten poniższy błąd, przeprowadziłem wystarczająco dużo badań, nie znalazłem żadnego świetnego rozwiązania, przygotowałem ten skrypt i działa dobrze, pomyślałem, aby udostępnić go publicznie i wykorzystać i zaoszczędzić czas.

Błąd CreateProcess = 206, nazwa pliku lub rozszerzenie jest za długie

Jeśli używasz narzędzia do budowania Gradle, a plik wykonywalny jest umieszczony w katalogu build / libs aplikacji. run.sh-> utwórz ten plik w katalogu głównym projektu i skopiuj do niego poniższy skrypt, a następnie przejdź do git bash i wpisz run.sh, a następnie wprowadź. Mam nadzieję że to pomoże!

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

Mam nadzieję że to pomoże!!


0

Używam starszej wersji wtyczek Gradle i to wtyczka rozwiązała problem.

Użycie (sprawdź źródło, aby uzyskać więcej informacji):

Zbuduj fragment skryptu dla wtyczek DSL dla Gradle 2.1 i nowszych

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

Utwórz fragment skryptu do użytku w starszych wersjach Gradle lub tam, gdzie wymagana jest dynamiczna konfiguracja

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

Na komputerze z systemem Windows istnieje ograniczenie nazwy pliku jar / długości ścieżki w linii poleceń, przez co pojawia się poniższy komunikat o błędzie, próbowałem dużo szukać, nawet próbowałem zastosować powyższe rozwiązanie, z jakiegoś powodu, to nie zadziałało, znalazłem działający fragment kodu dla Gradle (gradle-4.10.2-all.zip)

Błąd:

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

Użyj poniższego gradle.buildfragmentu kodu, aby naprawić powyższy problem w IntelliJ lub STS lub zaćmienić cokolwiek.

Poprawka kodu 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

Ile osób jest smutnych powyżej, jest wiele wtyczek do stopniowania wykonania obejścia w tym problemie, takich jak:

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

lub

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

Ale lepszym rozwiązaniem, które znalazłem, było zabicie procesu JVM i wszystko jest gotowe.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.