我如何告诉 Cursive Clojure 模块依赖于本地 Java/Scala 模块?

How can I tell a Cursive Clojure module to depend on a local Java/Scala module?

我将一个 Leiningen 项目导入到 Intellij 中,与一些现有的 Java 和 Scala 模块并存。我想从我的 Clojure 模块调用这些模块的函数,但我不确定如何定义这种依赖关系。我去了 Project Settings -> Modules 并且 "Dependencies" 选项卡通常丢失了,这让我相信我不能在 Leiningen 项目文件以外的任何地方表达依赖关系(我玩过 Leiningen项目编辑器,也不知道该怎么做...)。

如果有人好奇 Intellij 如何查看此模块,请查看 .iml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<module cursive.leiningen.project.LeiningenProjectsManager.displayName="testproject:0.1.0-SNAPSHOT" cursive.leiningen.project.LeiningenProjectsManager.isLeinModule="true" type="WEB_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
  <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
  <sourceFolder url="file://$MODULE_DIR$/dev-resources" isTestSource="false" />
  <sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" />
  <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
  <excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Leiningen: clojure-complete:0.2.3" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/clojure:1.6.0" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/tools.nrepl:0.2.10" level="project" />

我开发草书。我怀疑现在可能没有好的解决方案。我会查看代码,看看我是否能想出一种方法来做到这一点,但这需要了解 Maven、Gradle 或 SBT(在您的情况下)如何在内部表示模块。今天我会试着看看这个,然后告诉你。我实际上不知道是否有可能在 IntelliJ 中让 Maven 项目依赖于 SBT 项目,或者 Gradle 项目。

与此同时,发布到本地存储库是我能想到的唯一解决方法。抱歉,我知道它很笨重。

"normal" 项目和 IntelliJ 项目之间的 IntelliJ 观点没有区别,只是 Cursive 会在每次同步时重写很多模块配置,因为理论上配置应该由莱宁根。这或多或少就是 Maven 集成的工作方式。

所以,我最终能够做到这一点...正如 dAni 所建议的,我能够创建一个新的 Clojure 项目(这次通过 IntelliJ —— 之前我做过 "lein new clj-test" 然后尝试导入这个进入 IntelliJ),创建 Leiningen 构建文件,处理该构建文件,然后在项目结构中查看模块的依赖项选项卡。

REPL 仍然找不到 类。所以我不得不编辑 运行 配置以在 "a normal JVM process" 中使用 nREPL,这让我 select 我可能会使用其类路径的模块。

讨厌成为接受我自己答案的人(特别是因为这有一些限制......我想最终将它与 Gorilla REPL 一起使用,所以可能会为此设计不同的策略)但我认为这个很好地回答了原始问题,希望对某人有所帮助。我认为基本上上述策略所做的是使用 Leiningen 来解决依赖关系,但实际上不是用于 REPL,因此 Leiningen 的依赖关系在类路径上可用,但 REPL 是通过 IntelliJ 以其他方式启动的。