CreateProcess error = 206, el nombre de archivo o la extensión es demasiado largo cuando se ejecuta el método main ()

98

Tengo este error en eclipse helios:

Se produjo una excepción al ejecutar la línea de comando. No se puede ejecutar el programa "C: \ Archivos de programa (x86) \ Java \ jre6 \ bin \ javaw.exe" (en el directorio "C: \ Users \ motiver \ helios_workspace \ TimeTracker"): CreateProcess error = 206, el nombre de archivo o la extensión es demasiado largo

Investigué un poco, pero la mayoría de los problemas estaban relacionados con DataNucleus cuando trabajaba en Google App Engine. Pero no estoy usando nada relacionado remotamente con Google App Engine. Estoy haciendo un pequeño proyecto con Servlet 3.0 en JBOSS 6. Estoy usando Hibernate 4.1.2 para ORM y RESTEasy para exponer un servicio web. Creé un archivo util que tiene un método main () que básicamente suelta y recrea el esquema. Ejecuto los métodos main () cuando necesito una base de datos limpia para realizar pruebas. Funcionó bien en Tomcat 7, pero dejó de funcionar cuando me mudé a JBoss 6.

Cualquier sugerencia o solución será muy apreciada.

motivador
fuente
Quiero entender si C:\Program Files (x86)\Java\jre6\bin\javaw.exees largo o el otro C:\Users\motiver\helios_workspace\TimeTracker. También tengo el mismo problema.
Siva R
Posteridad: Tuve una situación similar, pero con una aplicación empresarial simple implementada en WLS y un cliente de Eclipse. Lo que noté fue que la ruta de clases era enorme, ya que Eclipse, de forma predeterminada, incluía toda la biblioteca WLS (todos los archivos jar). Lo eliminé y agregué, solo, weblogic.jar (solo requerido). Después, funcionó bien. Entonces, según mi observación, simplemente elimine los frascos innecesarios.
lupchiazoem

Respuestas:

49

No existe una solución simple (como en un par de clics o un comando simple) para este problema.

Citando algunas respuestas en este informe de error en Eclipse.org , estas son las soluciones. Elija el que le resulte menos doloroso:

  • Reducir la ruta de clases
  • Utilice directorios en lugar de archivos jar
  • Use archivos jar empaquetados que contengan todos los demás jar, use la variable classpath dentro del archivo de manifiesto para señalar los otros jar
  • Utilice un cargador de clases especial que lee la ruta de clase de un archivo de configuración
  • Intente utilizar uno de los parches adjuntos en el documento de informe de errores
  • Utilice un envoltorio propio, por ejemplo, hormiga

Actualización : después de julio de 2014, hay una mejor manera (gracias a la respuesta de @ Brad-Mace a continuación :

Si ha creado su propio archivo de compilación en lugar de usarlo Project -> Generate Javadocs, puede agregarlo useexternalfile="yes"a la tarea Javadoc, que está diseñada específicamente para resolver este problema.

espinchi
fuente
16
¿Cómo podría IntelliJ no tener este problema si se debe completamente a la longitud de la ruta de clase utilizada al iniciar la JVM?
nitind
1
Esto podría ser solo un problema de eclipse, puedo ejecutar la aplicación usando maven.
surajz
3
@nitind "En IntelliJ IDEA sustituyen la clase principal por una generada. Contiene la ruta de clases codificada y el código para lanzar la clase principal original". Tomado de bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8
Chobicus
2
En 2014, esta respuesta es incorrecta y la de @Brad Mace es correcta.
Bananeweizen
5
"Reducir la ruta de clase" es una buena sugerencia, pero permítanme desarrollar un poco sobre esto: en mi caso, intenté construir un proyecto maven y el -classpathargumento se generó para contener todas las dependencias. Por lo tanto, algo como esto salió: C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more]. Mover mi caché de repositorios maven local a D:\m2hizo el truco: Classpath se redujo a D:\m2\…;D:\m2\…- ¡bingo! Recuerde establecer la localRepositoryruta en su configuración de maven.
ThomasR
18

Si crea su propio archivo de compilación en lugar de usarlo Project -> Generate Javadocs, puede agregarlo useexternalfile="yes"a la javadoctarea, que está diseñada específicamente para resolver este problema.

Brad Mace
fuente
1
Hola, ¿exactamente cómo agrego esto?
Prateek Narendra
@PrateekNarendra lo agregarías en tu archivo de compilación de hormigas (build.xml): ant.apache.org/manual/Tasks/javadoc.html
Brad Mace
17

Me enfrenté a este problema hoy y yo era capaz de resolverlo usando este plugin Gradle

Su URL de github es esta

