2

GWT をコンパイルする ant ビルド スクリプトを実行しようとしています。このスクリプトには多数のライブラリが含まれており、それぞれに比較的長いパスがあります。私の GWT コードは、これらのライブラリの一部にしか触れていません。ただし、これに使用する lib ディレクトリのすべてのライブラリと、開発中の他のすべてのアプリケーションを含めると便利です。私のビルドスクリプトの関連部分は次のとおりです。

<path id="gwt.project.class.path">
  <pathelement location="gen"/>
  <pathelement location="${gwt.sdk}/gwt-user.jar"/>
  <fileset dir="${gwt.sdk}" includes="gwt-dev*.jar"/>
  <fileset dir="${smartgwt.sdk}" includes="smartgwt*.jar"/>
  <!-- Add any additional non-server libs (such as JUnit) -->
  <fileset dir="lib" includes="**/*.jar"/>
</path>

<target name="gwtc" depends="compileApp" description="GWT compile to JavaScript" unless="noGWTModule">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
  <classpath>
    <pathelement location="src"/>
    <path refid="gwt.project.class.path"/>
  </classpath>
  <!-- add jvmarg -Xss16M or similar if you see a StackOverflowError -->
  <jvmarg value="-Xmx256M"/>
  <!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
  <arg value="${gwt.module}"/>
  <arg value="-war" />
  <arg value="${gwt.gen.dir}" />
</java>
</target>`

これを実行しようとすると、次のエラーが表示されます。

java.io.IOException: CreateProcess: "C:\Program Files\Java\jdk1.5.0_11\jre\bin\java.exe" -Xmx256M -classpath "C:\Program Files\Common Files\eclipse\workspace\development\src;C:\Program Files\Common Files\eclipse\workspace\development\lib\build\hbBuildSupport.jar;C:\Program Files\Common Files\eclipse\workspace\development\lib\db\hibernate\ehcache.jar;C:\Program Files\Common Files\eclipse\workspace\development\lib\db\hibernate\hibernate-annotations.jar;C:\Program Files\Common Files\eclipse\workspace\development\lib\db\hibernate\hibernate-commons-annotations.jar;C:\Program Files\Common Files\eclipse\workspace\development\lib\db\hibernate\hibernate-entitymanager.jar;C:\Program Files\Common Files\eclipse\workspace\development\lib\db\hibernate\hibernate-tools.jar;C:\Program Files\Common Files\eclipse\workspace\development\lib\db\hibernate\hibernate-validator.jar;C:\Program Files\Common Files\eclipse\workspace\development\lib\db\hibernate\hibernate3.jar;C:\Program Files\Common Files\eclipse\workspace\development\lib\db\hibernate\javassi�

コンパイルのある時点で、すべてのライブラリ パスを含む文字列が切り捨てられているようです。これは、CreateProcess の文字数制限によるものでしょうか? この CreateProcess コマンド文字列は、切り詰められる前に約 1024 文字になり、小さな制限のように見えます。とにかくこの制限を増やすことはありますか? 考え/解決策/回避策をいただければ幸いです。

ありがとう、マユル

4

2 に答える 2

2

問題は、Windows コマンド ラインが 8191 文字に制限されており、GWT がクラスパス内の各 jar へのフル パスを設定していることです。これを修正する唯一の方法は、jar をより短いパスのディレクトリに移動することです。

Windows でこれを行うには、シンボリック リンクを作成し、ビルド ファイルでそのリンクを参照します。このようなもの

c のルートから:

mklink /D jars C:\Program Files\Common Files\eclipse\workspace\development\lib

Windows シンボリック リンクに関するウィキペディアのエントリ

于 2009-06-24T22:33:03.017 に答える
0

クラスパスが非常に長い場合の回避策の 1 つは、java.ext.dirsプロパティを使用し、コンパイル時の依存関係 (クラスパスで現在参照されている JAR ファイル) をすべてこのディレクトリにドロップすることです。

于 2009-06-04T20:53:09.160 に答える