建立基于构建平台需要不同依赖项的leiningen项目的优雅方法是什么?

问题描述 投票:13回答:1

为了进行一些多平台的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.cljproject.win32.clj等,但我看不出有任何方法可以告诉leiningen使用哪个项目描述符。

设置这种环境的其他(最好是更优雅的)方法是什么?

为了进行一些多平台的GUI开发,我刚刚从GTK + Clojure(因为看起来GTK的Java绑定从未移植到Windows)切换到SWT + Clojure。到目前为止,...

clojure cross-platform leiningen
1个回答
18
投票

这里是使用Java系统属性的非常优雅的解决方案:

© www.soinside.com 2019 - 2024. All rights reserved.