29

我有一个正在开发的本地 Maven 项目。如何jshell使用包含所有依赖项的项目类路径启动,以便我可以在 JShell 中测试项目或依赖项类。

4

5 回答 5

36

您可以使用 jshell-maven-plugin:

mvn com.github.johnpoth:jshell-maven-plugin:1.3:run

这将使用您的项目的运行时路径启动 JShell 会话。如果要包含测试依赖项,只需将 -DtestClasspath 添加到命令中。

注意:插件希望项目已经构建。如果没有,请在插件之前调用适当的 Maven 构建阶段,例如:

mvn [install|compile|test-compile] com.github.johnpoth:jshell-maven-plugin:1.3:run

源代码:https ://github.com/johnpoth/jshell-maven-plugin ;欢迎贡献:) 完全免责声明:我编写了插件。

享受!

于 2018-04-05T16:09:44.927 回答
20

我写了一个简单的shell脚本放在执行搜索路径中:

Shell 脚本文件:mshell(用于 *inux)

mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=.cp.txt
jshell --class-path `cat .cp.txt`:target/classes

Shell 脚本文件:mshell(适用于 Windows cmd.exe)

mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=.cp.txt
for /F %i in (.cp.txt) do jshell --class-path "%i;target/classes"

然后在 maven 项目目录中(对于多模块项目,请确保在模块目录而不是父目录中),运行:

$ cd $MAVEN_PROJECT_HOME   #make sure module folder for multi-module project
$ mshell

要点链接

感谢 Jay 指出 -DincludeTypes=jar maven 选项。

于 2017-12-08T13:06:35.733 回答
2

请参阅在 Maven 中,如何输出正在使用的类路径?.

根据:

jshell --help

运行 JShell:

jshell --class-path <path>
于 2017-12-07T23:09:50.157 回答
0

由于JDK 错误 8177650,此处使用该--class-path选项或从 maven 启动的解决方案将破坏包自动完成。这是一个适用于包自动完成的 bash 单行代码:

CLASSPATH=`mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=/dev/stderr 2>&1 >/dev/null`:target/classes jshell
于 2022-02-22T08:26:09.360 回答
0

改用 Groovy shell ( groovysh) 并执行groovy.grape.Grape.grab([group:"<maven group>", artifact:"<maven artifact ID>", version:"<version>"])- 这将为您在类路径中提供必要的 Maven 依赖项的 REPL。

不确定 jshell 是否比 Groovy shell 有任何值得 Maven 依赖项痛苦的优势。

于 2022-01-20T18:43:49.957 回答