CreateProcess error = 206, Nama file atau ekstensi terlalu panjang saat menjalankan metode main ()

99

Saya mengalami kesalahan ini di gerhana helios:

Terjadi pengecualian saat menjalankan baris perintah. Tidak dapat menjalankan program "C: \ Program Files (x86) \ Java \ jre6 \ bin \ javaw.exe" (dalam direktori "C: \ Users \ motiver \ helios_workspace \ TimeTracker"): CreateProcess error = 206, Nama file atau ekstensi adalah terlalu panjang

Saya meneliti sedikit tetapi sebagian besar masalah terkait dengan DataNucleus saat bekerja di Google App Engine. Tapi saya tidak menggunakan apapun yang berhubungan dengan Google App Engine dari jarak jauh. Saya melakukan proyek kecil dengan Servlet 3.0 di JBOSS 6. Saya menggunakan Hibernate 4.1.2 untuk ORM dan RESTEasy untuk mengekspos layanan web. Saya membuat file util yang memiliki metode main () yang pada dasarnya menjatuhkan dan membuat ulang skema. Saya menjalankan metode main () ketika saya membutuhkan database yang bersih untuk tujuan pengujian. Ini berfungsi dengan baik pada Tomcat 7 tetapi berhenti berfungsi ketika saya pindah ke JBoss 6.

Petunjuk atau solusi apa pun akan sangat dihargai.

penggerak
sumber
Saya ingin memahami apakah C:\Program Files (x86)\Java\jre6\bin\javaw.exepanjang atau yang lainnya C:\Users\motiver\helios_workspace\TimeTracker. Saya juga mengalami masalah yang sama.
Siva R
Posterity: Saya memiliki situasi yang sama tetapi, dengan aplikasi perusahaan sederhana yang digunakan di WLS dan klien dari Eclipse. Yang saya perhatikan adalah classpath sangat besar karena Eclipse, secara default, termasuk seluruh pustaka WLS (semua toples). Saya menghapusnya dan menambahkan, hanya, weblogic.jar (hanya diperlukan). Setelah itu, itu bekerja dengan baik. Jadi, menurut pengamatan saya, hapus saja stoples yang tidak perlu.
lupchiazoem

Jawaban:

50

Tidak ada solusi sederhana (seperti dalam beberapa klik atau perintah sederhana) untuk masalah ini.

Mengutip dari beberapa jawaban dalam laporan bug ini di Eclipse.org , berikut adalah solusinya. Pilih salah satu yang paling tidak menyakitkan bagi Anda:

  • Kurangi jalur kelas
  • Gunakan direktori, bukan file jar
  • Gunakan file jar yang dikemas yang berisi semua toples lainnya, gunakan variabel classpath di dalam file manifes untuk menunjuk ke toples lain
  • Gunakan pemuat kelas khusus yang membaca jalur kelas dari file konfigurasi
  • Coba gunakan salah satu patch terlampir di dokumen laporan bug
  • Gunakan pembungkus sendiri misalnya semut

Pembaruan : Setelah Juli 2014, ada cara yang lebih baik (terima kasih kepada jawaban @ Brad-Mace di bawah ini :

Jika Anda telah membuat file build Anda sendiri alih-alih menggunakan Project -> Generate Javadocs, maka Anda dapat menambahkan useexternalfile="yes"tugas Javadoc, yang dirancang khusus untuk mengatasi masalah ini.

espinchi
sumber
16
Bagaimana IntelliJ tidak mengalami masalah ini jika itu sepenuhnya karena panjang classpath yang digunakan saat meluncurkan JVM?
nitind
1
Ini mungkin hanya masalah gerhana, saya dapat menjalankan aplikasi menggunakan maven.
surajz
3
@nitind "Dalam IntelliJ IDEA mereka mengganti kelas utama dengan kelas yang dihasilkan. Ini berisi classpath hardcode dan kode untuk meluncurkan kelas utama asli." Diambil dari bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8
Chobicus
2
Di tahun 2014, jawaban ini salah dan jawaban dari @Brad Mace benar.
Bananeweizen
5
"Kurangi jalur kelas" adalah petunjuk yang bagus, tetapi izinkan saya menjelaskan sedikit tentang ini: Dalam kasus saya, saya mencoba membangun proyek maven, dan -classpathargumen dibuat untuk memuat semua dependensi. Jadi, sesuatu seperti ini keluar: C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more]. Memindahkan cache repo maven lokal saya untuk D:\m2melakukan trik: Classpath menyusut menjadi D:\m2\…;D:\m2\…- bingo! Ingatlah untuk mengatur localRepositoryjalur di konfigurasi maven Anda.
ThomasR
18

