- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这样的文件夹结构:
我已经使用 lein uberjar
创建了我的可运行 jar。
运行我的 jar 时,我想列出 a
的子文件夹。
我知道我可以使用 clojure.java.io 获取 resources/a/b/x.txt 的内容
(slurp (clojure.java.io/resource "a/b/x.txt"))
但我找不到列出子文件夹的简单方法。
(clojure.java.io/file (clojure.java.io/resource "a"))
只是导致 java.lang.IllegalArgumentException: Not a file
因为它不是文件,所以它是 jar 文件中的资源。
是否有库可以执行此操作?
最佳答案
这里是 java 特定答案的代码端口:
(ns my-project.core
(:require [clojure.string :as cs])
(:import java.util.zip.ZipInputStream)
(:gen-class))
(defrecord HELPER [])
(defn get-code-location []
(when-let [src (.getCodeSource (.getProtectionDomain HELPER))]
(.getLocation src)))
(defn list-zip-contents [zip-location]
(with-open [zip-stream (ZipInputStream. (.openStream zip-location))]
(loop [dirs []]
(if-let [entry (.getNextEntry zip-stream)]
(recur (conj dirs (.getName entry)))
dirs))))
(defn -main [& args]
(println (some->> (get-code-location)
list-zip-contents
(filter #(cs/starts-with? % "a/")))))
被放入主命名空间并使用 jar 运行将输出 /resources/a
文件夹中的所有路径..
java -jar ./target/my-project-0.1.0-SNAPSHOT-standalone.jar
;;=> (a/ a/b/ a/b/222.txt a/222.txt)
还有一些快速研究让我找到了这个库: https://github.com/ronmamo/reflections
它缩短了代码,但也需要项目的一些依赖项(我想这可能是不受欢迎的):
[org.reflections/reflections "0.9.11"]
[javax.servlet/servlet-api "2.5"]
[com.google.guava/guava "23.0"]
代码是这样的:
(ns my-project.core
(:require [clojure.string :as cs])
(:import java.util.zip.ZipInputStream
[org.reflections
Reflections
scanners.ResourcesScanner
scanners.Scanner
util.ClasspathHelper
util.ConfigurationBuilder])
(:gen-class))
(defn -main [& args]
(let [conf (doto (ConfigurationBuilder.)
(.setScanners (into-array Scanner [(ResourcesScanner.)]))
(.setUrls (ClasspathHelper/forClassLoader (make-array ClassLoader 0))))]
(println
(filter #(cs/starts-with? % "a/")
(.getResources (Reflections. conf) #".*")))))
关于java - Clojure 列出 uberjar 资源中的子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46488466/
我有一个生成 jar 文件的 Maven 模块。我被要求开发其他几个 uberjar 文件 作为构建过程的副产品。我还被告知这 2 个 jar 文件是 applet jar 文件 将需要包含来自 ma
lein run,lein trampoline run和将clojure应用程序部署为uberjar有什么区别?性能上有区别吗? 如果我执行lein run/lein trampoline run,
我使用 maven-shade-plugin 进行构建,执行了 mvn-clean-package 并能够从目标目录中执行代码,如下所示:java -cp uber-weather-lookup-1.
我用 Clojure 构建了一个非常简单的网络应用程序(事实上,我遵循了一个教程)。 project.clj 文件如下所示: (defproject webdev "0.1.0-SNAPSHOT"
我使用 lein uberjar 创建应用程序的独立 jar。 执行时 java -jar dataloader-0.1.0-SNAPSHOT-standalone.jar, 它崩溃了: Caused
我正在使用“lein uberjar”为我的项目制作一个可执行的 jar 文件。 jar 已正确创建并按预期运行。 我只想知道是否可以不将我的源 .clj 文件包含在生成的 .jar 中,因为我打算分
我正在尝试使用 clojure Web 框架 noir 分发一个小型 Web 应用程序构建。当使用 lein run 运行时,它会按预期工作。当我运行 lein uberjar ,然后运行 jav
如何生成监听给定端口的独立环 uberjar ? 开发时,我使用以下 leiningen/ring 命令启动我的应用程序,我可以在其中指定端口: lein with-profile dev ring
我在 profile.clj 中定义了 :resource-paths 以包含一些特殊的 jar (vertica jdbc) 文件。然后我运行 lein uberjar: 尝试将该 jar 文件打包
我正在与 leiningen 和 Clojure 合作创建一个 uberjar,因此我有一个用于部署的文件。我还使用 leiningen 的默认资源路径嵌入了一些静态文件,其名称和数量因构建而异。有没
我已经研究这个有一段时间了,但我不得不问:现在不是可以通过 Eclipse 来完成吗?我找到了有关 Maven 和 Ant 的答案,但我从未使用过。如果我的输出 .jar 文件是一个可运行的 jar,
我正在尝试使用 Reflections 0.9.8 库,它以 uber-jar 的形式提供。如果我在项目的构建路径中添加它的 JAR(“reflections-0.9.8-uberjar”),那么 E
当以下 Clojure 示例程序被打包到一个独立的 uberjar 中(通过 boot-clj)时,java -jar app.jar 的执行行为不同于调用 -main 开发 repl 中的函数。 (
使用leiningen构建Clojure应用程序时,如何在使用lein uberjar时排除某些依赖被包含在JAR文件中? 最佳答案 使用 provided leiningen 个人资料的条目。 :
使用 leiningen 创建 uberjar 并使用 java -jar foo-uberjar.jar 运行该 jar 后程序运行良好,最后一行代码执行得相当快,但程序在关闭前挂了大约一分钟。这是
我有一个 Clojure“主”应用程序,它依赖于几个 Clojure 库,其中两个是我的。编译阶段,无论是编译还是运行uberjar都需要很长时间。至少需要一分钟或更长时间。我的图书馆和主要图书馆都不
从 uberjar 运行时,Ring 的文件响应对我不起作用。我都试过了 (response/file-response "index.html" {:root "resources/public"}
我想用不同的 main 创建许多 uberjars来自单个代码库的入口点。我看你可以指定main命名空间作为 lein uberjar 的参数但我没有看到指定结果文件名或路径的方法,因此它们只会相互覆
如何重命名和移动使用 SBT 程序集插件生成的 uberjar? addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6") 我的 assembl
我想做一些实时图形渲染,并尝试对每帧每个像素进行多次计算。然后我很快注意到这非常慢并且从最基础开始:我能以多快的速度循环所有像素? 我发现 dotime 相当快,但是当我在 REPL 中执行此操作时,
我是一名优秀的程序员,十分优秀!