问题标签 [boot-clj]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
416 浏览

clojurescript - 带有客户端路由的 SPA 的 Clojure 服务器配置

我正在开发一个在客户端路由的 ClojureScript 单页应用程序。我想实现一个简单的服务器,它可以为我的 index.html 和 CSS/JS 提供服务。这个想法是将除 /static/* 之外的所有请求传递到客户端并允许我的 SPA 处理它。

结果出乎意料地困难。下面的片段是我想出来的,但它不起作用。

我将 boot-http 与自定义处理程序一起使用。它有可能导致它吗?

0 投票
0 回答
223 浏览

clojure - boot-clj watch build -> 运行 jar - 确定 -> 更改代码 -> 运行 jar - 失败:找不到类

我用命令构建 jar,boot build watch然后我能够用java -jar target/project.jar命令成功执行它。源代码更改并重建后,执行失败并显示消息

Caused by: java.io.FileNotFoundException: Could not locate my_dir/foo__init.class or my_dir/foo.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.

我有以下文件结构

build.boot内容:

foo.clj内容:

core.clj内容:

现在我已经boot build watch运行,当我将core.clj的内容更改为 eg(println "second run")时,等待重建并运行生成的 project.jar 我得到上面提到的找不到类错误。最后可行的是通过boot build命令手动重建代码并重新运行,但我想这样做,但boot watch build我很不明白为什么它不能那样工作。我是新手,所以我可能会遗漏一些明显的东西,但仍然想知道。有任何想法吗?

启动版本

0 投票
0 回答
191 浏览

unit-testing - boot-clj:如何为使用 gen-class 生成的类构建/启动单元测试

在我的 clojure 项目中,我使用gen-class命令构建了几个 java 类。他们是[extractor.yaml YAMLExtractor YAMLExtractorFactory]。我现在想针对这些类构建单元测试,但我有错误:java.lang.ClassNotFoundException: extractor.yaml.YAMLExtractor当我运行测试时。

导致错误的文件是: yaml_extrator_factory.clj

该错误仅在测试期间发生。整个项目是 AOT 可编译的,没有错误,当我构建一个 jar 文件时也很好。

测试simple.clj包含头:

并测试哪个打印 CLASSPATH。yaml-extractor-factory没有使用。使用命令运行测试:

boot aot -a update-classpath run-test -t extractor.simple

其中任务update-classpath添加(get-env :directories)到类路径和run-test运行测试。run-test与普通的 clojure 代码一起工作正常。

运行测试是我的任务,内容如下:

0 投票
0 回答
68 浏览

maven - 预测 boot-clj 构建项目所需的所有依赖项

通常 boot 将所有获取的依赖项存储在本地 maven 存储库中,该存储库位于~/.m2/repository.

将环境变量设置BOOT_LOCAL_REPO到另一个目录时,它只会使用选择的那个。

考虑一下:

boot 现在将获取它需要的所有 jar 到本地repo文件夹。

当第二次调用boot build时,将没有任何东西可取,并且建筑物会立即启动。

我正在开发一个从引导文件生成 nix 表达式的引导任务。为此,我需要预测引导构建项目所需的所有依赖项。基本上,repo文件夹的内容。这仅部分有效:在启动任务中使用以下内容时获得的最佳结果:

我会从外部获取那些罐子并将其存储在 repo 文件夹中。然而,当运行 boot build 时,仍然有一些 jars 会被 boot 获取。应该避免这种情况。例如,它发生在那些:

(实际上看起来 boot 只需要 poms 而不是那些文件的 jar)

有人知道如何识别它们吗?

0 投票
1 回答
325 浏览

clojure - 为 Clojure/boot 寻求简单的工作流程设置

您如何设置引导以便:(a)所有源文件都在当前目录中,(b)每次源文件更改时运行单元测试,(c)REPL 在包含它们的源文件更改时刷新定义?

具体来说:

  • 什么进去build.boot

  • 启动 REPL 的 shell 命令是什么?和/或 REPL 中的什么命令开始监视单元测试?

  • 我还需要做哪些其他常规设置?

我已经阅读了很多关于bootboot-testboot-quick-testREPL reloading in bootboot-refresh的文档,但是我还没有做很多工作。到目前为止,我发现的文档似乎提供了花絮和提示,但没有提供将这些东西放在一起所需的东西。

一个适当的build.boot(以及其他任何东西)的简单示例将特别有帮助。


到目前为止,这就是我所拥有的(某种)作品。

在当前目录中加一个文件,sample.clj

这会启动以在当前目录中查找源文件,它使我能够sample.clj通过键入(refresh)REPL 手动重新加载更改。(boot (test))用于在.clj文件中手动运行单元测试,但我刚才尝试时失败了,错误“传递给核心/测试的 args (0) 数量错误”。

这样做的正确方法是什么?

0 投票
0 回答
118 浏览

clojurescript - ClojureScript + boot:使非 CLJSJS 库可用于测试代码?

在对 ClojureScript 项目使用引导时,如何使外部CLJSJS JavaScript 库可用于测试代码(相对于应用程序代码)?

当应用程序代码包含在与库相同的 HTML 页面中时,可以访问它。

(使用leiningen + figwheel,测试代码在与应用程序代码相同的上下文中运行——在我的index.html页面上——因此测试代码知道第三方 js 库。)

测试代码的引导中是否有类似的页面上下文?conj或者有没有办法["resources/third-party/library.js"]进入源或资源路径,以便单元测试可以引用与应用程序代码相同的库?

当我运行boot auto-test它说#object[ReferenceError ReferenceError: Can't find variable: CodeMirror]就我而言, CodeMirror是第三方库。我的单元测试需要一个 CodeMirror 实例,所以他们可以.setValue,然后调用一堆 CodeMirror 方法来告诉实例要做什么,然后验证实例的新值和光标位置。我正在测试我的 ClojureScript 是否对 CodeMirror 提出了正确的调用以达到预期的效果。

我已经能够使用 CodeMirror 的最新CLJSJS版本,但它没有通过我的单元测试,而直接来自 CodeMirror 的最新非 CLJSJS 版本确实通过了。所以我猜我需要最新的 CodeMirror,它还没有通过 CLJSJS 提供。

这是我build.boot文件的一部分:

0 投票
3 回答
143 浏览

clojure - 如何编写启动脚本来加载 quil/processing 草图?

我已经启动了其他示例,但我尝试将它与 quil/Processing 一起使用。我编写了这个简单的脚本并尝试运行它,但它所做的只是启动一个 Java Applet 窗口,然后立即关闭。没有可供我调试的错误日志。

0 投票
2 回答
1695 浏览

clojure - 类路径冲突:org.clojure/clojure 版本 1.7.0 已加载,未加载版本 1.8.0

将 build.boot 文件从旧项目复制到新项目时,出现以下错误,在 Google 上一无所获:

类路径冲突:org.clojure/clojure 版本 1.7.0 已加载,未加载版本 1.8.0

0 投票
2 回答
324 浏览

clojure - (boot (refresh)) => Can't set!: *e from non-binding thread

我已经安装了samestep/boot-refresh 0.1.0。在启动 REPL中,当我更改源文件并键入:

我得到:

我究竟做错了什么?


这是完整的堆栈跟踪:

堆栈跟踪中没有提到我自己的代码。我以前看过(boot (refresh))REPL 的工作,但我无法找出我正在做的不同导致此错误的原因。


更新 1

在使用许多打印语句进行长时间的二进制搜索之后——正如@amalloy 的回答中所解释的那样,真正异常的堆栈跟踪是不可访问的——我发现了这一点:

在名为 的命名空间move-test中,此语句:

导致(boot (refresh))失败。当我将其替换为:

ns声明中,(boot (refresh))再次工作。这暂时解决了当前的问题,但我仍然想知道发生了什么。


更新 2

继续尝试开始(boot (refresh))工作,很明显问题每次都不一样。@amalloy 的回答表明,这个问题的真正答案是找到ctnrepl/print-and-return无法存储的异常和堆栈跟踪的某种方式*e。我尝试了一些想法,但相关变量似乎是私有的,很难挖掘出来。

如何找出导致(boot (refresh))失败的错误?

0 投票
1 回答
65 浏览

clojure - 使用 Hoplon 和 Boot Bulid 工具来获取 Clojure 后端

这是一个非常简单的问题。到目前为止,我整个早上都在晾干以找出问题所在。我决定将 Hoplon 用于我的下一个基于 Clojure 的网站,并且想知道如何使用引导构建工具和 Hoplon 来启动一个新项目以包含后端。下面的代码是如何在 bash 上制作没有后端的模板。

干杯,马特