Jika Anda membuat sendiri membangun file daripada menggunakan Project -> Generate JavadocsAnda dapat menambahkan useexternalfile="yes"ke javadoctugas, yang dirancang khusus untuk memecahkan masalah ini.

Brad Mace
sumber
1
Hai - bagaimana tepatnya cara menambahkan ini?
Prateek Narendra
@PrateekNarendra Anda akan menambahkannya di ant buildfile Anda (build.xml): ant.apache.org/manual/Tasks/javadoc.html
Brad Mace
17

Saya menghadapi masalah ini hari ini dan saya dapat menyelesaikannya menggunakan plugin Gradle ini

Ini url githubnya

JIKA Anda, seperti saya, tidak tahu apa itu Gradle tetapi perlu menjalankan backend untuk melakukan pekerjaan front end Anda, yang perlu Anda lakukan adalah menemukan file build.gradle yang dipanggil untuk memulai server BE Anda dan menambahkannya ke atas:

plugins {
  id "ua.eshepelyuk.ManifestClasspath" version "1.0.0"
}
Alejandro B.
sumber
3
Sekarang saya mendapatkan "Nama kelas utama belum dikonfigurasi dan tidak dapat diselesaikan", meskipun telah disetelattributes["Main-Class"]
Anton3
2
Saya mencoba menggunakan plugin tetapi tidak ada efek. Masalah masih datang. Mohon saran
amarnathpatel
8

Menjawab pertanyaan saya sendiri di sini agar solusinya tidak terkubur dalam komentar. Saya mengekspor proyek sebagai jar yang dapat dijalankan dari dalam gerhana dan melakukan baris perintah "java -jar MyJar.jar" dan itu berfungsi dengan baik

penggerak
sumber
5

Ini bukan khusus untuk gerhana, tapi cara saya menyiasatinya adalah dengan membuat tautan simbolis ke repositori maven saya dan mengarahkannya ke sesuatu seperti "C: \ R". Kemudian saya menambahkan yang berikut ini ke file settings.xml saya:

<localRepository>C:\R</localRepository>

Jalur repositori maven berkontribusi pada masalah panjang di mesin windows saya.

Shygar
sumber
5

** masukkan deskripsi gambar di sini **

Di intellij ada opsi untuk 'mempersingkat baris perintah', pilih 'JAR manifest' atau '@argFiles' akan menyelesaikan masalah, pada dasarnya itu akan menempatkan jalur kelas Anda yang panjang ke dalam file jar atau file temp

actan
sumber
4

Pertanyaan sudah tua, tapi masih valid. Saya sering menjumpai situasi ini setiap kali anggota baru bergabung dengan tim saya atau segmen kode baru ditambahkan ke kode yang ada. Solusi sederhana yang kami ikuti adalah "Mengurangi jalur kelas" dengan memindahkan direktori ke atas.

Seperti pertanyaan yang disebutkan, ini tidak spesifik untuk gerhana. Saya menemukan masalah ini di IntelliJ Idea 14 dan 2018 juga.

Setelah penelitian yang panjang, saya menemukan solusinya adalah dengan mengatur

garpu = salah

di javc file build semut.

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

Beginilah tampilan semut saya sekarang. Untuk mempelajari lebih lanjut tentang garpu, lihat dokumentasi semut.

