Lỗi CreateProcess = 206, Tên tệp hoặc phần mở rộng quá dài khi chạy phương thức main ()


98

Tôi gặp lỗi này trong helios nhật thực:

Đã xảy ra ngoại lệ khi thực thi dòng lệnh. Không thể chạy chương trình "C: \ Program Files (x86) \ Java \ jre6 \ bin \ javaw.exe" (trong thư mục "C: \ Users \ motiver \ helios_workspace \ TimeTracker"): Lỗi CreateProcess = 206, Tên tệp hoặc phần mở rộng là quá lâu

Tôi đã nghiên cứu một chút nhưng hầu hết các vấn đề đều liên quan đến DataNucleus khi làm việc trên Google App Engine. Nhưng tôi không sử dụng bất cứ thứ gì liên quan từ xa đến Google App Engine. Tôi đang thực hiện một dự án nhỏ với Servlet 3.0 trên JBOSS 6. Tôi đang sử dụng Hibernate 4.1.2 cho ORM và RESTEasy để hiển thị một dịch vụ web. Tôi đã tạo một tệp sử dụng có phương thức main () về cơ bản loại bỏ và tạo lại lược đồ. Tôi chạy các methos main () khi tôi cần một cơ sở dữ liệu sạch cho mục đích thử nghiệm. Nó hoạt động tốt trên Tomcat 7 nhưng nó ngừng hoạt động khi tôi chuyển sang JBoss 6.

Bất kỳ gợi ý hoặc giải pháp sẽ được đánh giá rất cao.




Tôi muốn hiểu liệu C:\Program Files (x86)\Java\jre6\bin\javaw.exelà dài hay khác C:\Users\motiver\helios_workspace\TimeTracker. Tôi cũng đang gặp vấn đề tương tự.
Siva R

Posterity: Tôi đã gặp trường hợp tương tự nhưng với một ứng dụng doanh nghiệp đơn giản được triển khai trên WLS và ứng dụng khách từ Eclipse. Điều tôi nhận thấy là đường dẫn classpath rất lớn vì Eclipse, theo mặc định, bao gồm toàn bộ thư viện WLS (tất cả các lọ). Tôi đã xóa nó và thêm, chỉ, weblogic.jar (chỉ bắt buộc). Sau đó, nó hoạt động tốt. Vì vậy, theo quan sát của tôi, chỉ cần loại bỏ các lọ không cần thiết.
lupchiazoem

Câu trả lời:


49

Không có giải pháp đơn giản (như trong một vài cú nhấp chuột hoặc một lệnh đơn giản) cho vấn đề này.

Trích dẫn từ một số câu trả lời trong báo cáo lỗi này trên Eclipse.org , đây là những cách giải quyết. Chọn một cái mà bạn ít đau nhất:

  • Giảm classpath
  • Sử dụng thư mục thay vì tệp jar
  • Sử dụng tệp jar được đóng gói chứa tất cả các lọ khác, sử dụng biến classpath bên trong tệp kê khai để trỏ đến các lọ khác
  • Sử dụng trình tải lớp đặc biệt đọc classpath từ tệp cấu hình
  • Cố gắng sử dụng một trong các bản vá đính kèm trong tài liệu báo cáo lỗi
  • Sử dụng một trình bao bọc riêng, ví dụ như kiến

Cập nhật : Sau tháng 7 năm 2014, có một cách tốt hơn (nhờ câu trả lời của @ Brad-Mace bên dưới :

Nếu bạn đã tạo tệp xây dựng của riêng mình thay vì sử dụng Project -> Generate Javadocs, thì bạn có thể thêm useexternalfile="yes"vào tác vụ Javadoc, được thiết kế đặc biệt để giải quyết vấn đề này.


16
Làm thế nào để IntelliJ không gặp sự cố này nếu nó hoàn toàn do độ dài của đường dẫn phân nhánh được sử dụng khi khởi chạy JVM?
nitind

1
Đây có thể chỉ là sự cố nhật thực, tôi có thể chạy ứng dụng bằng maven.
surajz

3
@nitind "Trong IntelliJ IDEA, họ thay thế lớp chính bằng một lớp được tạo. Nó chứa đường dẫn mã cứng và mã để khởi chạy lớp chính ban đầu." Lấy từ bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8
Chobicus

2
Vào năm 2014, câu trả lời này là sai và câu trả lời của @Brad Mace là đúng.
Bananeweizen

5
"Giảm classpath" là một gợi ý hay, nhưng hãy để tôi nói rõ hơn một chút về điều này: Trong trường hợp của tôi, tôi đã cố gắng xây dựng một dự án maven và -classpathđối số được tạo để chứa tất cả các phụ thuộc. Vì vậy, một cái gì đó như thế này xuất hiện: C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more]. Di chuyển bộ đệm ẩn repo maven cục bộ của tôi để D:\m2thực hiện thủ thuật: Classpath thu nhỏ xuống D:\m2\…;D:\m2\…- bingo! Hãy nhớ đặt localRepositoryđường dẫn trong cấu hình maven của bạn.
ThomasR

18

Nếu bạn tạo tệp xây dựng của riêng mình thay vì sử dụng, Project -> Generate Javadocsbạn có thể thêm useexternalfile="yes"vào javadoctác vụ, được thiết kế đặc biệt để giải quyết vấn đề này.


1
Xin chào - chính xác thì làm cách nào để thêm cái này?
Prateek Narendra

@PrateekNarendra bạn sẽ thêm nó vào tệp xây dựng kiến ​​của mình (build.xml): ant.apache.org/manual/Tasks/javadoc.html
Brad Mace

17

Tôi đã gặp phải vấn đề này hôm nay và tôi đã có thể giải quyết nó bằng cách sử dụng plugin Gradle này

Đây là url github

NẾU bạn, giống như tôi, không biết Gradle là gì nhưng cần chạy chương trình phụ trợ để thực hiện công việc giao diện người dùng của mình, những gì bạn cần làm là tìm tệp build.gradle đang được gọi để khởi động máy chủ BE của bạn và thêm tệp này vào đỉnh:

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

3
Bây giờ tôi nhận được "Tên lớp chính chưa được định cấu hình và nó không thể được giải quyết", mặc dù đã đặtattributes["Main-Class"]
Anton3

1
Tôi đã thử sử dụng plugin nhưng không có tác dụng. Vấn đề vẫn đang tiếp diễn. Xin đề nghị
amarnathpatel

8

Trả lời câu hỏi của riêng tôi ở đây để giải pháp không bị chôn vùi trong các bình luận. Tôi đã xuất dự án dưới dạng một jar có thể chạy được từ bên trong eclipse và thực hiện một dòng lệnh "java -jar MyJar.jar" và nó hoạt động hoàn toàn tốt



5

Điều này không dành riêng cho nhật thực, nhưng cách tôi giải quyết vấn đề này là tạo một liên kết tượng trưng đến kho lưu trữ maven của tôi và trỏ nó đến một cái gì đó như "C: \ R". Sau đó, tôi đã thêm phần sau vào tệp settings.xml của mình:

<localRepository>C:\R</localRepository>

Đường dẫn kho lưu trữ maven đã góp phần gây ra các vấn đề về độ dài trong máy tính Windows của tôi.


5

** nhập mô tả hình ảnh ở đây **

Trong intellij có một tùy chọn để 'rút ngắn dòng lệnh', chọn 'tệp kê khai JAR' hoặc '@argFiles' sẽ giải quyết được vấn đề, về cơ bản nó sẽ đặt đường dẫn lớp dài của bạn vào tệp jar hoặc tệp tạm thời


4

Câu hỏi đã cũ, nhưng vẫn còn giá trị. Tôi thường xuyên gặp trường hợp này bất cứ khi nào một thành viên mới tham gia vào nhóm của tôi hoặc một đoạn mã mới được thêm vào mã hiện có. Cách giải quyết đơn giản mà chúng tôi làm theo là "Giảm classpath" bằng cách di chuyển lên các thư mục.

Như câu hỏi đã đề cập, điều này không đặc trưng cho nhật thực. Tôi cũng đã gặp vấn đề này trong IntelliJ Idea 14 và 2018.

Sau một thời gian dài nghiên cứu, tôi thấy giải pháp là đặt

ngã ba = sai

trong javc của tệp xây dựng kiến.

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

