如何在jshell中为spring项目设置classpath

时间:2019-05-20 00:22:10

标签: java spring gradle jshell

我正在学习使用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类和我自己编写的类。

2 个答案:

答案 0 :(得分:0)

有几种方法可以设置jshell会话的类路径。

  1. 在启动时,输入REPL之前:

    $jshell --class-path <your_classpath>
    
  2. 已经处于正在运行的REPL会话中:

    jshell>/env -class-path <your_classpath>
    

注意到 --class-path -class-path 之间的区别吗?那不是错字。

  1. 老式的方式。在启动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