如何将特定文件拖入文件集?

时间:2016-08-24 20:32:48

标签: file clojure boot-clj

我正在编写一个库,该库使用我不拥有的GitHub存储库中的文件:

git init foo
cd foo
git submodule add https://github.com/KhronosGroup/Vulkan-Docs.git github/KhronosGroup/Vulkan-Docs
mkdir -p src/com/example/foo resources/com/example/foo

以下是foo中的其他两个相关文件。

build.boot

(set-env!
 :resource-paths #{"src" "resources"}
 :dependencies '[[adzerk/bootlaces "0.1.13" :scope "test"]])

(require '[adzerk.bootlaces :refer :all])

(deftask run [f function SYM sym]
  (with-pass-thru _
    (require (symbol (namespace function)))
    ((resolve function))))

(def +version+ "0.1.0-SNAPSHOT")

(bootlaces! +version+ :dont-modify-paths? true)

(task-options!
 pom {:project 'com.example/foo
      :version +version+})

src/com/example/foo/core.clj

(ns com.example.foo.core
  (:require [clojure.java.io :as io]))

(defn bar []
  (some-> "com/example/foo/spec.xml" io/resource slurp count prn))

我想要的是某种add任务,它允许我做这样的事情:

boot add --resource --from github/KhronosGroup/Vulkan-Docs/src/spec/vk.xml --to com/example/foo/spec.xml run -f com.example.foo.core/bar
585128

我尝试使用sift-R选项,但我的用例有两个问题:

  1. 远远超过我想要的文件(vk.xml)被拉入文件集,这会使我的JAR大小膨胀
  2. 因为-R只是将目录添加到资源路径集中,所以它的所有内容都被添加到顶层的文件集中,这很容易破坏我自己的资源
  3. 基本上,我想要的东西与以下三个命令具有相同的效果,但实际上没有触及resources目录:

    cp github/KhronosGroup/Vulkan-Docs/src/spec/vk.xml resources/com/example/foo/spec.xml
    boot build-jar
    rm resources/com/example/foo/spec.xml
    

    换句话说,com.example/foo JAR应该包含该XML文件作为资源,因此当我从另一个项目使用com.example/foo时,该资源应该可用:

    boot -d com.example/foo:0.1.0-SNAPSHOT repl
    
    (require '[com.example.foo.core :as foo])
    ;;=> nil
    
    (foo/bar)
    ;; 585128
    ;;=> nil
    

    如何将特定文件(例如从Git子模块)作为资源拉到特定位置的文件集中,而不触及文件集中已有的任何文件?

0 个答案:

没有答案