CreateProcess 오류 = 206, main () 메서드를 실행할 때 파일 이름 또는 확장자가 너무 깁니다.


99

이클립스 헬리오스 에이 오류가 있습니다.

명령 줄 실행 중에 예외가 발생했습니다. "C : \ Program Files (x86) \ Java \ jre6 \ bin \ javaw.exe"프로그램을 실행할 수 없습니다 ( "C : \ Users \ motiver \ helios_workspace \ TimeTracker"디렉토리) : CreateProcess error = 206, 파일 이름 또는 확장자는 다음과 같습니다. 너무 오래

약간 조사했지만 대부분의 문제는 Google App Engine에서 작업 할 때 DataNucleus와 관련이있었습니다. 하지만 Google App Engine과 관련된 것은 원격으로 사용하지 않습니다. JBOSS 6에서 Servlet 3.0으로 작은 프로젝트를 수행하고 있습니다. 웹 서비스를 노출하기 위해 ORM 및 RESTEasy에 Hibernate 4.1.2를 사용하고 있습니다. 기본적으로 스키마를 삭제하고 다시 만드는 main () 메서드가있는 util 파일을 만들었습니다. 테스트 목적으로 깨끗한 데이터베이스가 필요할 때 main () methos를 실행합니다. Tomcat 7에서 잘 작동했지만 JBoss 6으로 이동했을 때 작동이 중지되었습니다.

어떤 힌트 나 해결책이라도 대단히 감사하겠습니다.



유용 할 수 있습니다 : bugs.eclipse.org/bugs/show_bug.cgi?id=327193
Jeremy

C:\Program Files (x86)\Java\jre6\bin\javaw.exe길거나 다른 것인지 이해하고 싶습니다 C:\Users\motiver\helios_workspace\TimeTracker. 나도 같은 문제가 있습니다.
Siva R

후세 : 비슷한 상황 이었지만 Eclipse에서 WLS 및 클라이언트에 배포 된 간단한 엔터프라이즈 응용 프로그램이있었습니다. 내가 알아 차린 것은 Eclipse가 기본적으로 전체 WLS 라이브러리 (모든 jar)를 포함하므로 클래스 경로가 엄청났다는 것입니다. 나는 그것을 제거하고 weblogic.jar을 추가했습니다 (필요한 경우에만). 그 후 잘 작동했습니다. 그래서 내 관찰에 따르면 불필요한 항아리를 제거하십시오.
lupchiazoem

답변:


50

이 문제에 대한 간단한 (두 번의 클릭 또는 간단한 명령처럼) 해결책은 없습니다.

Eclipse.org의이 버그 보고서 에서 몇 가지 답변을 인용 하면 다음과 같은 해결 방법이 있습니다. 가장 고통스럽지 않은 것을 선택하십시오.

  • 클래스 경로 줄이기
  • jar 파일 대신 디렉토리 사용
  • 다른 모든 jar를 포함하는 압축 된 jar 파일을 사용하고 매니페스트 파일 내의 classpath 변수를 사용하여 다른 jar를 가리 킵니다.
  • 구성 파일에서 클래스 경로를 읽는 특수 클래스 로더를 사용하십시오.
  • 버그 보고서 문서에 첨부 된 패치 중 하나를 사용해보십시오.
  • 개미와 같은 자체 포장지 사용