SI usted, como yo, no tiene idea de lo que es Gradle pero necesita ejecutar un backend para hacer su trabajo de front-end, lo que debe hacer es encontrar el archivo build.gradle que se está llamando para iniciar su servidor BE y agregarlo a la parte superior:

plugins {
  id "ua.eshepelyuk.ManifestClasspath" version "1.0.0"
}
Alejandro B.
fuente
3
Ahora obtengo "El nombre de la clase principal no se ha configurado y no se pudo resolver", a pesar de haberlo configuradoattributes["Main-Class"]
Anton3
1
Intenté usar el complemento pero sin efecto. El problema aún está por llegar. Por favor sugiera
amarnathpatel
8

Respondiendo mi propia pregunta aquí para que la solución no quede enterrada en los comentarios. Exporté el proyecto como un jar ejecutable desde dentro de eclipse e hice una línea de comando "java -jar MyJar.jar" y funciona perfectamente bien

motivador
fuente
5

Esto no es específicamente para eclipse, pero la forma en que lo solucioné fue creando un enlace simbólico a mi repositorio maven y apuntándolo a algo como "C: \ R". Luego agregué lo siguiente a mi archivo settings.xml:

<localRepository>C:\R</localRepository>

La ruta del repositorio de maven contribuía a los problemas de longitud en mi máquina con Windows.

Shygar
fuente
5

** ingrese la descripción de la imagen aquí **

En intellij hay una opción para 'acortar la línea de comando', seleccione 'manifiesto JAR' o '@argFiles' resolvería el problema, básicamente pondrá su ruta de clase larga en un archivo jar o un archivo temporal

actuar
fuente
4

La pregunta es antigua, pero sigue siendo válida. Me encuentro con esta situación a menudo cada vez que un nuevo miembro se une a mi equipo o se agrega un nuevo segmento de código al código existente. La solución simple que seguimos es "Reducir la ruta de clases" subiendo los directorios.

Como se mencionó la pregunta, esto no es específico del eclipse. Encontré este problema en IntelliJ Idea 14 y 2018 también.

Después de una larga investigación, encontré que la solución es establecer el

tenedor = falso

en javc del archivo de construcción de hormigas.

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

Así es como se ve mi javac de compilación de hormigas ahora. Para obtener más información sobre fork, consulte la documentación de ant.

Don D
fuente
Esta es la maldita respuesta efectiva que estoy encontrando. Gracias
huuthang
3

En el informe de error Bug 327193 se considera arreglado, pero me sucedió recientemente con Eclipse Kepler 4.3.2.

Descargue el parche para Eclipse Juno o más reciente:

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

  1. Después de descargar, haga una copia de seguridad de eclipse / plugins / org.eclipse.jdt.launching_3. *. Jar existente
  2. Copie y pegue las clases en el parche en org.eclipse.jdt.launching JAR (reemplace los archivos existentes).
  3. Reinicie Eclipse.
Maciej Dzikowicki
fuente
Esto funcionó para mí. Tenga en cuenta que la aplicación de esto eliminó mis instalaciones de JDK Java de los JRE instalados. Tuve que volver a agregarlos nuevamente. Solo persistió 1 instalación de JRE.
Joetjah
Es curioso, buscas respuestas en SO sobre tu problema y una de las respuestas es de una persona con la que
solías
1

Prueba esto:

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

usuario3272405
fuente
1

Para solucionarlo:

Si está utilizando Eclipse:

Mover el repositorio .m2 a

c: \ Vaya a Eclipse> Windows / Preferences / Maven / User Settings -> Cree su propio archivo setting.xml con su contenido:

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

Si está utilizando IntelliJ: Vaya a IntelliJ> haga clic con el botón derecho del mouse en "pom.xml"> maven> cree "settings.xml"

con su contenido:

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

Tengo el mismo error al invocar a Maven.

La causa principal de mi problema fue que classpathera muy grande. La actualización de la ruta de clases solucionó el problema.

Hay varias formas de actualizar la ruta de clase grande como se menciona en esto: ¿Cómo configurar una ruta de clase Java larga en Windows?

  1. Usa comodines
  2. Archivo de argumentos
  3. Tarro de ruta

Como estoy usando Intellij, brindan la opción de usar el archivo de argumentos que usé.

Sandeep Jindal
fuente
5
Updating the classpath- ¿cómo?
Woland
1
Una respuesta muy vaga. ¿Cómo diablos actualizaste classpath?
Testilla
Hay varias formas de actualizar classpath, por ejemplo, comodín.
Sandeep Jindal
1

Intente agregar esto en el gradle version 4.10.xarchivo build.gradle ( ) y verifique que com.xxx.MainClassesta es la clase donde reside su método principal:

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

