在 JShell 中,如何从 Maven 项目导入类路径
In JShell, how to import classpath from a Maven project
我有一个正在开发的本地Maven 项目。我如何使用项目 class 路径和所有依赖项启动 jshell
,以便我可以在 JShell 中测试项目或依赖项 classes。
参见In Maven, how to output the classpath being used?。
根据:
jshell --help
运行 JShell 与:
jshell --class-path <path>
我写了一个简单的 shell 脚本放在执行搜索路径中:
Shell 脚本文件: mshell (for *inux)
mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=.cp.txt
jshell --class-path `cat .cp.txt`:target/classes
Shell 脚本文件: mshell (for 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 选项。
您可以使用 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;欢迎贡献 :) 完全免责声明:我写了插件。
尽情享受吧!
改为使用 Groovy shell (groovysh
) 并执行 groovy.grape.Grape.grab([group:"<maven group>", artifact:"<maven artifact ID>", version:"<version>"])
- 这将为您提供在类路径中具有必要 Maven 依赖项的 REPL。
不确定 jshell 是否比 Groovy shell 有任何值得 Maven 依赖项痛苦的优点。
由于 JDK bug 8177650,此处使用 --class-path
选项或从 maven 启动的解决方案将破坏包自动完成。这是与包自动完成一起使用的 bash one-liner:
CLASSPATH=`mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=/dev/stderr 2>&1 >/dev/null`:target/classes jshell
我有一个正在开发的本地Maven 项目。我如何使用项目 class 路径和所有依赖项启动 jshell
,以便我可以在 JShell 中测试项目或依赖项 classes。
参见In Maven, how to output the classpath being used?。
根据:
jshell --help
运行 JShell 与:
jshell --class-path <path>
我写了一个简单的 shell 脚本放在执行搜索路径中:
Shell 脚本文件: mshell (for *inux)
mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=.cp.txt
jshell --class-path `cat .cp.txt`:target/classes
Shell 脚本文件: mshell (for 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 选项。
您可以使用 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;欢迎贡献 :) 完全免责声明:我写了插件。
尽情享受吧!
改为使用 Groovy shell (groovysh
) 并执行 groovy.grape.Grape.grab([group:"<maven group>", artifact:"<maven artifact ID>", version:"<version>"])
- 这将为您提供在类路径中具有必要 Maven 依赖项的 REPL。
不确定 jshell 是否比 Groovy shell 有任何值得 Maven 依赖项痛苦的优点。
由于 JDK bug 8177650,此处使用 --class-path
选项或从 maven 启动的解决方案将破坏包自动完成。这是与包自动完成一起使用的 bash one-liner:
CLASSPATH=`mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=/dev/stderr 2>&1 >/dev/null`:target/classes jshell