2009-06-03 8 views
2

Я пытаюсь запустить скрипт сборки муравья, который компилирует GWT. Этот скрипт включает большое количество библиотек, каждый из которых имеет относительно длинный путь. Мой код GWT касается только некоторых из этих библиотек; тем не менее, удобно включать все библиотеки из каталога lib, которые я использую для этого и всех других приложений, которые я разрабатываю. Вот соответствующая часть моего сценария сборки:Компиляция кода GWT с большим количеством параметров - ограничение символов на CreateProcess?

<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� 

Похоже, что в somepoint компиляции, строка, содержащая все путей библиотеки усекаются. Может ли это быть связано с некоторыми ограничениями символов на CreateProcess? Эта строка команды CreateProcess имеет длину около 1024 символов до усечения, что кажется небольшим лимитом. Есть ли способ увеличить этот лимит? Любые мысли/решения/обходные решения оцениваются.

Спасибо, Mayur

+0

Отформатируйте ошибку, это нечитаемым. –

+0

Извините, новичок в stackoverflow, поэтому пришлось выяснить форматирование. Благодарю. – P4ndaman

ответ

2

Проблема состоит в том, что командные строки Windows ограничены 8191 символом, а GWT помещает полный путь в каждую банку в пути к классам. Единственный способ исправить это - переместить банки в каталог с более коротким путем.

Вы можете сделать это под окнами, сделав символическую ссылку, а затем ссылаясь на эту ссылку в файле сборки. Что-то вроде этого

От корня с:

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

Wikpedia entry on windows symbolic links

0

Одним из возможных обходной путь для очень долгого пути к классам, чтобы использовать java.ext.dirs собственность и отказаться от всех вас во время компиляции зависимостей (в JAR-файлы, которые теперь упоминаться в вашем CLASSPATH), в этом каталог.