为了进行一些多平台的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
,而另一个依赖x86-64
,依此类推。
我当前的解决方案是为每个具有不同project.clj
的构建环境简单地创建一个单独的分支。这似乎有点像用半杯牛奶输送一加仑牛奶,但是我使用集市进行版本控制,因此分支和重复集成很容易。也许更好的方法是使用project.linux.clj
,project.win32.clj
等,但我看不出有任何方法可以告诉leiningen使用哪个项目描述符。
设置这种环境的其他(最好是更优雅的)方法是什么?
为了进行一些多平台的GUI开发,我刚刚从GTK + Clojure(因为看起来GTK的Java绑定从未移植到Windows)切换到SWT + Clojure。到目前为止,...
这里是使用Java系统属性的非常优雅的解决方案: