0

Windows (32/64 ビット) および Mac OSX (32/64 ビット) で使用できる SWT アプリケーションを作成しています。

JRE とは別に、ここにある SWT ライブラリに依存しています。ターゲット プラットフォームに応じて、SWT ライブラリの 4 つのバージョンを見つけることができます (前述のとおり)。

アプリケーションをビルドするとき、正しい SWT Jar を使用してコンパイルするにはどうすればよいですか? 可能であれば、Jar のバージョン、プラットフォーム、およびアーキテクチャをハードコーディングすることは避けたいと考えています。SWT Jar は次のように命名されます。

  • swt-win32-x86_64.jar
  • swt-win32-x86_32.jar
  • swt-macosx-x86_32.jar
  • swt-macosx-x86_64.jar

(私のプロジェクトはオープンソースプロジェクトになります。人々がソースをダウンロードしてビルドできるようにしたいので、ソースディストリビューションに SWT Jar の 4 つのバージョンすべてを含めることを考えました。これがサードパーティ ライブラリに依存するコードを公開する正しいアプローチです。)

みんな、ありがとう。

4

1 に答える 1

0

私は次のようにそれを達成しようとしました:ステートメントをサポートするため、AntContribタスクをインストールしましたif。OSプラットフォームとアーキテクチャの検出に使用するようにビルドファイルを変更しました。

コンパイル時には、私の4つのSWT Jarがすべて使用されますlib.dirが、コンパイル後は、必要なSWTJarのみがビルドディレクトリにコピーされます。これにより、4つすべてのJARを保持するよりも、最終的なZIPのサイズをはるかに小さく保つことができると思います。

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

これは今のところうまくいくようです。もう少しテストしてコメントを追加します。

于 2012-06-05T10:37:11.680 に答える