マルチプラットフォームのGUI開発を行うために、GTK + Clojure(GTKのJavaバインディングがWindowsに移植されていないように見えるため)からSWT+Clojureに切り替えました。これまでのところ、Linux用に構築されたuberjarを入手したという点で非常に優れています。
ただし、問題は、Windows用のuberjarを作成したいということであり、project.cljファイルを管理するためのクリーンな方法を見つけようとしています。
最初は、SWTライブラリを指すようにクラスパスを設定してから、uberjarをビルドすることを考えました。これには、jarを実行する前にSWTライブラリへのクラスパスを設定する必要がありますが、とにかく、ランチャースクリプトが必要になる可能性があります。ただし、leiningenは常に次のことを報告するため、このインスタンスではクラスパスを無視しているようです。
現在、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
行です。Windows用のuberjarを作成したい場合は、に依存する必要がorg.eclipse/swt-win32-win32-x86
あり、別のuberjarをに依存する必要がx86-64
あります。
私の現在の解決策は、ビルド環境ごとに異なるブランチを作成することproject.clj
です。これは、セミを使用して1ガロンのミルクを提供するようなものですが、バージョン管理にバザールを使用しているため、分岐と繰り返しの統合が簡単です。project.linux.clj
、、などを使用するのがより良い方法かもしれproject.win32.clj
ませんが、どのプロジェクト記述子を使用するかをleiningenに指示する方法がわかりません。
そのような環境を設定する他の(できればよりエレガントな)方法は何ですか?