문제

나는 컴파일을 시도하고 100java 클래스에서 다른 패키지에서 깨끗 디렉터리(더 증가 컴파일)사용하여 다음과 같은 개미는 작업:

<target name="-main-src-depend">
    <depend srcdir="${src.dir}" 
            destdir="${bin.dir}" 
            cache="${cache.dir}"
            closure="true"/>
</target>   

<target name="compile" depends="-main-src-depend"
        description="Compiles the project.">

    <echo>Compiling</echo>

    <javac  target="${javac.target}"
            source="${javac.source}"
            debug="${javac.debug}"
            srcdir="${src.dir}"
            destdir="${bin.dir}">
        <classpath>
            <path refid="runtime.classpath"/>
            <path refid="compile.classpath"/>
        </classpath>
    </javac>
</target>

그러나,처음으로 제가 실행하는 컴파일 작업 난 항상 StackOverflowException.실행하는 경우 작업을 다시 컴파일러가 증가를 구축하고 모든 것이 잘 작동합니다.이것은 바람직하지 않은 때문에 우리가 사용하는 CruiseControl 을 자동으로 매일 구축하고 이를 일으키는 거짓을 구축 실패입니다.

으로는 빠르고 더러운 솔루션을 내가 만든 2 개의 별도 작업,컴파일하는 부분의 프로젝트에서 각.나는 진짜로 생각하지 않는 이 솔루션을 개최으로 더 많은 클래스를 미래에 추가,그리고 나는 원하지 않는 것을 추가하는 새로운 컴파일 작업을 모든 시간을 우리는"컴파일한".

도움이 되었습니까?

해결책

그것은 좋은 것을 알;무엇을 할 수 생하거나 발생 StackOverflowError 컴파일 중에 자바의 코드?

그것은 가능성을 평가하는 긴 식 java 파일 많이 소모하기 때문에 이것은에서와 함께 컴파일을 다른 클래스,VM 그냥 다 떨어 스택의 공간입니다.귀하의 생성되는 클래스가 아마 추진하는 법률에 대한 제한 내용입니다.장 참조 4.10 의 한계 Java 가상 머신Java 가상 머신 사양,Second Edition.

수정 1:리팩터링 클래스

이 클래스는 생성이 되지 않을 수도 있습니다.여전히 가치가있다,에서 옵션을 반대 도구를 제공할 수 있는지 확인하기 생산하는 적은 것이 곤란합니다.

수정 2:증가 스택 크기

나는 생각한 Kieron 은 하나의 솔루션을 언급할 때-Xss 인수입니다. javac 의 번호를 표준이 아닌 인수 사이에서 변화 버전과 컴파일러 공급 업체입니다.

내 컴파일러:

$ javac -version
javac 1.6.0_05

위 목록에 대한 모든 옵션을,내가 이러한 명령을 사용:

javac -help
javac -X
javac -J-X

생각 스택에 대한 제한 javac 은 512Kb 기본적으로 합니다.당신이 증가할 수 있는 스택 크기를 위한 이 컴파일러 10Mb 이 명령:

javac -J-Xss10M Foo.java

할 수 있습니다 이에 개미와 파일 compilerarg 요소 중첩에 javac 작업입니다.

<javac srcdir="gen" destdir="gen-bin" debug="on" fork="true">
    <compilerarg value="-J-Xss10M" />
</javac>

다른 팁

  <javac srcdir="gen" destdir="gen-bin" debug="on" fork="true">
      <compilerarg value="-J-Xss10M" />
    </javac>

위의 댓글 잘못된 것입니다.당신은 필요한 공간 사이-J-X,다음과 같:

<javac srcdir="gen" destdir="gen-bin" debug="on" fork="true">
    <compilerarg value="-J -Xss10M" />
</javac>

을 다음과 같은 오류가 발생하지 않도록:

 [javac] 
[javac] The ' characters around the executable and arguments are
[javac] not part of the command.
[javac] Files to be compiled:

...[javac]javac:잘못된 국기:-J-Xss1m [javac]사용:javac

를 추가하려고 어떤 변화의 이러한 특성을 개미 javac 작업 라인:

memoryinitialsize="256M" memorymaximumsize="1024M"

할 수도 있습니다 fork="true", 지 않으면 이것은 당신의 값을 설정하는 스택과 힙(aka-Xm1024),하지만 그것이 도움이 될 수 있(만 명령행에서만 개미).

[편집]:추가 링크가-- javac 작업 페이지는 것이 좋습니다 것으로 보인 매개변수 위를 수행하는 데 필요한 설정 fork="true".

는 이런 일이 일어날 실행할 때 javac 명령 명령행에서?할 수 있도 포크 특성이 있습니다.

는 매우 이상,100 클래스는 정말 없는 많습니다.무엇을 컴파일 하기 때 stack overflow?거기에 유용한 스택 추적이가 있을까요?무슨 일을 실행하는 경우 javac 직접 명령행에 대신 지식을 통해 개미?

가능한 한 가지 해결 방법이 단순히 증가 스택 크기를 사용하는 -Xss 인수 JVM;하거나 JVM 실행 ant 나에 의해 설정 fork="true"<compilerarg><javac> 작업입니다.실제로 이제는 나의 생각,그것은 문제 멀리 가서 그냥 퍼팅 fork="true"?

여기에 내가 무엇을 발견했다.게시 후 나의 질문에 갔고 수정 컴파일 작업으로 특성 fork="true", memoryinitialsize="256m"memorymaximumsize="1024m" (발견된 오늘는 이에 의해 제안되었다 Kieron 및 jmanning2k,감사 시간).이 문제를 해결하지 않은지 그럼에도 불구하고.

내가 시작하기로 결정하고 제거하는 클래스에서 소스 트리를 보는 경우에 할 수 있을 정확하게 문제입니다.밝혀 우리는 웹 서비스의 클라이언트 클래스 축 1.4 는 자동 생성 WSDL 파일에서.지금 이 클래스는 괴물(으로서는 프랑켄슈타인)고 있 167 필드 구성원들(그들 모두의 형식 문자열),167 터 구 쌍(1 각 분야),생성자를 받는 모든 167 필드를 매개변수로서 다음 방법 비교하는 모든 167 드에서 이상한 방법입니다.각 필드에 대해 비교법은 다음과 같습니다.

(this.A == null && other.getA() == null) || (this.A != null && this.A.equals(other.getA()))

이러한 결과는 비교가"anded"(&&)결과의 비교를 다음의 분야 및입니다.클래스 간에 차이는 방법도 사용하는 모든 분야,어떤 사용자 지정 XML 직렬화 방법 및 그 방법을 반환하는 축별 메타데이터 개체에 대해 설명하는 클래스를 사용하는 모든 분야 회원입니다.

이 클래스는 수정하지는 않습니다,그래서 그냥 넣어 버전을 컴파일 응용 프로그램에서 클래스 경로 및 프로젝트를 컴파일하지 않고 문제입니다.

지금,나는 알고 제거하는 것이 하나의 소스 파일에 문제를 해결했다.그러나 나는 절대적으로 아무 생각이 왜 이는 특정 클래스 발생하는 문제입니다.그것은 좋은 것을 알;무엇을 일으킬 수 있거나 원인 StackOverflowError 컴파일 중에 자바의 코드?나가시는 질문입니다.

관심있는 사람들을 위해:

  • Windows XP SP2
  • 태양 JDK1.4.2_17
  • Ant1.7.0
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top