为了进行一些多平台 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
. 这似乎有点像使用半成品来提供一加仑牛奶,但我使用 bazaar 进行版本控制,因此分支和重复集成很容易。也许更好的方法是使用project.linux.clj
,project.win32.clj
等,但我看不出有任何方法可以告诉 leiningen 使用哪个项目描述符。
还有什么其他(最好更优雅)的方式来设置这样的环境?