업데이트 : 2014 년 7 월 이후 더 나은 방법이 있습니다 ( 아래 @ Brad-Mace의 답변 덕분에 :

을 사용하는 대신 고유 한 빌드 파일을 작성한 경우이 문제를 해결하도록 특별히 설계된 Javadoc 태스크에 Project -> Generate Javadocs추가 할 수 있습니다 useexternalfile="yes".


16
방법 인 IntelliJ는 것이다 되지 는 완전히 때문에 JVM을 시작할 때 사용되는 클래스 경로의 길이 인 경우이 문제가?
nitind 2012-06-28

1
이것은 일식 문제 일 수 있으며 maven을 사용하여 앱을 실행할 수 있습니다.
surajz

3
@nitind "IntelliJ IDEA에서는 메인 클래스를 생성 된 클래스로 대체합니다. 여기에는 하드 코딩 된 클래스 경로와 원래 메인 클래스를 시작하는 코드가 포함되어 있습니다." bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8
가져옴

2
2014 년에는이 답변이 잘못되었으며 @Brad Mace의 답변이 맞습니다.
Bananeweizen

5
"Reduce the classpath"는 좋은 힌트이지만 이것에 대해 조금 더 자세히 설명하겠습니다. 제 경우에는 maven 프로젝트를 빌드하려고했고 -classpath모든 종속성을 포함 하도록 인수가 생성되었습니다. 그래서 다음과 같은 것이 나왔습니다 C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more].. 내 로컬 maven repo 캐시를 이동 D:\m2하여 트릭을 수행했습니다. Classpath가 축소되었습니다 D:\m2\…;D:\m2\…-빙고! localRepositoryMaven 구성에서 경로 를 설정하는 것을 잊지 마십시오.
ThomasR

18

당신이 사용하는 대신 자신 만의 빌드 파일을 작성하는 경우 Project -> Generate Javadocs추가 할 수 있습니다를 useexternalfile="yes"받는 javadoc이 문제를 해결하기 위해 특별히 설계 작업.


1
안녕하세요. 정확히 어떻게 추가하나요?
Prateek Narendra는

@PrateekNarendra 당신은 당신의 개미 빌드 파일 (build.xml)에 추가 할 것입니다 : ant.apache.org/manual/Tasks/javadoc.html
Brad Mace

17

오늘이 문제에 직면 했고이 Gradle 플러그인을 사용하여 해결할 수있었습니다.

그것의 GitHub의 URL은 이것이다

저처럼 Gradle이 무엇인지 모르지만 프런트 엔드 작업을 수행하기 위해 백엔드를 실행해야하는 경우, BE 서버를 시작하기 위해 호출되는 build.gradle 파일을 찾아 이를 추가해야합니다. 상단:

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

3
이제 "기본 클래스 이름이 구성되지 않았으며 확인할 수 없습니다"라는 메시지가 표시됩니다.attributes["Main-Class"]
Anton3

2
플러그인을 사용해 보았지만 효과가 없습니다. 문제는 여전히오고 있습니다. 제안하십시오
amarnathpatel

8

해결책이 댓글에 묻히지 않도록 여기에서 내 질문에 답합니다. 이클립스 내에서 프로젝트를 실행 가능한 jar로 내보내고 "java -jar MyJar.jar"명령 줄을 실행했는데 완벽하게 작동합니다.



5

이것은 특별히 이클립스를위한 것은 아니지만,이 문제를 해결하는 방법은 내 maven 저장소에 대한 심볼릭 링크를 만들고 "C : \ R"과 같은 것을 가리키는 것입니다. 그런 다음 settings.xml 파일에 다음을 추가했습니다.

<localRepository>C:\R</localRepository>

maven 저장소 경로가 내 Windows 시스템의 길이 문제에 기여했습니다.


5

** 여기에 이미지 설명 입력 **

intellij에는 '명령 줄 단축'옵션이 있으며 'JAR 매니페스트'또는 '@argFiles'를 선택하면 문제가 해결됩니다. 기본적으로 긴 클래스 경로를 jar 파일이나 임시 파일에 넣습니다.


4

질문이 오래되었지만 여전히 유효합니다. 새 구성원이 팀에 합류하거나 새 코드 세그먼트가 기존 코드에 추가 될 때마다 이러한 상황이 자주 발생합니다. 우리가 따르는 간단한 해결 방법은 디렉토리를 위로 이동하여 "클래스 경로를 줄이는"것입니다.

언급했듯이 이것은 일식에만 국한되지 않습니다. IntelliJ Idea 14 및 2018에서도이 문제를 발견했습니다.

오랜 연구 끝에 해결책은

포크 = 거짓

개미 빌드 파일의 javc에서.

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

