Errore CreateProcess = 206, il nome del file o l'estensione è troppo lungo quando si esegue il metodo main ()


98

Ho questo errore in eclipse helios:

Si è verificata un'eccezione durante l'esecuzione della riga di comando. Impossibile eseguire il programma "C: \ Program Files (x86) \ Java \ jre6 \ bin \ javaw.exe" (nella directory "C: \ Users \ motiver \ helios_workspace \ TimeTracker"): errore CreateProcess = 206, il nome del file o l'estensione è troppo lungo

Ho studiato un po 'ma la maggior parte dei problemi erano legati a DataNucleus quando lavoravo su Google App Engine. Ma non sto usando nulla che sia collegato in remoto a Google App Engine. Sto facendo un piccolo progetto con Servlet 3.0 su JBOSS 6. Sto usando Hibernate 4.1.2 per ORM e RESTEasy per esporre un servizio web. Ho creato un file util che ha un metodo main () che sostanzialmente elimina e ricrea lo schema. Eseguo il methos main () quando ho bisogno di un database pulito a scopo di test. Ha funzionato bene su Tomcat 7 ma ha smesso di funzionare quando sono passato a JBoss 6.

Qualsiasi suggerimento o soluzione sarebbe molto apprezzata.




Voglio capire se C:\Program Files (x86)\Java\jre6\bin\javaw.exeè lungo o l'altro C:\Users\motiver\helios_workspace\TimeTracker. Anch'io ho lo stesso problema.
Siva R

Posterity: ho avuto una situazione simile ma, con una semplice applicazione aziendale distribuita su WLS e client da Eclipse. Quello che ho notato è che il classpath era enorme poiché Eclipse, per impostazione predefinita, includeva l'intera libreria WLS (tutti i jar). L'ho rimosso e ho aggiunto, solo, weblogic.jar (solo richiesto). In seguito, ha funzionato bene. Quindi, secondo la mia osservazione, rimuovi solo i barattoli non necessari.
lupchiazoem

Risposte:


49

Non esiste una soluzione semplice (come in un paio di clic o in un semplice comando) a questo problema.

Citando alcune risposte in questa segnalazione di bug in Eclipse.org , queste sono le soluzioni. Scegli quello che per te è meno doloroso:

  • Riduci il percorso di classe
  • Usa le directory invece dei file jar
  • Usa un file jar compresso che contiene tutti gli altri jar, usa la variabile classpath all'interno del file manifest per puntare agli altri jar
  • Usa un programma di caricamento classi speciale che legge il classpath da un file di configurazione
  • Prova a utilizzare una delle patch allegate nel documento di segnalazione dei bug
  • Usa un involucro proprio, ad esempio ant

Aggiornamento : dopo luglio 2014, c'è un modo migliore (grazie alla risposta di @ Brad-Mace di seguito :

Se hai creato il tuo file di build invece di usarlo Project -> Generate Javadocs, puoi aggiungerlo useexternalfile="yes"all'attività Javadoc, progettata specificamente per risolvere questo problema.


16
In che modo IntelliJ non avrebbe questo problema se fosse interamente a causa della lunghezza del percorso di classe utilizzato all'avvio della JVM?
nitind

1
Questo potrebbe essere solo un problema di eclissi, sono in grado di eseguire l'app utilizzando Maven.
surajz

3
@nitind "In IntelliJ IDEA sostituiscono la classe principale con una generata. Contiene il classpath hardcoded e il codice per avviare la classe principale originale." Tratto da bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8
Chobicus

2
Nel 2014 questa risposta è sbagliata e quella di @Brad Mace è corretta.
Bananeweizen

5
"Reduce the classpath" è un bel suggerimento, ma lasciatemi elaborare un po 'su questo: nel mio caso, ho provato a costruire un progetto maven, e l' -classpathargomento è stato generato per contenere tutte le dipendenze. Quindi, qualcosa di simile a questo è venuto fuori: C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more]. Spostare la cache del mio repository locale per D:\m2fare il trucco: Classpath si è ridotto a D:\m2\…;D:\m2\…- bingo! Ricordati di impostare il localRepositorypercorso nella tua configurazione Maven.
ThomasR

18

Se si crea il proprio file di configurazione, piuttosto che usare Project -> Generate Javadocssi può aggiungere useexternalfile="yes"al javadoccompito, che è stato progettato specificamente per risolvere questo problema.


1
Ciao - come aggiungo esattamente questo?
Prateek Narendra

@PrateekNarendra lo aggiungeresti al tuo file di build di formiche (build.xml): ant.apache.org/manual/Tasks/javadoc.html
Brad Mace

