4

我将一个 Leiningen 项目导入 Intellij,与一些现有的 Java 和 Scala 模块并排放置。我想从我的 Clojure 模块中调用这些模块中的函数,但我不确定如何定义这种依赖关系。我去了项目设置-> 模块和通常缺少的“依赖项”选项卡,这让我相信除了 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" />

4

2 回答 2

1

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

同时,发布到本地仓库是我能想到的唯一解决方法。抱歉,我知道这很笨拙。

从 IntelliJ 的角度来看,“普通”项目和 IntelliJ 项目没有区别,只是 Cursive 会在每次同步时重写很多模块配置,因为理论上配置应该由 Leiningen 管理。这或多或少是 Maven 集成的工作方式。

于 2016-02-01T21:05:35.467 回答
1

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

尽管如此,REPL 还是找不到这些类。所以我必须编辑运行配置以在“普通 JVM 进程”中使用 nREPL,这让我可以选择我可能会使用其类路径的模块。

为普通 JVM 进程 nREPL 运行配置

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

于 2016-02-02T01:03:55.023 回答