【发布时间】:2020-04-07 22:28:29
【问题描述】:
我正在考虑将一个项目从 boot 转移到 Gradle,clojurephant 希望利用更多的 Gradle 生态系统。该项目构建了一个大型 uberjar,其中包含一个带有 Ring 和 Jetty 的 Clojure 项目,该项目又提供了一个使用 re-frame 构建的 ClojureScript 应用程序。
在启动时,我基本上只需要boot-cljs,添加
(boot-cljs/cljs :optimizations :advanced)
到我的构建任务,它也调用(pom)、(aot) 和(uber)(所有标准启动任务),一切顺利。
使用 Clojurephant,我发现 Clojure 和 ClojureScript 部分最终位于不同的子目录中。特别是我在build下方找到了
clojure/mainclojurescript/main-
resources/main(基本上是我的resources项目文件夹的副本)
让我更加困惑的是,这些路径并没有以我可以看到的方式转换为 Gradle 使用 shadow plugin 构建的 Uberjar 的结构
摘自我的build.gradle:
plugins {
id 'dev.clojurephant.clojure' version '0.5.0'
id 'dev.clojurephant.clojurescript' version '0.5.0'
id 'application'
id 'com.github.johnrengelman.shadow' version '5.0.0'
id 'maven-publish'
id 'distribution'
id 'com.meiuwa.gradle.sass' version '2.0.0'
}
// ...
clojure {
builds {
main {
aotAll()
}
}
}
// ...
clojurescript {
builds {
all {
compiler {
outputTo = 'public/app.js'
outputDir = 'public/js/out'
main = 'com.example.mycljsstuff'
assetPath = 'js/out'
}
}
main {
compiler {
optimizations = 'advanced'
sourceMap = 'public/app.js.map'
}
}
dev {
compiler {
optimizations = 'none'
preloads = ['com.example.mycljsstuff']
}
}
}
}
编辑:忘了提到启动时我配置了 init 函数以开始将 CLJS 代码加载到一个名为 app.cljs.edn 的文件中。使用 Clojurephant,我只找到了一种设置主命名空间的方法,而不是一个函数。
我的问题归根结底是,如何配置 ClojureScript 构建以便它在从 Uberjar 交付时最终工作?
Clojure 的东西似乎有效。 Ring 和 Jetty 运行并愉快地交付了第一个静态网页。但是所有 CLJS/JS 的东西都找不到。
如果能收到一些指向我可以学习的其他项目、文档或教程的指针,我会非常高兴。我没有找到很多,然后迷失在理解 Clojurephant 本身的代码中。
【问题讨论】:
-
注意:我正在取得进展,如果我能够解决它,我会分享一个解决方案。
标签: gradle clojure clojurescript