17

Ho affrontato questo problema oggi e sono stato in grado di risolverlo utilizzando questo plugin Gradle

L' URL di GitHub è questo

SE tu, come me, non hai idea di cosa sia Gradle ma hai bisogno di eseguire un backend per fare il tuo lavoro di front-end, quello che devi fare è trovare il file build.gradle che viene chiamato per avviare il tuo server BE e aggiungerlo a la cima:

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

3
Ora ottengo "Il nome della classe principale non è stato configurato e non è stato possibile risolverlo", nonostante sia stato impostatoattributes["Main-Class"]
Anton3

1
Ho provato a usare il plugin ma nessun effetto. Il problema è ancora in arrivo. Si prega di suggerire
amarnathpatel

8

Rispondere alla mia domanda qui in modo che la soluzione non venga sepolta nei commenti. Ho esportato il progetto come un jar eseguibile da eclipse e ho eseguito una riga di comando "java -jar MyJar.jar" e funziona perfettamente bene



5

Questo non è specifico per eclipse, ma il modo in cui l'ho aggirato è stato creando un collegamento simbolico al mio repository Maven e puntandolo a qualcosa come "C: \ R". Quindi ho aggiunto quanto segue al mio file settings.xml:

<localRepository>C:\R</localRepository>

Il percorso del repository maven stava contribuendo ai problemi di lunghezza nella mia macchina Windows.


5

** inserisci qui la descrizione dell'immagine **

In intellij c'è un'opzione per 'accorciare la riga di comando', selezionare 'JAR manifest' o '@argFiles' risolverà il problema, in pratica metterà il tuo lungo percorso di classe in un file jar o in un file temporaneo


4

La domanda è vecchia, ma ancora valida. Mi imbatto in questa situazione spesso ogni volta che un nuovo membro si unisce al mio team o un nuovo segmento di codice viene aggiunto al codice esistente. La soluzione alternativa semplice che seguiamo è "Ridurre il classpath" spostando verso l'alto le directory.

Come già detto, questo non è specifico per eclipse. Ho riscontrato questo problema anche in IntelliJ Idea 14 e nel 2018.

Dopo una lunga ricerca, ho scoperto che la soluzione è impostare il file

fork = false

in javc del file di build ant.

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

Ecco come appare il mio javac di formica ora. Per saperne di più sul fork, fare riferimento alla documentazione di ant.


Questa è una fottuta risposta efficace che sto trovando. Grazie
huuthang

3

Nel bug report Bug 327193 è considerato corretto, ma a me è capitato di recente con Eclipse Kepler 4.3.2.

Scarica la patch per Eclipse Juno o più recente:

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

  1. Dopo il download, esegui il backup di eclipse / plugins / org.eclipse.jdt.launching_3. *. Jar esistente
  2. Copia e incolla le classi nella patch in org.eclipse.jdt.launching JAR (sostituisci i file esistenti).
  3. Riavvia Eclipse.

Questo ha funzionato per me. Notare che l'applicazione di questo ha rimosso le mie installazioni Java JDK dai JRE installati. Ho dovuto aggiungerli di nuovo. È stata mantenuta solo 1 installazione JRE.
Joetjah

Cosa divertente, cerchi risposte su SO sul tuo problema e una delle risposte è da una persona con cui
studiavi / lavoravi

1

Prova questo:

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


1

Per risolverlo:

Se stai usando Eclipse:

Sposta il repository .m2 in

c: \ Vai a Eclipse> Windows / Preferenze / Maven / Impostazioni utente -> Crea il tuo setting.xml con il suo contenuto:

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

Se stai usando IntelliJ: vai su IntelliJ> fai clic con il pulsante destro del mouse su "pom.xml"> maven> crea "settings.xml"

con il suo contenuto:

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

1

Ho lo stesso errore, mentre invoco Maven.

La causa principale del mio problema era che classpathera enorme. L'aggiornamento del classpath ha risolto il problema.

Esistono diversi modi per aggiornare il percorso di classe grande come menzionato in questo: Come impostare un percorso di classe Java lungo in Windows?

  1. Usa caratteri jolly
  2. File di argomento
  3. Vaso Pathing

Dato che sto usando Intellij, forniscono la possibilità di utilizzare il file di argomenti che ho usato.


5
Updating the classpath- Come?
Woland,

1
Una risposta molto vaga. Come diavolo hai aggiornato classpath?
Testilla

Esistono diversi modi per aggiornare il percorso di classe, ad esempio il carattere jolly.
Sandeep Jindal,

1