Đây là cách kiến ​​tạo javac của tôi trông bây giờ. Để tìm hiểu thêm về fork, vui lòng tham khảo tài liệu kiến.


Đây là câu trả lời hiệu quả của f ** king mà tôi đang tìm kiếm. Cảm ơn
huuthang

3

Trong báo cáo lỗi, lỗi 327193 được coi là đã sửa, nhưng nó xảy ra với tôi gần đây với Eclipse Kepler 4.3.2.

Vui lòng tải xuống bản vá cho Eclipse Juno hoặc mới hơn:

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

  1. Sau khi tải xuống, hãy sao lưu eclipse / plugins / org.eclipse.jdt.launching_3. *. Jar hiện có
  2. Sao chép và dán các lớp trong bản vá vào JAR org.eclipse.jdt.launching (thay thế các tệp hiện có).
  3. Khởi động lại Eclipse.

Điều này đã làm việc cho tôi. Lưu ý rằng việc áp dụng điều này đã xóa cài đặt Java JDK của tôi khỏi các JRE đã cài đặt. Tôi đã phải thêm lại chúng một lần nữa. Chỉ có 1 cài đặt JRE vẫn tồn tại.
Joetjah

Thật buồn cười, bạn tìm kiếm câu trả lời trên SO về vấn đề của bạn và một trong những câu trả lời là từ một người bạn từng học / làm việc cùng :)
Michał Szkudlarek


1

Để giải quyết nó:

Nếu bạn đang sử dụng Eclipse:

Di chuyển kho lưu trữ .m2 sang

c: \ Đi tới Eclipse> Windows / Preferences / Maven / User Settings -> Tạo setting của riêng bạn.xml với nội dung của nó:

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

Nếu bạn đang sử dụng IntelliJ: Đi tới IntelliJ> nhấp chuột phải vào "pom.xml"> maven> tạo "settings.xml"

với nội dung của nó:

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

1

Tôi đã gặp lỗi tương tự, trong khi gọi Maven.

Nguyên nhân gốc rễ cho vấn đề của tôi classpathlà rất lớn. Cập nhật classpath đã khắc phục sự cố.

Có nhiều cách để cập nhật classpath lớn như đã đề cập trong phần này: Làm thế nào để đặt một classpath Java dài trong Windows?

  1. Sử dụng ký tự đại diện
  2. Tệp đối số
  3. Bình vỗ

Vì tôi đang sử dụng Intellij, họ cung cấp tùy chọn sử dụng Tệp đối số mà tôi đã sử dụng.


5
Updating the classpath- làm sao?
Woland

1
Một câu trả lời rất mơ hồ. Làm thế quái nào mà bạn cập nhật classpath?
Testilla

Có nhiều cách để cập nhật classpath, ví dụ như ký tự đại diện.
Sandeep Jindal

1

Hãy thử thêm gradle version 4.10.xtệp này vào tệp build.gradle ( ) và kiểm tra xem đây có phải com.xxx.MainClasslà lớp nơi phương thức chính của bạn cư trú:

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

Thay đổi ở trên phải giải quyết sự cố, có một cách khác bằng cách sử dụng tập lệnh run.shbên dưới có thể khắc phục sự cố này, nhưng sẽ có nhiều bản sửa lỗi dòng lệnh hơn, không phải trong IntelliJ để khởi chạy gradle bootRun.


0

nó xảy ra do DataNucleus đôi khi ghi đè các Đối số bằng nhiều đường dẫn.

Bạn phải ghi đè chúng bằng cái này:

-enhancerName ASM -api JDO -pu MediaToGo

Mong giúp được bạn!



0

Tôi gặp lỗi bên dưới khi chạy ' kiến triển khai '

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

Đã sửa nó bằng cách chạy ' ant clean ' trước nó.


1
Điều gì sẽ xảy ra nếu tôi đang sử dụng Android Studio? Tôi cũng nhận được vấn đề tương tự này
portfoliobuilder

Tôi đang sử dụng intelliJ
kn3l

0

Tôi gặp lỗi tương tự trong studio android. Tôi đã có thể giải quyết nó bằng cách chạy Build -> Clean Project trong IDE.


0

