我有一个正在开发的本地 Maven 项目。如何jshell
使用包含所有依赖项的项目类路径启动,以便我可以在 JShell 中测试项目或依赖项类。
5 回答
您可以使用 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 ;欢迎贡献:) 完全免责声明:我编写了插件。
享受!
我写了一个简单的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 选项。
由于JDK 错误 8177650,此处使用该--class-path
选项或从 maven 启动的解决方案将破坏包自动完成。这是一个适用于包自动完成的 bash 单行代码:
CLASSPATH=`mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=/dev/stderr 2>&1 >/dev/null`:target/classes jshell
改用 Groovy shell ( groovysh
) 并执行groovy.grape.Grape.grab([group:"<maven group>", artifact:"<maven artifact ID>", version:"<version>"])
- 这将为您在类路径中提供必要的 Maven 依赖项的 REPL。
不确定 jshell 是否比 Groovy shell 有任何值得 Maven 依赖项痛苦的优势。