2009-04-15 4 views
1
여기

내 시나리오 :자바가 다른 JDK 버전으로 빌드 : 동일한 아티팩트?

  • 워크 스테이션 A : 썬 JDK 1.6
  • 워크 스테이션 B : 썬 JDK 나는 개미 1.7

    <javac srcdir="${foo}" destdir="${bar}" source="1.5" target="1.5"> 
        <include name="**/*.java"/> 
        <exclude name="**/test/**/*.java"/> 
    </javac> 
    

    으로 A와 B에 구축 1.5

그러나 .class 파일은 AB에서 다른 크기가됩니다. 이런 식으로되어 있니? 또는 나는 명백한 무엇인가 놓치고 있냐?

답변

5

예, 그렇습니다. 동일한 VM을 대상으로하더라도 다른 컴파일러가 서로 다른 바이트 코드를 내보낼 수 있습니다. 결과 프로그램이 올바르게 작동하는 한 JLS는 소스 코드가 바이트 코드로 컴파일되는 방식을 정확하게 요구하지 않습니다.

5

명시 적으로 설정할 수 있지만 source="1.5"target="1.5", 이것은 javac 컴파일러의 JDK 버전이 실행중인 하지 제어를 수행합니다.

따라서 JAVA_HOME/PATH이 JDK 1.6을 가리키는 워크 스테이션에서 1.5 JRE와 호환되어야하는 1.6 javac에 빌드 된 클래스 파일이 있습니다.

그러나 source="1.5"target="1.5"은 구문/언어 기능의 호환성 만 지정합니다. 1.6 JRE에서만 사용할 수있는 일부 클래스를 사용하는 경우 1.6 javac에서 source="1.5"target="1.5"을 사용할 때 여기에 컴파일러 경고가 표시되지 않습니다.

이 마지막 지점을 처리하려면 <javac> 개미 작업에 다른 bootclasspath을 사용하도록 지시해야합니다.

+0

+1 - 답이 아니라 유용한 팁 (생각하지 못했습니다) –

+0

꽤 안좋은 해결 방법입니다. 올바른 들여 쓰기 된 jdk를 사용하는 것이 훨씬 쉽습니다. –

관련 문제