IT

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

itgroup 2023. 1. 15. 17:03
반응형

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

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

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

저는 조금 조사했지만 구글 앱 엔진에서 작업할 때 DataNucleus와 관련된 문제가 대부분이었습니다.하지만 저는 구글 앱 엔진과 관련된 어떤 것도 원격으로 사용하고 있지 않습니다.JBOSS 6에서 Servlet 3.0으로 작은 프로젝트를 진행하고 있으며, 웹 서비스를 노출하기 위해 ORM 및 RESTEASY용 Hibernate 4.1.2를 사용하고 있습니다.기본적으로 스키마를 폐기하고 다시 작성하는 main() 메서드를 가진 util 파일을 만들었습니다.테스트 목적으로 깨끗한 데이터베이스가 필요할 때 main() 메토스를 실행합니다.Tomcat 7에서는 정상적으로 동작했지만, JBoss 6으로 이동했을 때 동작이 정지되었습니다.

어떤 힌트나 해결책이라도 주시면 감사하겠습니다.

이 문제에 대한 간단한 해결책(클릭 몇 번이나 간단한 명령어처럼)은 없습니다.

Eclipse.org의 이 버그리포트에 기재되어 있는 답변을 인용하면, 회피책은 다음과 같습니다.가장 고통스럽지 않은 것을 고르세요.

  • 클래스 경로를 줄입니다.
  • jar 파일 대신 디렉토리 사용
  • 다른 모든 jar가 포함된 jar 파일을 사용하고 매니페스트 파일 내의 classpath 변수를 사용하여 다른 jar를 가리킵니다.
  • 구성 파일에서 클래스 경로를 읽는 특수 클래스 로더 사용
  • 버그 리포트 문서에 첨부되어 있는 패치 중 하나를 사용해 보겠습니다.
  • 전용 포장지 사용(예: 개미)

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

를 사용하지 않고 Project -> Generate Javadocs 해서 이렇게 하면 useexternalfile="yes"이 문제를 해결하기 위해 특별히 설계된 Javadoc 태스크로 이동합니다.

를 사용하지 않고 하면, 「」가 됩니다.Project -> Generate Javadocs 해서 더하면 요.useexternalfile="yes"javadoc이 문제를 해결하기 위해 특별히 설계된 태스크입니다.

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

github url은 이것입니다.

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

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

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

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

IntelliJ 2020.2Hibernate/JPA 콘솔에서 JPQL 쿼리를 실행하려고 했습니다.

이것을 .idea/workspace.xml에 추가하면 수정되었습니다.

<component name="PropertiesComponent">
 
...
     <property name="dynamic.classpath" value="true"/>
 
...
 
</component>

솔루션 출처: https://youtrack.jetbrains.com/issue/IDEA-166929?_ga=2.167622078.1290412178.1604511702-23036228.1574844686

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

이것은 특별히 일식을 위한 것은 아니지만, 이것을 회피하기 위한 방법은 maven 저장소에 심볼릭 링크를 만들어 "C:\R"과 같은 것을 가리키는 것이었습니다.그런 다음 settings.xml 파일에 다음 파일을 추가했습니다.

<localRepository>C:\R</localRepository>

maven 저장소 경로가 윈도 머신의 길이 문제의 원인이 되었습니다.

Eclipse 버전을 업데이트해 보십시오. 이 문제는 최근에 해결되었습니다(2013-03-12).버그 리포트 https://bugs.eclipse.org/bugs/show_bug.cgi?id=327193 를 확인합니다.

질문은 오래되었지만 여전히 유효합니다.저는 새로운 멤버가 팀에 합류하거나 기존 코드에 새로운 코드 세그먼트가 추가될 때마다 이 상황을 자주 경험합니다.다음의 간단한 회피책은, 디렉토리를 위로 이동해 「클래스 패스를 삭감」하는 것입니다.

질문에서 언급했듯이, 이것은 일식에만 국한된 것이 아닙니다.IntelliJ Idea 14와 2018에서도 이 문제를 접했습니다.

오랜 조사 끝에, 해결책은 이 시스템을

포크 = false

개미 빌드 파일의 javc에 있습니다.

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

이게 지금 내 개미 빌드 자바크 모습이야.포크에 대한 자세한 내용은 ant 문서를 참조하십시오.

버그 리포트 Bug 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. 이클립스를 재시작합니다.

위의 몇 명의 사용자가 이 문제에 대해 by pass를 실행할 수 있도록 gradle을 실행하는 방법은 다음과 같습니다.

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

또는

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

하지만 JVM 프로세스를 중지하고 모든 작업을 수행하는 것이 더 나은 솔루션이라고 생각했습니다.

