Компиляция кода GWT с большим количеством параметров - лимит символов в CreateProcess?
Я пытаюсь запустить скрипт сборки ant, который компилирует GWT. Этот скрипт включает в себя большое количество библиотек, каждая из которых имеет относительно длинный путь. Мой код 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 StackruError -->
<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 символов перед усечением, что кажется небольшим ограничением. Есть ли способ увеличить этот лимит? Любые мысли / решения / обходные пути приветствуются.
Спасибо, майур
2 ответа
Проблема в том, что командные строки Windows ограничены 8191 символом, а GWT указывает полный путь к каждому банку в пути к классам. Единственный способ исправить это - переместить банки в каталог с более коротким путем.
Вы можете сделать это в Windows, сделав символическую ссылку, а затем сослаться на эту ссылку в файле сборки. Что-то вроде этого
Из корня с:
mklink /D jars C:\Program Files\Common Files\eclipse\workspace\development\lib
Одним из возможных путей обхода очень длинного пути к классам является использование java.ext.dirs
свойство и удалить все ваши зависимости времени компиляции (JAR-файлы, на которые теперь есть ссылки в вашем пути к классам) в этом каталоге.