2012-06-05 1 views
0

Windows (32/64 비트) 및 Mac OSX (32/64 비트)에서 사용할 수있는 SWT 응용 프로그램을 작성하고 있습니다.Ant를 사용하여 다중 플랫폼 SWT 응용 프로그램 빌드하기

JRE 이외에도 SWT 라이브러리에 의존하여 here을 찾았습니다. 내 타겟 플랫폼에 따라 위에서 설명한 SWT 라이브러리의 네 가지 버전을 찾을 수 있습니다.

내 응용 프로그램을 빌드 할 때 올바른 SWT Jar를 사용하여 어떻게 컴파일 할 수 있습니까? 가능하다면 Jar 버전, 플랫폼 및 아키텍처를 하드 코딩하지 않으려 고 노력하고 싶습니다. SWT 항아리는 다음과 같이 지정됩니다

  • SWT-는 Win32-x86_64.jar
  • SWT-는 Win32-x86_32.jar
  • SWT-에서라도-x86_32.jar
  • SWT-에서라도-x86_64에. jar

(내 프로젝트는 오픈 소스 프로젝트가 될 것입니다. 사람들이 소스를 다운로드하여 빌드 할 수 있기를 바랍니다. 따라서 SWT Jar의 네 가지 버전 모두를 포함시킬 생각이었습니다. 소스 배포. 코드를 게시하는 올바른 방법이라고 생각합니다. 제 3 자 라이브러리에 의존합니다.)

모두에게 감사드립니다.

+1

다음 링크를 확인하셨습니까? http://stackoverflow.com/questions/7134219/swt-jar-for-different-platform http://stackoverflow.com/questions/2706222/create-cross-platform-java- swt-application /. 두 번째 링크에서 언급 한 커스텀 앤트 태스크가 있습니다. 그걸 확인해 봤어? – Favonius

+0

안녕하세요 Favonius. 그 링크가 도움이 보입니다. 나는 그들을 자세히 살펴볼 것이다. 이 문제를 해결하기 위해 다른 해결 방법을 사용했습니다. 내 대답은 아래에있다. 이 방법에 대한 당신의 생각은 무엇입니까? 고맙습니다. –

답변

0

나는 이것을 달성하려고 노력했다 : if 문을 지원하기 때문에 Ant Contrib 작업을 설치했다. OS 플랫폼과 아키텍처를 감지하기 위해 빌드 파일을 수정했습니다.

컴파일 할 때 컴파일러는 lib.dir의 4 개의 SWT Jar를 모두 사용하지만 컴파일 후 필요한 SWT Jar 만 내 빌드 디렉토리로 복사합니다. 내 최종 ZIP 크기를 유지하는 것이 네 개의 JAR을 모두 유지하는 것보다 훨씬 작을 것 같습니다.

<target name="copy" depends="compile"> 
    <if> 
    <os family="windows"/> 
    <then> 
     <exec dir="." executable="cmd" outputproperty="command.ouput"> 
      <arg line="/c SET ProgramFiles(x86)"/> 
     </exec> 
     <if> 
      <contains string="${command.ouput}" substring="Program Files (x86)"/> 
      <then> 
       <copy file="${lib.dir}/swt-win32-x86_64.jar" tofile="${jar.dir}/SWT.jar"/> 
      </then> 
      <else> 
       <copy file="${lib.dir}/swt-win32-x86_32.jar" tofile="${jar.dir}/SWT.jar"/> 
      </else> 
     </if> 
    </then> 
    <elseif> 
     <os family="unix"/> 
     <then> 
      <exec dir="." executable="/bin/sh" outputproperty="command.ouput"> 
       <arg line="/c uname -m"/> 
      </exec> 
      <if> 
       <contains string="${command.ouput}" substring="_64"/> 
       <then> 
        <copy file="${lib.dir}/swt-macosx-x86_64.jar" tofile="${jar.dir}/SWT.jar"/> 
       </then> 
       <else> 
        <copy file="${lib.dir}/swt-macosx-x86_32.jar" tofile="${jar.dir}/SWT.jar"/> 
       </else> 
      </if> 
     </then> 
    </elseif> 
    </if> 
</target> 

이것은 지금까지 작동하는 것 같습니다. 좀 더 테스트하고 코멘트를 추가하겠습니다.

+1

당신은'컴파일 할 때 lib.dir의 4 개의 SWT Jar를 모두 사용합니다. '라는 느낌의 문제는 클래스 패스에서 언급 한 순서에 따라 픽업 할 수 있다는 것입니다. 대상 기계와 호환 가능해야합니다. 예를 들어, macosx 용 win32 jar 또는 win32 용 win64 jar를 선택합니다. – Favonius

+0

포인트가 있습니다. 나는 파일의 순서와 그 효과와 포스트를 실험 할 것이다. –

관련 문제