首页 > 解决方案 > 如何在jshell中为spring项目设置类路径

问题描述

我正在学习使用spring框架,我似乎找不到类似于Django shell_plus的工具。我想在一个 java repl 中访问我的所有类、依赖项等。我用谷歌搜索并找到了 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 框架或我的类。如果这很重要,我在 nixos 上使用 emacs,并在开发环境依赖项上使用 nix。感谢任何形式的帮助,谢谢。

我还尝试将类路径设置为位于~/home/.gradle/

我希望在 jshell repl 中可以访问 springframework 类和我自己编写的类。

标签: javaspringgradlejshell

解决方案


我制作了一个 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 或jshell来自 JDK9+ 的分发使用您的代码和 spring 的 bean:s ​​pring-ctx-groovy


推荐阅读