Compilar o código GWT com um grande número de parâmetros - Limite de Caracteres em CreateProcess?

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

Pergunta

Eu estou tentando executar um script de construção Ant que compila GWT. Este roteiro inclui um grande número de bibliotecas, cada uma com um tempo relativamente longo caminho. Meu código GWT só toca algumas dessas bibliotecas; no entanto, é conveniente incluir todos os libaries do diretório lib que eu uso para esta e todas as outras aplicações que estou desenvolvendo. Aqui está a parte relevante do meu script de compilação:

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

Quando tento executar este, eu recebo o seguinte erro:

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�

Parece que a somepoint da compilação, a string contendo todos os caminhos de biblioteca estão ficando truncado. isto pode ser devido a algum limite de caracteres em CreateProcess? Esta seqüência de comandos CreateProcess chega a ser apenas cerca de 1024 caracteres antes de truncamento, o que parece como um pequeno limite. Existe uma maneira de aumentar este limite? Quaisquer pensamentos / soluções / soluções alternativas apreciado.

Obrigado, Mayur

Foi útil?

Solução

O problema é que as linhas de comando do Windows são limitadas 8191 caracteres e GWT é colocar o caminho completo para cada frasco no classpath. A única maneira de corrigir isso é mover os frascos para um diretório com um caminho mais curto.

Você pode fazer isso no Windows, fazendo um link simbólico e, em seguida, fazer referência a esse link em seu arquivo de construção. Algo como isto

A partir da raiz c:

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

entrada Wikpedia em janelas links simbólicos

Outras dicas

Uma solução possível para um tempo muito longo classpath é usar a propriedade java.ext.dirs e para deixar cair todos vocês em tempo de compilação dependências (os arquivos jar que agora estão referenciados no classpath) neste diretório.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top