web-dev-qa-db-ja.com

Createprocessエラー= 206;ファイル名または拡張子が長すぎます

この質問は以前に行われたことがありますが、他の投稿の解決策を使用して修正することはできませんでした。 Mavenを使用してgwtプロジェクトの複雑な階層をコンパイルしようとしています。ライブラリをもう1つ追加する必要があるまで、すべてが正常に機能しました。具体的には、org.Eclipse.birt.runtimeです。

今、私はこのエラーを受け取ります:

[ERROR] Failed to execute goal org.codehaus.mojo:gwt-maven-plugin:2.6.1:debug ....

..... [Lots of jars, many containing birt, no duplicates though] .....


Error while executing process. Cannot run program "C:\Program Files\Java\jdk1.8.0_20\jre\bin\Java": CreateProcess error=206, The filename or extension is too long

私が使用している依存関係は次のとおりです。

<dependency>
    <groupId>org.Eclipse.birt.runtime</groupId>
    <artifactId>org.Eclipse.birt.runtime</artifactId>
    <version>4.4.1</version>
</dependency>
7
ahlexander

私はついにそれを解決することができました:

Birtは、その依存関係とともに、単にライブラリを追加しすぎていて、クラスパスが長すぎてWindowsコマンドで処理できないことが判明しました。さらに、birtライブラリの名前はばかげています。

この依存関係を使用して解決し(ランタイムのみが必要でした)、libディレクトリとbirtディレクトリを作成し、そこにjarを自分で配置しました。

<dependency>
    <groupId>org.Eclipse.birt.runtime</groupId>
    <artifactId>org.Eclipse.birt.runtime</artifactId>
    <version>4.4.1</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/birt/birt.runtime-4.4.1.jar</systemPath>
</dependency>
6
ahlexander

クライアント側で使用されていない場合、Birtはクラスパスに含まれる理由はありません。

残念ながら、Mavenは物事を必要以上に難しくすることがあります。したがって、Mavenでは、GWTクライアントコードをサーバー側コードに依存しない特定のMavenモジュールにする必要があります。次に、WARオーバーレイを使用してすべてを単一のWARに「マージ」します。

そのレイアウト(モジュールをapp-clientおよびapp-serverと呼びましょう)を使用すると、gwt:runまたはgwt:debugを起動するためのいくつかのソリューションがあります。

  • 試したことはありませんが、app-server出力ディレクトリを指すように hostedWebapp を構成できます。

    <hostedWebapp>../app-server/target/app-server-${project.version}/</hostedWebapp>
    

    mvn clean WARをパッケージ化する前に必ずapp-serverを実行してください。ただし、生成されたJSファイルはapp-clientapp-serverによって生成された)ではなくgwt:run(WARオーバーレイとして)からのものであることを確認してください。

  • 私が使用しているもの gwt-maven-archetypes :サーバー側のコードを別のサーブレットコンテナで起動し、 <noServer>true</noServer> を使用します

    パッケージ化する前にもmvn cleanを実行するか、-Dgwt.compiler.forceを使用して、gwt:compileがDevModeで生成された*.nocache.jsファイルを最新のものとして扱わず、アプリケーションを再コンパイルするようにしてください。

0
Thomas Broyer