Prova ad aggiungerlo nel gradle version 4.10.xfile build.gradle ( ) e controlla com.xxx.MainClassquesta è la classe in cui risiede il tuo metodo principale:

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

La modifica di cui sopra deve risolvere il problema, esiste un altro modo in cui utilizzare lo script di run.shseguito potrebbe risolvere questo problema, ma sarà più una correzione della riga di comando, non in IntelliJ per l'avvio gradle bootRun.


0

succede a causa di DataNucleus a volte sovrascrivere gli argomenti con molti percorsi.

Devi sovrascriverli con questo:

-enhancerName ASM -api JDO -pu MediaToGo

Spero di aiutarti!



0

Ho ricevuto l'errore di seguito quando eseguo " ant deploy "

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

Risolto il problema eseguendo " ant clean " prima di esso.


1
E se utilizzo Android Studio? Ricevo anche lo stesso problema
portfoliobuilder

Sto usando intelliJ
kn3l

0

Ho ricevuto lo stesso errore in Android Studio. Sono stato in grado di risolverlo eseguendo Build -> Clean Project nell'IDE.


0

Ciò è dovuto al nome lungo della directory del progetto, che ti dà un CLASSPATHtutto molto lungo . O è necessario ridurre i barattoli aggiunti a CLASSPATH(assicurarsi di rimuovere solo i barattoli non necessari) oppure il modo migliore è ridurre la directory del progetto e importare di nuovo il progetto. Questo ridurrà il CLASSPATH. Ha funzionato per me.


0

Ho avuto lo stesso problema, ma invece stavo usando netbeans.
Ho trovato una soluzione quindi la condivido qui perché non l'ho trovata da nessuna parte, quindi se hai questo problema su netbeans, prova questo:
(i nomi potrebbero essere disattivati ​​poiché il mio netbeans è in portoghese) Fai clic con il pulsante destro del mouse su progetto> proprietà > build> compilazione> Deseleziona Esegui compilazione su VM esterna.


0

Ho ricevuto lo stesso errore. Ho provato soluzioni come pulizia, ricostruzione, invalidateCache, riavvio ecc.Ma non funziona nulla.

Ho appena creato una nuova cartella con un nome breve e copiato tutti i file (cartella app, file gradle ecc.) In una nuova cartella. Applicazione aperta in Android Studio e funziona bene.


0

Nel mio caso l'errore veniva visualizzato perché la versione java del sistema era diversa dalla versione java intellijj / eclipse. Il sistema e l'utente avevano versioni java diff. Se si compila il codice utilizzando una versione e si tenta di eseguirlo utilizzando una versione diversa, verrà visualizzato un errore. La versione Java dell'utente è 1.8

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

Per farla breve, assicurati che il tuo codice sia compilato ed eseguito dalla stessa versione java.



0

Per correggere questo errore di seguito, ho fatto abbastanza ricerche, non ho ottenuto nessuna grande soluzione, ho preparato questo script e funziona bene, ho pensato di condividerlo con il pubblico e di utilizzarlo e di risparmiare tempo.

Errore CreateProcess = 206, il nome del file o l'estensione è troppo lungo

Se stai usando lo strumento di compilazione Gradle e il file eseguibile è posizionato nella directory build / libs della tua applicazione. run.sh-> crea questo file nella directory principale del tuo progetto, e copia sotto lo script in esso, quindi vai su git bash e digita run.sh, quindi inserisci. Spero che questo ti aiuti!

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

Spero che questo ti aiuti!!


0

Sto usando una versione precedente dei plugin gradle e questo plugin ha risolto il problema per me.

Utilizzo (controlla l'origine per maggiori dettagli):

Crea snippet di script per plug-in DSL per Gradle 2.1 e versioni successive

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

Crea frammenti di script da utilizzare nelle versioni precedenti di Gradle o dove è richiesta la configurazione dinamica

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

In una macchina Windows, c'è una limitazione del nome del file jar / lunghezza del percorso nella riga di comando, a causa della quale viene visualizzato il messaggio di errore seguente, ho provato a cercare molto, anche se ho provato ad applicare la soluzione di cui sopra, per qualche motivo, non ha funzionato, ho trovato lo snippet funzionante per Gradle (gradle-4.10.2-all.zip)

Errore:

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

Usa questo gradle.buildframmento di codice di seguito per risolvere il problema precedente in IntelliJ o STS o eclissare qualsiasi cosa.

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

0

Quante persone tristi sopra, ci sono molti plugin per gradle eseguire un bypass in questo problema come:

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

o

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

Ma la soluzione migliore che ho trovato è stata uccidere il processo JVM e tutto è fatto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.