Code GWT avec la compilation d'un grand nombre de paramètres - limite char sur CreateProcess?
-
09-09-2019 - |
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
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
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.