Điều này là do tên thư mục dự án dài của bạn, mang lại cho bạn một cái tên rất dài CLASSPATH. Hoặc bạn cần phải giảm các bình được thêm vào CLASSPATH(đảm bảo chỉ loại bỏ các bình không cần thiết) Hoặc cách tốt nhất là giảm thư mục dự án và nhập lại dự án. Điều này sẽ làm giảm CLASSPATH. Nó đã làm việc cho tôi.


0

Tôi đã gặp vấn đề tương tự, nhưng tôi đã sử dụng netbeans thay thế.
Tôi đã tìm thấy giải pháp nên tôi đang chia sẻ ở đây vì tôi không tìm thấy điều này ở bất kỳ đâu, vì vậy nếu bạn gặp sự cố này trên netbeans, hãy thử cách này:
(tên có thể bị tắt vì netbeans của tôi bằng tiếng Bồ Đào Nha) Nhấp chuột phải vào dự án> thuộc tính > xây dựng> biên dịch> Bỏ chọn chạy biên dịch trên máy ảo bên ngoài.


0

Tôi cũng gặp lỗi tương tự. Đã thử các giải pháp như dọn dẹp, xây dựng lại, vô hiệu hóa Bộ nhớ cache, khởi động lại, v.v. nhưng không có gì hoạt động.

Tôi vừa tạo một thư mục mới với tên ngắn và sao chép tất cả các tệp (thư mục ứng dụng, tệp gradle, v.v.) trong thư mục mới. Đã mở ứng dụng trong studio android và nó hoạt động tốt.


0

Trong trường hợp của tôi, lỗi hiển thị do phiên bản java hệ thống khác với phiên bản java intellijj / eclipse. Hệ thống và người dùng có các phiên bản java khác nhau. Nếu bạn biên dịch mã của mình bằng một phiên bản và cố gắng chạy bằng một phiên bản khác, nó sẽ xảy ra lỗi. Phiên bản java người dùng là 1.8

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

Câu chuyện ngắn, hãy đảm bảo rằng mã của bạn được biên dịch và chạy bằng cùng một phiên bản java.



0

Để khắc phục lỗi bên dưới này, tôi đã nghiên cứu đủ cách, không tìm ra giải pháp tuyệt vời nào, tôi đã chuẩn bị script này và nó đang hoạt động tốt, tôi nghĩ rằng sẽ chia sẻ cho mọi người và tận dụng nó và tiết kiệm thời gian.

Lỗi CreateProcess = 206, Tên tệp hoặc phần mở rộng quá dài

Nếu bạn đang sử dụng công cụ xây dựng Gradle và tệp thực thi được đặt trong thư mục build / libs của ứng dụng của bạn. run.sh-> tạo tệp này trong thư mục gốc của dự án của bạn và sao chép tập lệnh bên dưới vào đó, sau đó truy cập git bash và gõ run.sh rồi nhập. Hi vọng điêu nay co ich!

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

Hi vọng điêu nay co ich!!


0

Tôi đang sử dụng phiên bản cũ của plugin gradle và cái này plugin giải quyết được vấn đề cho tôi.

Cách sử dụng (kiểm tra nguồn để biết thêm chi tiết):

Xây dựng đoạn mã tập lệnh cho các plugin DSL dành cho Gradle 2.1 trở lên

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

Tạo đoạn mã tập lệnh để sử dụng trong các phiên bản Gradle cũ hơn hoặc khi cần cấu hình động

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

Trong máy Windows, có một giới hạn về độ dài đường dẫn / tên tệp jar trong dòng lệnh, do đó bạn thấy thông báo lỗi bên dưới, tôi đã thử tìm kiếm rất nhiều, thậm chí tôi đã thử áp dụng giải pháp trên, một số lý do, nó không hoạt động, tôi đã tìm thấy đoạn mã hoạt động cho Gradle (gradle-4.10.2-all.zip)

Lỗi:

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

Sử dụng gradle.buildđoạn mã bên dưới này để khắc phục sự cố trên trong IntelliJ hoặc STS hoặc làm lu mờ mọi thứ.

Sửa lỗi mã 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

Bao nhiêu người buồn ở trên, có rất nhiều plugin để thực thi từng bước một trong vấn đề này như:

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

hoặc là

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

Nhưng giải pháp tốt hơn mà tôi tìm thấy là giết quá trình JVM và mọi thứ đã xong.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.