我正在学习使用spring框架,但似乎找不到类似于Django shell_plus的工具。我想进入一个我可以访问我所有类,依赖项等的java repl中。我用Google搜索并找到了j-shell和spring-shell,但是spring-shell似乎不能满足我的需求,因为我需要能够实例化并玩我的课,所以我选择了j-shell。我唯一的问题是我不知道如何让j-shell知道我的课在哪里。我尝试过
$ jshell --classpath "~/Desktop/path/to/project/"
我的项目目录为:
Project
|
+-- build.gradle
|
+-- build
| |
| +-- libs and etc...
+-- src
| |
| +-- main
| |
| +-- java
| |
| com
| |
| +-- MyClass.java
| |
| +-- MyOtherClass.java
|
+-- settings.gradle
+-- gradlew
+-- default.nix
但是在j-shell中时,我无权访问spring框架或类。如果这很重要的话,我在exos上使用emacs,而对开发环境的依赖则使用nix。感谢任何帮助,谢谢。
我还尝试将类路径设置为位于~/home/.gradle/
上的jars
我希望能够进入jshell repl,并且可以访问springframework类和我自己编写的类。
答案 0 :(得分:0)
有几种方法可以设置jshell会话的类路径。
在启动时,输入REPL之前:
$jshell --class-path <your_classpath>
已经处于正在运行的REPL会话中:
jshell>/env -class-path <your_classpath>
注意到 --class-path
和 -class-path
之间的区别吗?那不是错字。
老式的方式。在启动jshell之前,设置一个$ CLASSPATH环境变量:
$export CLASSPATH=<your_classpath>
$jshell
实际上,有第四种方法可以使类路径在jshell会话之间保持不变,因此您不必每次都设置它。它涉及创建 .jsh
启动文件,并进行设置和保存。在jshell会话中,请参见 /help
以了解更多信息。
答案 1 :(得分:0)
我制作了一个Gradle插件来运行jshell
控制台,其中项目的所有库都位于类路径jshell-plugin中,在构建设置中配置好之后,您只需运行:
$ gradle --console plain jshell
README指令还有一个特殊的部分,可以在Spring Boot项目中对其进行设置,并能够访问业务对象(Spring上下文中的bean:#spring-boot-applications:
jshell> var myUserService = ctx.App.getBean(MyUserService.class)
jshell> ctx.App.ppjson(myUserService.getByUsername("admin"))
{
"name" : "Jhon",
"lastName" : "Due",
"username" : "admin",
"age" : null
}
如果您不使用Gradle并且有一个旧的Spring Boot 1.x项目,则可以使用我创建的另一个项目,该项目不适用于现代Spring Boot应用程序,但是至少您不需要Gradle或{来自JDK9 +发行版的{1}},用于处理您的代码和Spring Bean:spring-ctx-groovy