Чтобы сделать несколько многоплатформенных графических интерфейсов, я только что переключился с GTK + Clojure (потому что похоже, что привязки Java для GTK никогда не были перенесены в Windows) в SWT + Clojure. До сих пор так хорошо, что я получил убержар, созданный для Linux.
Уловка заключается в том, что я хочу создать uberjar для Windows, и я пытаюсь найти чистый способ управления файлом project.clj.
Сначала мне показалось, что я должен установить classpath для указания на SWT-библиотеки, а затем построить uberjar. Это потребует, чтобы я установил путь к классам SWT-библиотек перед запуском jar, но мне, вероятно, понадобится запускать script. Однако leiningen, кажется, игнорирует classpath в этом случае, потому что он всегда сообщает, что
В настоящее время project.clj выглядит так для меня:
(defproject alyra.mana-punk/character "1.0.0-SNAPSHOT"
:description "FIXME: write"
:dependencies [[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]
[org.eclipse/swt-gtk-linux-x86 "3.5.2"]]
:main alyra.mana-punk.character.core)
Соответствующей строкой является строка org.eclipse/swt-gtk-linux-x86. Если я хочу сделать uberjar для Windows, я должен зависеть от org.eclipse/swt-win32-win32-x86, а другой для x86-64 и т.д. И т.д.
Мое текущее решение - просто создать отдельную ветвь для каждой среды сборки с другим project.clj. Это похоже на использование полу для доставки одного галлона молока, но я использую базар для контроля версий, поэтому разветвление и повторная интеграция просты. Может быть, лучший способ - иметь project.linux.clj, project.win32.clj и т.д., Но я не вижу никакого способа сказать leiningen, какой дескриптор проекта использовать.
Какие другие (желательно более элегантные) способы настройки такой среды?