El cambio anterior debe resolver el problema, hay otra forma en que el run.shsiguiente script podría solucionar este problema, pero será más una solución de línea de comandos, no en IntelliJ para iniciar gradle bootRun.

ravibeli
fuente
0

sucede debido a que DataNucleus a veces sobrescribe los argumentos con muchas rutas.

Tienes que sobrescribirlos con esto:

-enhancerName ASM -api JDO -pu MediaToGo

¡Espero ayudarte!

Rodrigohsb
fuente
0

La respuesta válida de este hilo fue la respuesta correcta para mi caso especial. Especificar la ruta de la carpeta ORM para datanucleus ciertamente reduce la compilación de la ruta de Java.

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

smora
fuente
0

Recibí el siguiente error cuando ejecuto ' ant deploy '

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

Se corrigió ejecutando ' ant clean ' antes.

maoyang
fuente
1
¿Qué pasa si estoy usando Android Studio? También recibo este mismo problema
portfoliobuilder
Estoy usando intelliJ
kn3l
0

Recibí el mismo error en Android Studio. Pude resolverlo ejecutando Build -> Clean Project en el IDE.

Kiran
fuente
0

Esto se debe a que el nombre del directorio de su proyecto es largo, lo que le da un nombre muy largo CLASSPATH. O necesita reducir los frascos agregados en CLASSPATH(asegúrese de eliminar solo los frascos innecesarios) o la mejor manera es reducir el directorio del proyecto e importar el proyecto nuevamente. Esto reducirá el CLASSPATH. Funcionó para mí.

Deepesh Kumar
fuente
0

Tuve el mismo problema, pero en su lugar estaba usando netbeans.
Encontré una solución, así que la estoy compartiendo aquí porque no he encontrado esto en ninguna parte, así que si tiene este problema en netbeans, intente esto:
(los nombres pueden estar desactivados ya que mi netbeans está en portugués) Haga clic derecho en proyecto> propiedades > compilar> compilar> Desmarque ejecutar compilación en VM externa.

Régis B.
fuente
0

Tengo el mismo error. Probé soluciones como limpiar, reconstruir, invalidar Caché, retart, etc. pero nada funciona.

Acabo de crear una nueva carpeta con un nombre corto y copié todos los archivos (carpeta de la aplicación, archivos gradle, etc.) en una nueva carpeta. Aplicación abierta en Android Studio y está funcionando bien.

Tara
fuente
0

En mi caso, el error se mostraba porque la versión de Java del sistema era diferente de la versión de Java de intellijj / eclipse. El sistema y el usuario tenían versiones de java diff. Si compila su código usando una versión y trató de ejecutarlo usando una versión diferente, saldrá un error. La versión de Java del usuario es 1.8

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

En pocas palabras, asegúrese de que su código esté compilado y ejecutado por la misma versión de Java.

zee
fuente
0

Para solucionar este error a continuación, investigué lo suficiente, no obtuve una gran solución, preparé este script y está funcionando bien, pensé en compartirlo con el público y hacer uso de él y ahorrar tiempo.

CreateProcess error = 206, el nombre de archivo o la extensión es demasiado largo

Si está utilizando la herramienta de compilación Gradle y el archivo ejecutable se coloca en el directorio build / libs de su aplicación. run.sh-> cree este archivo en el directorio raíz de su proyecto y copie el siguiente script en él, luego vaya a git bash y escriba run.sh y luego ingrese. ¡Espero que esto ayude!

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

¡¡Espero que esto ayude!!

ravibeli
fuente
0

Estoy usando una versión heredada de complementos de gradle y este complemento me resolvió el problema.

Uso (consulte la fuente para obtener más detalles):

Cree un fragmento de script para complementos DSL para Gradle 2.1 y versiones posteriores

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

Cree un fragmento de secuencia de comandos para usar en versiones anteriores de Gradle o cuando se requiera una configuración dinámica

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
fuente
0

En una máquina con Windows, hay una limitación del nombre del archivo jar / longitud de la ruta en la línea de comandos, debido a lo cual puede ver el siguiente mensaje de error, intenté buscar mucho, incluso intenté aplicar la solución anterior, por alguna razón, no funcionó, encontré el fragmento de trabajo para Gradle (gradle-4.10.2-all.zip)

Error:

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

Utilice este gradle.buildfragmento de código a continuación para solucionar el problema anterior en IntelliJ o STS, o eclipsar cualquier cosa.

Corrección de código 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)
    }
}
ravibeli
fuente
0

Cuántas personas están tristes arriba, hay muchos complementos para que gradle ejecute un by pass en este problema como:

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

o

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

Pero la mejor solución que encontré fue matar el proceso JVM y todo está hecho.

Ivan Rodrigues
fuente