Frage

Ich versuche, einen Ant-Build-Skript auszuführen, das GWT kompiliert. Dieses Skript enthält eine große Anzahl von Bibliotheken, die jeweils mit einem relativ langen Weg. Mein GWT-Code berührt nur einige dieser Bibliotheken; ist es jedoch praktisch alle der libaries aus dem lib-Verzeichnis aufzunehmen, die ich für diese und alle anderen Anwendungen verwende ich die Entwicklung bin. Hier ist der relevante Teil meines Build-Skript:

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

Wenn ich versuche, dies zu laufen, bekomme ich folgende Fehlermeldung:

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�

Es scheint bei somepoint der Compilation, dass die Zeichenfolge alle Bibliothekspfade enthalten abgeschnitten bekommen. Könnte dies zu einem gewissen Zeichenbegrenzung auf Create fällig? Diese Createbefehlsfolge wird vor dem Abschneiden nur etwa 1024 Zeichen lang sein, die wie eine kleine Grenze scheint. Gibt es trotzdem, diese Grenze zu erhöhen? Alle Gedanken / Lösungen / Abhilfen geschätzt.

Danke, Mayur

War es hilfreich?

Lösung

Das Problem ist, dass Windows-Befehlszeilen 8.191 Zeichen begrenzt sind und GWT wird den vollständigen Pfad in dem Classpath in jedes Glas setzen. Der einzige Weg, dies zu beheben, ist die Gläser in ein Verzeichnis mit einem kürzeren Pfad zu bewegen.

Sie können, indem sie einen symbolischen Link dies unter Windows tun und dann den Link in Ihrer Build-Datei verweist. So etwas wie diese

Von der Wurzel c:

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

Wikpedia Eintrag auf Windows symbolische Links

Andere Tipps

Eine mögliche Abhilfe für einen sehr langen Classpath ist die java.ext.dirs Eigenschaft zu verwenden und alles, was Sie Compiler-Abhängigkeiten zu fallen (die JAR-Dateien, die jetzt in Ihrem Classpath verwiesen werden) in diesem Verzeichnis.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top