Don D
sumber
Ini adalah jawaban efektif f ** king yang saya temukan. Terima kasih
huuthang
3

Dalam laporan bug Bug 327193 dianggap sudah diperbaiki, tetapi itu terjadi pada saya baru-baru ini dengan Eclipse Kepler 4.3.2.

Silakan unduh patch untuk Eclipse Juno atau yang lebih baru:

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

  1. Setelah mendownload kembali eclipse / plugins / org.eclipse.jdt.launching_3. *. Jar
  2. Salin dan tempel kelas dalam tambalan ke org.eclipse.jdt.launching JAR (ganti file yang ada).
  3. Mulai ulang Eclipse.
Maciej Dzikowicki
sumber
Ini berhasil untuk saya. Perhatikan bahwa menerapkan ini menghapus instalasi Java JDK saya dari JRE yang Terinstal. Saya harus menambahkannya lagi. Hanya 1 instalasi JRE yang bertahan.
Joetjah
Lucunya, Anda mencari jawaban tentang SO untuk masalah Anda dan salah satu jawabannya adalah dari orang yang pernah belajar / bekerja dengan Anda :)
Michał Szkudlarek
1

Coba ini:

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

pengguna3272405
sumber
1

Untuk mengatasinya:

Jika Anda menggunakan Eclipse:

Pindahkan repositori .m2 ke

c: \ Buka Eclipse> Windows / Preferensi / Maven / Pengaturan Pengguna -> Buat pengaturan Anda sendiri.xml dengan kontennya:

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

Jika Anda menggunakan IntelliJ: Buka IntelliJ> klik tombol kanan mouse di "pom.xml"> maven> buat "settings.xml"

dengan isinya:

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

Saya mendapatkan kesalahan yang sama, saat memanggil Maven.

Akar penyebab masalah saya adalah classpath sangat besar. Memperbarui classpath memperbaiki masalah.

Ada beberapa cara untuk mengupdate classpath yang besar seperti yang disebutkan di sini: Bagaimana cara menyetel classpath Java yang panjang di Windows?

  1. Gunakan karakter pengganti
  2. File Argumen
  3. Stoples

Karena saya menggunakan Intellij, mereka menyediakan opsi untuk menggunakan File Argumen yang saya gunakan.

Sandeep Jindal
sumber
5
Updating the classpath- bagaimana caranya?
Woland
1
Jawaban yang sangat samar. Bagaimana sih Anda memperbarui classpath?
Testilla
Ada beberapa cara untuk mengupdate classpath misalnya wildcard.
Sandeep Jindal
1

Coba tambahkan ini dalam gradle version 4.10.xfile build.gradle ( ) dan periksa apakah com.xxx.MainClassini adalah kelas tempat metode utama Anda berada:

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

Perubahan di atas harus menyelesaikan masalah, ada cara lain menggunakan skrip di run.shbawah ini dapat memperbaiki masalah ini, tetapi ini akan lebih pada perbaikan baris perintah, bukan di IntelliJ untuk diluncurkan gradle bootRun.

ravibeli.dll
sumber
0

itu terjadi karena DataNucleus terkadang menimpa Argumen dengan banyak jalur.

Anda harus menimpanya dengan ini:

-enhancerName ASM -api JDO -pu MediaToGo

Semoga membantu Anda!

Rodrigohsb
sumber
0

Saya mendapatkan kesalahan di bawah saat menjalankan ' ant deploy '

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

Perbaiki dengan menjalankan ' ant clean ' sebelumnya.

maoyang
sumber
1
Bagaimana jika saya menggunakan Android Studio? Saya juga menerima masalah yang sama
portfoliobuilder
Saya menggunakan intelliJ
kn3l
0

Saya mendapat kesalahan yang sama di studio android. Saya dapat mengatasinya dengan menjalankan Build -> Clean Project di IDE.

Kiran
sumber
0