이것이 내 개미 빌드 javac의 모습입니다. fork에 대한 자세한 내용은 ant 문서참조하십시오.


이것은 내가 찾는 효과적인 대답입니다. 감사합니다
huuthang

3

버그 신고 버그 327193 수정 된 것으로 간주되지만 최근 Eclipse Kepler 4.3.2에서 저에게 발생했습니다.

Eclipse Juno 이상용 패치를 다운로드하십시오.

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

  1. 다운로드 후 기존 eclipse / plugins / org.eclipse.jdt.launching_3. *. jar 백업
  2. 패치의 클래스를 org.eclipse.jdt.launching JAR에 복사하여 붙여 넣으십시오 (기존 파일 대체).
  3. Eclipse를 다시 시작하십시오.

이것은 나를 위해 일했습니다. 이를 적용하면 설치된 JRE에서 JDK Java 설치가 제거되었습니다. 다시 추가해야했습니다. 1 개의 JRE 설치 만 지속되었습니다.
Joetjah 2014-06-27

재밌는 점, 당신은 당신의 문제에 대한 SO에 대한 답변을 찾고 답변 중 하나는 당신이 함께 공부 / 작업했던 사람에게서 온 것입니다 :)
Michał Szkudlarek

1

이 시도:

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


1

그것을 해결하려면 :

Eclipse를 사용하는 경우 :

.m2 저장소를 다음으로 이동

c : \ Eclipse> Windows / Preferences / Maven / User Settings로 이동-> 콘텐츠가 포함 된 자신 만의 setting.xml 만들기 :

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

IntelliJ를 사용하는 경우 : IntelliJ로 이동> "pom.xml"에서 마우스 오른쪽 버튼 클릭> maven> "settings.xml"생성

내용 :

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

1

Maven을 호출하는 동안 동일한 오류가 발생했습니다.

내 문제의 근본 원인 classpath은 매우 컸습니다. 클래스 경로를 업데이트하면 문제가 해결되었습니다.

다음에서 언급 한대로 대형 클래스 경로를 업데이트하는 방법에는 여러 가지가 있습니다. Windows에서 긴 Java 클래스 경로를 설정하는 방법은 무엇입니까?

  1. 와일드 카드 사용
  2. 인수 파일
  3. 경로 지정 항아리

Intellij를 사용하고 있기 때문에 내가 사용한 Argument File을 사용할 수있는 옵션을 제공합니다.


5
Updating the classpath- 어떻게?
Woland

1
매우 모호한 대답입니다. 도대체 클래스 경로를 어떻게 업데이트 했습니까?
Testilla

클래스 경로를 업데이트하는 방법에는 여러 가지가 있습니다 (예 : 와일드 카드).
Sandeep Jindal

1

이것을 build.gradle ( gradle version 4.10.x) 파일 에 추가하고 이것이 com.xxx.MainClass기본 메소드가있는 클래스인지 확인하십시오 .

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

위의 변경 사항은 문제를 해결해야합니다. run.sh아래 스크립트를 사용 하여이 문제를 해결할 수있는 또 다른 방법 이 있습니다.하지만 IntelliJ에서 시작하는 것이 아니라 명령 줄 수정에 가깝습니다 gradle bootRun.


0

DataNucleus가 때때로 많은 경로로 인수를 덮어 쓰기 때문에 발생합니다.

다음과 같이 덮어 써야합니다.

-enhancerName ASM -api JDO -pu MediaToGo

희망이 있습니다!



0

' ant deploy '를 실행할 때 아래 오류가 발생했습니다.

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

그 전에 ' ant clean ' 을 실행하여 수정했습니다 .


1
Android Studio를 사용하는 경우 어떻게합니까? 나는 또한 같은 문제를 받고 있습니다
Portfoliobuilder

나는 intelliJ를 사용하고 있습니다
kn3l

0

안드로이드 스튜디오에서 같은 오류가 발생했습니다. 내가 실행하여 해결할 수 있었다 빌드 -> 클린 프로젝트 는 IDE한다.


