2

私が所有していない 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

の他の 2 つの関連ファイルを次に示します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たが、私のユース ケースでは 2 つの問題があります。

  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/fooJAR にはその 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 サブモジュールなど) をリソースとして特定の場所にあるファイルセットにプルするにはどうすればよいですか?

4

0 に答える 0