Создание многоплатформенного приложения SWT с использованием Ant

Я пишу SWT-приложение, которое можно использовать в Windows (32/64 бит) и Mac OSX (32/64 бит).

Помимо JRE я полагаюсь на библиотеку SWT, найденную здесь. Я могу найти четыре версии библиотеки SWT в зависимости от моих целевых платформ (как упомянуто выше).

При сборке приложения, как я могу скомпилировать, используя правильный SWT Jar? Если возможно, я бы хотел избежать жесткого кодирования версии Jar, платформы и архитектуры. Банки SWT названы так:

  • свт-win32-x86_64.jar
  • свт-win32-x86_32.jar
  • свт-MacOSX-x86_32.jar
  • свт-MacOSX-x86_64.jar

(Мой проект будет проектом с открытым исходным кодом. Я бы хотел, чтобы люди могли загрузить исходный код и собрать его, и поэтому я подумал о включении всех четырех версий SWT Jars в дистрибутив исходного кода. Я надеюсь, что это правильный подход к публикации кода с использованием сторонних библиотек.)

Спасибо всем.

1 ответ

Решение

Я пытался сделать это так: я установил задачи Ant Contrib, потому что он поддерживает if заявления. Я изменил свой файл сборки, чтобы использовать его для определения платформы и архитектуры ОС.

При компиляции используются все 4 файла SWT из моего lib.dir но после компиляции он копирует только необходимый 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>

Кажется, это работает до сих пор. Я протестирую это еще немного и добавлю комментарий.

Другие вопросы по тегам