博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK9: 集成 Jshell 和 Maven 项目.
阅读量:7067 次
发布时间:2019-06-28

本文共 2631 字,大约阅读时间需要 8 分钟。

为什么要用jshell

在IDE中创建一个项目来研究和学习框架太重量级了, 我需要一个轻量的解决方案. 调用一个方法, 它可以马上在终端中打印返回值的内容.

Jshell 是一个(REPL)交互式解释器, 一般作为学习如何使用类的练习场, 方法. 可以立即看到输出结果, 而不需要创建一个重量级的Java项目来学习如何调用类的方法.

因为我有洁癖, 我喜欢保持工程目录干净整洁, 我不喜欢在我正式的项目中去练习如何使用框架的代码.

JShell 是JDK9的一个新功能.

clipboard.png

我们如何把它和Maven结合起来了.

原理很简单, 那就是CLASSPATH.

jshell 有一个 --class-path 参数可以指定 jar 包的位置, 因此, 我们需要知道Maven项目中所有依赖<dependency>的CLASSPATH.

➜  / jshell -h用法:   jshell 
<选项>
<加载文件>
其中, 可能的选项包括: --class-path
<路径>
指定查找用户类文件的位置 --module-path
<路径>
指定查找应用程序模块的位置 --add-modules
<模块>
(,
<模块>
)* 指定要解析的模块; 如果
<模块>
为 ALL-MODULE-PATH, 则为模块路径中的所有模块 --startup
<文件>
对启动定义执行单次替换 --no-startup 不运行启动定义 --feedback
<模式>
指定初始反馈模式。该模式可以是 预定义的 (silent, concise, normal 或 verbose), 也可是以前用户定义的 -q 无提示反馈。等同于: --feedback concise -s 真正无提示反馈。等同于: --feedback silent -v 详细反馈。等同于: --feedback verbose -J
<标记>
直接将
<标记>
传递到运行时系统。 为每个运行时标记或标记参数使用一个 -J -R
<标记>
<标记>
传递到远程运行时系统。 为每个远程标记或标记参数使用一个 -R -C
<标记>
<标记>
传递到编译器。 为每个编译器标记或标记参数使用一个 -C --version 输出版本信息并退出 --show-version 输出版本信息并继续 --help 输出标准选项的此提要并退出 --help-extra, -X 输出非标准选项的帮助并退出

如何知道Maven项目中的CLASSPATH呢?

这样玩!

mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=classpath.txt

CLASSPATH 就输出到 classpath.txt 文件中了.

然后通过这个文件来向jshell说明CLASSPATH. 这样我们就可以把jshell和maven项目集成到一起了.

下面是一个完整的脚本. 一般放在Maven项目的根目录下:

#!/bin/bashif [ ! -d "target" ]; then  echo "Please run it under a module directory. And make sure it's not parent module directory. And make a maven install first"  exitfimvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=classpath.txtjshell --class-path `cat classpath.txt`:target/classes "$@"

保存到Maven项目的根目录, 名称为 jshell.sh

最后

sh> ./jshell.sh

来玩一个 SpringBoot 的 UriComponentsBuilder的例子

jshell> import org.springframework.web.util.*jshell> UriComponentsBuilder b = UriComponentsBuilder.newInstance()b ==> org.springframework.web.util.UriComponentsBuilder@544a2ea6 jshell> b.scheme("https")$6 ==> org.springframework.web.util.UriComponentsBuilder@544a2ea6jshell> b.host("segmentfault.com")$7 ==> org.springframework.web.util.UriComponentsBuilder@544a2ea6jshell> b.build()$8 ==> https://segmentfault.comjshell> b.pathSegment("u")$9 ==> org.springframework.web.util.UriComponentsBuilder@544a2ea6jshell> b.build()$10 ==> https://segmentfault.com/ujshell> b.pathSegment("developerworks")$11 ==> org.springframework.web.util.UriComponentsBuilder@544a2ea6jshell> b.build()$12 ==> https://segmentfault.com/u/developerworksjshell> b.queryParam("hello", "developerworks")$13 ==> org.springframework.web.util.UriComponentsBuilder@544a2ea6jshell> b.build()$14 ==> https://segmentfault.com/u/developerworks?hello=developerworks

转载地址:http://bwall.baihongyu.com/

你可能感兴趣的文章
WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu
查看>>
苹果应用的上线步骤
查看>>
初识scoket
查看>>
使用Windows8开发Metro风格应用七
查看>>
(第一天)包装对象、作用域、创建对象
查看>>
POJ 3104:Drying(二分)
查看>>
Stardew Valley(星露谷物语)Mod开发之路 1环境配置
查看>>
2012 借教室
查看>>
为什么是Spring Boot
查看>>
前端之本http协议
查看>>
python基础-协程
查看>>
JavaScript数据类型
查看>>
zoj 1004 Anagrams by Stack (dfs+stack)
查看>>
iOS NSDecimalNumber 使用
查看>>
hdu 2844 混合背包【背包dp】
查看>>
函数分析题
查看>>
debian手册摘要
查看>>
TreeMap 原理
查看>>
iOS开发工具——网络封包分析工具Charles
查看>>
iis7负载均衡
查看>>