2009-06-03 16 views
2

GWT를 컴파일하는 ant 빌드 스크립트를 실행하려고합니다. 이 스크립트에는 상대적으로 긴 경로가있는 수많은 라이브러리가 포함되어 있습니다. 내 GWT 코드는 이러한 라이브러리 중 일부에만 닿습니다. 그러나, 내가 사용하고있는 다른 모든 응용 프로그램과 함께 사용하는 lib 디렉토리의 모든 libaries를 포함하는 것이 편리합니다. 여기 내 빌드 스크립트의 관련 부분은 다음과 같습니다많은 수의 매개 변수로 GWT 코드 컴파일 - CreateProcess의 char 제한?

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

내가 이것을 실행하려고, 나는 다음과 같은 오류가 발생합니다 :

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� 

컴파일 somepoint에서, 문자열이 모두 포함 된 것으로 보인다 라이브러리 경로 중 일부가 잘리지 않습니다. 이것이 CreateProcess의 글자 수 제한 때문일 수 있습니까? 이 CreateProcess 명령 문자열은 자르기 전에 길이가 약 1,024 자 밖에되지 않아 작은 제한 인 것처럼 보입니다. 이 제한을 늘리기 위해 어쨌든 가나 요? 모든 생각/솔루션/해결 방법을 고맙게 생각합니다.

감사합니다, Mayur

+0

오류를 포맷하십시오, 그것은 읽을 수 있습니다. –

+0

죄송합니다, 새로운 stackoverflow, 그래서 포맷 알아낼했다. 감사. – P4ndaman

답변

2

문제는 Windows 명령 줄은 8191 자로 제한되어 있으며 GWT는 클래스 패스의 각 병에 전체 경로를 지정하고 있습니다. 이 문제를 해결하는 유일한 방법은 항아리를 경로가 더 짧은 디렉토리로 옮기는 것입니다.

Windows에서 심볼릭 링크를 만든 다음 빌드 파일에서 해당 링크를 참조하여이 작업을 수행 할 수 있습니다. C의 루트에서이

식으로 뭔가 :

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

Wikpedia entry on windows symbolic links

0
매우 긴 클래스 경로에 대한 한 가지 가능한 해결 방법은 java.ext.dirs 속성을 사용하여이 모든 당신이 컴파일 시간 의존성 (현재 클래스 경로에서 참조하는 JAR-파일)을 드롭하는 것입니다

예배 규칙서.