Pregunta

Estoy tratando de ejecutar un script de construcción hormiga que compila GWT. Esta secuencia de comandos incluye un gran número de bibliotecas, cada uno con una trayectoria relativamente larga. Mi código GWT sólo se toca algunas de estas bibliotecas; Sin embargo, es conveniente incluir todas las librerias del directorio lib que utilizo para esta y todas las demás aplicaciones que estoy desarrollando. Esta es la parte relevante de mi escritura de la estructura:

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

Cuando intento funcionar esto, me sale el siguiente error:

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 en somepoint de la compilación, la cadena que contiene todas las rutas de bibliotecas se quedan truncados. Podría ser esto debido a algún límite de caracteres en CreateProcess? Esta cadena de comandos CreateProcess llega a ser sólo alrededor de 1.024 caracteres antes de truncamiento, lo que parece como un pequeño límite. ¿Hay alguna forma de aumentar este límite? Cualquier pensamientos / soluciones / soluciones apreciados.

Gracias, Mayur

¿Fue útil?

Solución

El problema es que las líneas de comandos de Windows están limitados 8191 caracteres y GWT está poniendo la ruta completa a cada frasco en la ruta de clase. La única manera de solucionar este problema es mover los frascos a un directorio con una ruta más corta.

Usted puede hacer esto en Windows al hacer un enlace simbólico y luego hacer referencia a que el enlace en su fichero de construcción. Algo como esto

A partir de la raíz de C:

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

entrada Wikpedia en las ventanas enlaces simbólicos

Otros consejos

Una posible solución para una larga ruta de clases es el uso de la propiedad java.ext.dirs y dejar caer todo lo que en tiempo de compilación dependencias (los archivos JAR-que ahora se hace referencia en la ruta de clase) en este directorio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top