Компиляция кода GWT с большим количеством параметров — ограничение по символу для CreateProcess?

StackOverflow https://stackoverflow.com/questions/945446

Вопрос

Я пытаюсь запустить скрипт сборки 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 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 символов задолго до усечения, что кажется небольшим ограничением.Можно ли как-нибудь увеличить этот лимит?Любые мысли / решения / обходные пути приветствуются.

Спасибо, Маюр

Это было полезно?

Решение

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

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

Из корня c:

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

Запись в Викпедии о символических ссылках Windows

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top