0

이것은 프로젝트 디렉토리 이름이 길기 때문에 CLASSPATH전체적으로 매우 길어 집니다. 에 추가 된 jar를 줄여야 CLASSPATH하거나 (불필요한 jar 만 제거해야 함) 가장 좋은 방법은 프로젝트 디렉토리를 줄이고 프로젝트를 다시 가져 오는 것입니다. 이렇게하면 CLASSPATH. 그것은 나를 위해 일했습니다.


0

나는 같은 문제가 있었지만 대신 netbeans를 사용했습니다.
해결책을 찾았으므로 어디서도 찾지 못했기 때문에 여기에서 공유하고 있으므로 netbeans 에서이 문제가 발생하면 다음을 시도하십시오.
(내 netbeans가 포르투갈어로되어 있으므로 이름이 꺼져있을 수 있음) 프로젝트> 속성을 ​​마우스 오른쪽 단추로 클릭하십시오. > 빌드> 컴파일> 외부 VM에서 컴파일 실행을 선택 취소합니다.


0

같은 오류가 발생했습니다. 청소, 재 구축, invalidateCache, retart 등과 같은 솔루션을 시도했지만 아무것도 작동하지 않습니다.

짧은 이름으로 새 폴더를 만들고 새 폴더에 모든 파일 (앱 폴더, gradle 파일 등)을 복사했습니다. 안드로이드 스튜디오에서 열린 응용 프로그램과 잘 작동합니다.


0

제 경우에는 시스템 Java 버전이 intellijj / eclipse Java 버전과 다르기 때문에 오류가 표시되었습니다. 시스템과 사용자의 Java 버전이 다릅니다. 한 버전을 사용하여 코드를 컴파일하고 다른 버전을 사용하여 실행하려고하면 오류가 발생합니다. 사용자 Java 버전은 1.8입니다.

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

간단히 말해서 코드가 동일한 Java 버전으로 컴파일되고 실행되는지 확인하십시오.



0

아래의 오류를 수정하기 위해 충분한 조사를했지만 훌륭한 해결책이 없었습니다.이 스크립트를 준비했으며 잘 작동하고 있으며 대중에게 공유하고 활용하여 시간을 절약 할 수있을 것으로 생각했습니다.

CreateProcess 오류 = 206, 파일 이름 또는 확장자가 너무 깁니다.

Gradle 빌드 도구를 사용하고 실행 파일이 애플리케이션의 build / libs 디렉토리에있는 경우. run.sh-> 프로젝트의 루트 디렉토리에이 파일을 만들고 그 안에 스크립트를 복사 한 다음 git bash로 이동하여 run.sh를 입력 한 다음 입력합니다. 도움이 되었기를 바랍니다!

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

도움이 되었기를 바랍니다!!


0

나는 이전 버전의 gradle 플러그인을 사용하고 있으며이 플러그인 문제를 해결했습니다.

사용법 (자세한 내용은 출처 확인) :

Gradle 2.1 이상용 플러그인 DSL 용 스크립트 스 니펫 빌드

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

이전 Gradle 버전에서 사용하거나 동적 구성이 필요한 경우 빌드 스크립트 스 니펫

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

Windows 시스템에서는 명령 줄에 jar 파일 이름 / 경로 길이에 제한이 있습니다. 이로 인해 아래 오류 메시지가 표시되어 위의 솔루션을 적용 해 보았습니다. 작동하지 않았습니다. Gradle (gradle-4.10.2-all.zip)의 작업 스 니펫을 찾았습니다.

오류:

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

아래 gradle.build코드 스 니펫을 사용하여 IntelliJ 또는 STS에서 위의 문제를 수정하거나 무엇이든 이클립스하십시오.

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

얼마나 많은 사람들이 위의 슬픈 지, 다음과 같이이 문제에서 단계별로 실행하는 많은 플러그인이 있습니다.

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

또는

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

그러나 내가 찾은 더 나은 해결책은 JVM 프로세스를 죽이는 것이었고 모든 것이 완료되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.