clojure – 什么是优雅的方式来建立一个基于构建平台需要不同依赖关系的leiningen项目?

前端之家收集整理的这篇文章主要介绍了clojure – 什么是优雅的方式来建立一个基于构建平台需要不同依赖关系的leiningen项目?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为了做一些多平台的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要使用哪个项目描述符.

什么是其他(优选更优雅)的方式来建立这样的环境?

这是一个非常优雅的解决方案,使用Java系统属性
(let [properties (select-keys (into {} (System/getProperties))
                              ["os.arch" "os.name"])
      platform (apply format "%s (%s)" (vals properties))
      swt (case platform
            "Windows XP (x86)" '[org.eclipse/swt-win32-win32-x86 "3.5.2"]
            "Linux (x86)"      '[org.eclipse/swt-gtk-linux-x86 "3.5.2"])]
  (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"]
                   ~swt]
    :main alyra.mana-punk.character.core))
原文链接:https://www.f2er.com/javaschema/281777.html

猜你在找的设计模式相关文章