Question

Je suis en train d'exécuter un script de compilation fourmi qui compile GWT. Ce script inclut un grand nombre de bibliothèques, chacun avec un chemin relativement long. Mon code GWT ne touche que certaines de ces bibliothèques; Cependant, il convient d'inclure tous les à partir du répertoire d'abord des bibliothèques lib que j'utilise pour cela et toutes les autres applications que je développe. Voici la partie pertinente de mon script de compilation:

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

Quand je tente de lancer, je reçois l'erreur suivante:

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�

Il semble que, à somepoint de la compilation, la chaîne contenant tous les chemins de bibliothèque sont se tronquée. Cela pourrait-il être dû à une limite de caractères sur CreateProcess? Cette chaîne de commande CreateProcess obtient d'être seulement environ 1024 caractères avant troncature, qui apparaît comme une petite limite. Y at-il de toute façon à augmenter cette limite? Toutes les pensées / solutions / solutions de contournement ont apprécié.

Merci, Mayur

Était-ce utile?

La solution

Le problème est que les caractères des lignes de commande de Windows sont limitées et 8191 GWT met le chemin complet de chaque pot dans le classpath. La seule façon de résoudre ce problème est de déplacer les pots dans un répertoire avec un chemin plus court.

Vous pouvez le faire sous Windows en faisant un lien symbolique et référencement ce lien dans votre fichier de construction. Quelque chose comme ceci

De la racine de c:

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

entrée Wikpedia sur les fenêtres des liens symboliques

Autres conseils

Une solution de contournement possible pour une classpath très longue est d'utiliser la propriété java.ext.dirs et de laisser tomber tout ce que vous la compilation des dépendances (les fichiers JAR qui sont maintenant référencés dans votre classpath) dans ce répertoire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top