Domanda

Sto cercando di eseguire uno script di build formica che compila GWT. Questo script comprende un gran numero di librerie, ciascuno con un tempo relativamente lungo percorso. Il mio codice GWT tocca solo alcune di queste librerie; tuttavia, è opportuno includere tutti i libaries dalla directory lib che uso per questo e tutte le altre applicazioni che sto sviluppando. Ecco la quota di competenza del mio script di build:

<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 si tenta di eseguire questo, ottengo il seguente errore:

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�

Sembra che al somepoint della compilazione, la stringa che contiene tutti i percorsi di libreria sono sempre troncato. Questo potrebbe essere dovuto a qualche limite di caratteri su CreateProcess? Questa stringa di comando CreateProcess viene ad essere solo circa 1024 caratteri molto prima il troncamento, che sembra un piccolo limite. Esiste un modo per aumentare questo limite? Ogni pensiero / soluzioni / soluzioni apprezzate.

Grazie, Mayur

È stato utile?

Soluzione

Il problema è che le righe di comando di Windows sono limitati 8191 caratteri e GWT sta mettendo il percorso completo di ogni vasetto nel classpath. L'unico modo per risolvere questo problema è quello di spostare i vasi in una directory con un percorso più breve.

È possibile farlo sotto le finestre, facendo un collegamento simbolico e quindi fa riferimento a quel link nel file build. Qualcosa di simile a questo

Dalla radice di c:

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

ingresso Wikpedia sulle finestre link simbolici

Altri suggerimenti

Una soluzione possibile per un tempo molto lungo percorso di classe è quello di utilizzare la proprietà java.ext.dirs e far cadere tutti si compila-time dipendenze (i JAR-file che vengono ora riferimento nel classpath) in questa directory.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top