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

对于非常长的类路径,一种可能的解决方法是使用该java.ext.dirs属性并将所有编译时依赖项(现在在类路径中引用的 JAR 文件)放在此目录中。

于 2009-06-04T20:53:09.160 回答