Ini karena nama direktori proyek Anda yang panjang, yang memberi Anda nama yang sangat panjang CLASSPATH. Entah Anda perlu mengurangi jars yang ditambahkan di CLASSPATH(pastikan hanya menghapus jars yang tidak diperlukan) Atau cara terbaik adalah dengan mengurangi direktori proyek dan mengimpor proyek lagi. Ini akan mengurangi CLASSPATH. Itu berhasil untuk saya.

Deepesh kumar
sumber
0

Saya memiliki masalah yang sama, tetapi saya menggunakan netbeans sebagai gantinya.
Saya telah menemukan solusi jadi saya berbagi di sini karena saya belum menemukan ini di mana pun, jadi jika Anda memiliki masalah ini di netbeans, coba ini:
(nama mungkin tidak aktif karena netbeans saya dalam bahasa Portugis) Proyek klik kanan> properti > build> compiling> Hapus centang run compilation pada VM eksternal.

Régis B.
sumber
0

Saya mendapat kesalahan yang sama. Solusi yang sudah dicoba seperti membersihkan, membangun kembali, invalidateCache, retart dll tetapi tidak ada yang berhasil.

Saya baru saja membuat folder baru dengan nama pendek dan menyalin semua file (folder aplikasi, file gradle dll) di folder baru. Aplikasi yang dibuka di studio android dan berfungsi dengan baik.

Tara
sumber
0

Dalam kasus saya kesalahan itu muncul karena versi java sistem berbeda dari versi java intellijj / eclipse. Sistem dan pengguna memiliki versi java yang berbeda. Jika Anda mengkompilasi kode Anda menggunakan satu versi dan mencoba menjalankan menggunakan versi yang berbeda, kesalahan akan muncul. Versi java pengguna adalah 1.8

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

Singkat cerita, pastikan kode Anda dikompilasi dan dijalankan dengan versi java yang sama.

zee
sumber
0

Untuk memperbaiki kesalahan di bawah ini, saya melakukan penelitian yang cukup, tidak mendapatkan solusi yang bagus, saya menyiapkan skrip ini dan berfungsi dengan baik, berpikir untuk dibagikan kepada publik dan memanfaatkannya serta menghemat waktu di sana.

CreateProcess error = 206, Nama file atau ekstensi terlalu panjang

Jika Anda menggunakan fitur build Gradle, dan file yang dapat dieksekusi ditempatkan di direktori build / libs aplikasi Anda. run.sh-> buat file ini di direktori root proyek Anda, dan salin skrip di bawah ini di dalamnya, lalu buka git bash dan ketik run.sh lalu enter. Semoga ini membantu!

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

Semoga ini membantu!!

ravibeli.dll
sumber
0

Saya menggunakan plugin gradle versi lama dan ini plugin menyelesaikan masalah untuk saya.

Penggunaan (periksa sumber untuk lebih jelasnya):

Buat cuplikan skrip untuk plugin DSL untuk Gradle 2.1 dan yang lebih baru

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

Buat cuplikan skrip untuk digunakan dalam versi Gradle yang lebih lama atau jika konfigurasi dinamis diperlukan

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

Di mesin Windows, ada batasan nama file jar / panjang jalur di baris perintah, karena Anda melihat pesan kesalahan di bawah ini, saya mencoba banyak mencari, bahkan saya mencoba menerapkan solusi di atas, beberapa alasan, itu tidak berhasil, saya menemukan cuplikan yang berfungsi untuk Gradle (gradle-4.10.2-all.zip)

Kesalahan:

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

Gunakan gradle.buildpotongan kode di bawah ini untuk memperbaiki masalah di atas di IntelliJ atau STS, atau gerhana apa pun.

Perbaikan Kode 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.dll
sumber
0

Berapa banyak orang yang sedih di atas, ada banyak plugin yang harus dijalankan oleh gradle dalam masalah ini seperti:

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

atau

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

Tetapi solusi yang lebih baik yang saya temukan adalah menghentikan proses JVM dan semuanya selesai.

Ivan Rodrigues
sumber