CreateProcessエラー= 206、main()メソッドの実行時にファイル名または拡張子が長すぎる


98

私は日食ヘリオにこのエラーがあります:

コマンドラインの実行中に例外が発生しました。プログラム "C:\ Program Files(x86)\ Java \ jre6 \ bin \ javaw.exe"(ディレクトリ "C:\ Users \ motiver \ helios_workspace \ TimeTracker"内)を実行できません:CreateProcessエラー= 206、ファイル名または拡張子は長すぎる

私は少し調べましたが、Google App Engineで作業しているときの問題のほとんどはDataNucleusに関連していました。しかし、私はリモートでGoogle App Engineに関連するものを使用していません。JBOSS 6のServlet 3.0を使用して小さなプロジェクトを行っています。ORMとRESTEasyにHibernate 4.1.2を使用して、Webサービスを公開しています。基本的にスキーマを削除して再作成するmain()メソッドを持つutilファイルを作成しました。テスト目的でクリーンなデータベースが必要な場合は、main()メソッドを実行します。Tomcat 7では問題なく機能しましたが、JBoss 6に移行すると機能しなくなりました。

ヒントや解決策をいただければ幸いです。



役に立つかもしれません:bugs.eclipse.org/bugs/show_bug.cgi?id
Jeremy

C:\Program Files (x86)\Java\jre6\bin\javaw.exe長いのか他ののか知りたいC:\Users\motiver\helios_workspace\TimeTracker。私も同じ問題を抱えています。
Siva R

後世:私も同様の状況でしたが、単純なエンタープライズアプリケーションがWLSにデプロイされ、クライアントがEclipseからデプロイされました。私が気付いたことは、EclipseがデフォルトでWLSライブラリ全体(すべてのjar)を含んでいるため、クラスパスが巨大であることです。私はそれを削除して、weblogic.jarのみを追加しました(必須)。その後、それはうまくいきました。したがって、私の観察では、不要なjarファイルを削除するだけです。
lupchiazoem

回答:


49

この問題に対する簡単な(数回のクリックまたは単純なコマンドのような)解決策はありません。

Eclipse.orgのこのバグレポートのいくつかの回答から引用すると、これらは回避策です。あなたにとって最も痛くないものを選んでください:

  • クラスパスを減らす
  • jarファイルの代わりにディレクトリを使用する
  • 他のすべてのjarを含むパックされたjarファイルを使用し、マニフェストファイル内のクラスパス変数を使用して他のjarをポイントします
  • 構成ファイルからクラスパスを読み取る特別なクラスローダーを使用します
  • バグレポートドキュメントで添付されているパッチの1つを使用してみてください
  • アリなどの独自のラッパーを使用します

更新:2014年7月以降、より良い方法があります(下記の@ Brad-Maceの回答に感謝します

を使用する代わりに独自のビルドファイルを作成した場合は、この問題を解決するために特別に設計されたJavadocタスクにProject -> Generate Javadocs追加できますuseexternalfile="yes"


16
JVMの起動時に使用されるクラスパスの長さが完全に原因である場合、IntelliJ どのようにこの問題を抱えていませんか?
nitind

1
これは日食の問題である可能性があります。Mavenを使用してアプリを実行できます。
surajz 2012年

3
@nitind「IntelliJ IDEAでは、メインクラスを生成されたクラスで置き換えます。これには、ハードコードされたクラスパスと、元のメインクラスを起動するコードが含まれています。」bugs.eclipse.org/bugs/show_bug.cgi?id=327193#c8
Chobicus

2
2014年、この答えは間違っていて、@ Brad Maceの答えは正しいです。
Bananeweizen 2014年

5
「クラスパスを減らす」は良いヒントですが、少し詳しく説明します。私の場合、Mavenプロジェクトをビルドしようとしました-classpathが、すべての依存関係を含むように引数が生成されました。だから、このようなものが出てきました:C:\Users\myself\.m2\repository\…;C:\Users\myself\.m2\repository\…[…tons more]。私のローカルmavenレポキャッシュを移動D:\m2してトリックを実行しました:クラスパスはD:\m2\…;D:\m2\…-ビンゴに縮小しました!localRepositorymaven設定でパスを設定することを忘れないでください。
ThomasR

18

使用せずに独自のビルドファイルを作成する場合は、この問題を解決するために特別に設計されたタスクにProject -> Generate Javadocs追加できます。useexternalfile="yes"javadoc


1
こんにちは-これを正確に追加するにはどうすればよいですか?
Prateek Narendra 2017

@PrateekNarendraあなたはそれをあなたのantビルドファイル(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"]
メッセージ

1
プラグインを使ってみましたが効果がありませんでした。問題はまだ来ています。提案してください
amarnathpatel

8

自分の質問にここで答えて、解決策がコメントに埋もれないようにします。私はeclipse内から実行可能な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でもこの問題に遭遇しました。

長い調査の結果、解決策は

フォーク= false

antビルドファイルのJAVC。

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

これが私のant build javacの外観です。フォークの詳細については、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年

おかしい事は、あなたの問題の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. Pathing jar

Intellijを使用しているため、使用した引数ファイルを使用するオプションが提供されます。


5
Updating the classpath- どうやって?
Woland

1
非常にあいまいな答え。クラスパスをどのように更新しましたか?
精巣

ワイルドカードなど、クラスパスを更新する方法は複数あります。
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を使用している場合はどうなりますか?私もこれと同じ問題を受けています
ポートフォリオ

私はintelliJを使用しています
kn3l

0

Android Studioでも同じエラーが発生しました。IDEで[ ビルド] -> [ プロジェクトのクリーン]を実行することで解決できました。


0

これは、プロジェクトディレクトリ名が長いために、非常に長いものCLASSPATHになるためです。で追加されたjarを減らす必要があるかCLASSPATH(不要なjarのみを削除してください)または、プロジェクトディレクトリを減らしてプロジェクトを再度インポートするのが最善の方法です。これはを減らしますCLASSPATH。それは私のために働いた。


0

同じ問題がありましたが、代わりにnetbeansを使用していました。
私は解決策を見つけたので、これをどこにも見つけていないのでここで共有しています。netbeansでこの問題が発生した場合は、これを試してください
(netbeansがポルトガル語であるため、名前がオフになっている可能性があります)プロジェクト>プロパティを右クリック>ビルド>コンパイル>外部VMでのコンパイルの実行をオフにします。


0

同じエラーが発生しました。クリーニング、再構築、invalidateCache、retartなどのソリューションを試しましたが、何も機能しません。

短い名前で新しいフォルダーを作成し、すべてのファイル(アプリフォルダー、gradleファイルなど)を新しいフォルダーにコピーしました。Android Studioでアプリケーションを開いたところ、正常に動作しました。


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と入力し、Enterキーを押します。お役に立てれば!

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