gradle 파일에 다음 추가:

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

https://plugins.gradle.org/plugin/com.github.ManifestClasspath 를 참조해 주세요.

build.build.gradle」)에해 주세요.( )gradle version 4.10.xcom.xxx.MainClass는 주 이 있는입니다.

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

되어야 합니다.를 사용하는 이 있습니다.스크립트를 사용하는 다른 방법이 있습니다.run.sh는 이할 수 .인텔리J를 기동하는 .gradle bootRun.

이것을 시험해 보세요.

java -jar -Dserver.port=8080 빌드/libs/APP_NAME_HERE.jar

해결 방법:

이클립스를 사용하는 경우:

.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>

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

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

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

저는 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"

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

은 " " " " " 제 " 。classpath클래스 패스를 되었습니다.classpath가 수정되었습니다.

다음과 같이 큰 클래스 패스를 갱신하는 방법은 여러 가지가 있습니다.Windows에서 긴 Java 클래스 경로를 설정하는 방법

  1. 와일드카드 사용
  2. 인수 파일
  3. 패칭 항아리

Intelij를 사용하고 있기 때문에 사용하던 Argument File을 사용할 수 있는 옵션이 있습니다.

Windows 머신의 경우 명령줄에 jar 파일명/경로 길이가 제한되어 있기 때문에 아래 에러 메시지가 표시되므로 많이 검색하려고 했습니다.위의 솔루션을 적용해도 동작하지 않고 Gradle(gradle-4.10.2-all zip)의 작업 스니펫을 찾았습니다.

오류:

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

아래 사용gradle.build코드 스니펫을 사용하여 IntelliJ 또는 STS에서 위의 문제를 해결하거나 모든 문제를 해결합니다.

그라들 코드 수정:

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

VSCode를 사용하는 경우:

  1. create launch.json 파일을 .de .claunchode/에 만듭니다.

  2. 더하다

    {"configurations": [{ "type": "java","shortenCommandLine ": "auto",}]}
    

intellij를 사용하는 경우:

  1. .idea/syslog.xml을 엽니다.

  2. 안에서.<component name="PropertiesComponent">더하다<property name="dynamic.classpath" value="true"/>

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

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

-enhancerName ASM -api JDO -pu MediaToGo

도움이 되길 바래!

저도 같은 오류가 발생했어요.클리닝, 리빌드, invalidate Cache, retart 등의 솔루션을 시도했지만 아무것도 동작하지 않았다.

짧은 이름의 새 폴더를 만들고 새 폴더의 모든 파일(앱 폴더, gradle 파일 등)을 복사했습니다.Android Studio에서 앱을 열어 정상적으로 동작하고 있습니다.

나에겐 잘못된 JDK 경로였다.JDK 파일에 대한 올바른 경로가 있는지 확인하십시오.

파일 -> 프로젝트 구조

여기에 이미지 설명 입력

Android Studio를 사용하는 경우 캐시 비활성화/재시작을 시도합니다.파일 메뉴에 있는 옵션

나는 사용했다com.virgo47.ClasspathJarhttps://plugins.gradle.org/plugin/com.virgo47.ClasspathJar 에서 이 문제를 해결합니다.

아래의 오류를 수정하기 위해 충분한 조사를 했지만, 좋은 해결책을 찾지 못했고, 이 스크립트를 준비했고, 정상적으로 작동하고 있으며, 일반에 공유하여 활용하고 시간을 절약할 수 있다고 생각했습니다.

CreateProcess error=module, 파일 이름 또는 확장자가 너무 깁니다.

Gradle 빌드 도구를 사용하는 경우 실행 파일이 응용 프로그램의 빌드/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

이게 도움이 됐으면 좋겠어!!

다음 명령을 사용할 수 있습니다.

mklink /J c:\repo C:\<long path to your maven repository> 


mvn -Dmaven.repo.local=c:\repo any mvn command

이 스레드에서 유효한 답변이 나의 특별한 경우에 대한 정답이었습니다.datanucleus의 ORM 폴더 경로를 지정하여 Java 경로 컴파일을 확실히 줄입니다.

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

'개미 전개'를 실행하면 다음 오류가 발생함

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

그 전에 '개미 청소'를 해서 고쳤어요.

안드로이드 스튜디오에서도 같은 에러가 발생했습니다.IDE에서 Build-> Clean Project를 실행하여 해결할 수 있었습니다.

언급URL : https://stackoverflow.com/questions/10519558/createprocess-error-206-the-filename-or-extension-is-too-long-when-running-main

반응형