Создание многоплатформенного приложения 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>
Кажется, это работает до сих пор. Я протестирую это еще немного и добавлю комментарий.