配置Clojure Maven项目启动nREPL时遇类路径错误求助
解决Maven+Clojure项目中nREPL启动的类路径错误
这个错误的核心原因是**tools.nrepl的JAR包没有被包含在启动nREPL时的JVM类路径中**。你当前把tools.nrepl依赖放在了clojure-maven-plugin自身的依赖块里,但插件的内部依赖不会自动加入到项目运行时的类路径中,导致启动nREPL时找不到对应的类文件。
下面是两种可行的解决方法:
方法一:将tools.nrepl添加为项目依赖
把tools.nrepl的依赖从插件的<dependencies>块中移到项目根级的<dependencies>里,这样Maven会把它加入到项目的运行时类路径:
<!-- 项目根级 dependencies --> <dependencies> <dependency> <groupId>org.clojure</groupId> <artifactId>clojure</artifactId> <version>1.9.0</version> </dependency> <!-- 添加这部分 --> <dependency> <groupId>org.clojure</groupId> <artifactId>tools.nrepl</artifactId> <version>0.2.13</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>com.theoryinpractise</groupId> <artifactId>clojure-maven-plugin</artifactId> <version>1.8.1</version> <extensions>true</extensions> <!-- 移除插件内部的tools.nrepl依赖 --> </plugin> </plugins> </build>
修改后重新运行mvn clojure:nrepl,应该就能正常启动nREPL了。
方法二:配置插件的类路径包含插件依赖
如果你希望tools.nrepl只作为插件的依赖而不是项目依赖,可以在插件配置中开启usePluginClasspath参数,让插件启动nREPL时包含自身的依赖:
<build> <plugins> <plugin> <groupId>com.theoryinpractise</groupId> <artifactId>clojure-maven-plugin</artifactId> <version>1.8.1</version> <extensions>true</extensions> <dependencies> <dependency> <groupId>org.clojure</groupId> <artifactId>tools.nrepl</artifactId> <version>0.2.13</version> </dependency> </dependencies> <!-- 添加配置,启用插件类路径 --> <configuration> <usePluginClasspath>true</usePluginClasspath> </configuration> </plugin> </plugins> </build>
这个参数会让插件在运行nREPL目标时,把插件自身的依赖也加入到类路径中,从而找到tools.nrepl的类文件。
额外建议
- 考虑升级
clojure-maven-plugin的版本:当前使用的1.8.1是比较旧的版本(发布于2017年),最新版本已经支持更现代的Clojure版本和nREPL特性,能避免一些兼容性问题。 - 如果后续需要更丰富的REPL功能,可以考虑使用
cider-nrepl扩展,但同样需要确保它在正确的类路径中。
内容的提问来源于stack exchange,提问作者rascio
相关产品推荐
相关产品推荐

