我正在编写一个库,它使用我不拥有的 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
我尝试使用 的-R
选项sift
,但它对我的用例有两个问题:
- 比我想要的(
vk.xml
)更多的文件被拉入文件集中,这会膨胀我的 JAR 的大小 - 因为
-R
只是将目录添加到资源路径集中,它的所有内容都添加到顶层的文件集中,这很容易破坏我自己的资源
本质上,我想要与以下三个命令具有相同效果的东西,但实际上并没有触及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 子模块)作为资源拉入特定位置的文件集中,而不触及文件集中已有的任何文件?