资讯专栏INFORMATION COLUMN

JDK9: 集成 Jshell 和 Maven 项目.

warnerwu / 1896人阅读

摘要:等同于真正无提示反馈。等同于详细反馈。等同于标记直接将标记传递到运行时系统。为每个远程标记或标记参数使用一个标记将标记传递到编译器。

为什么要用jshell

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

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

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

JShell 是JDK9的一个新功能.

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

原理很简单, 那就是CLASSPATH.

jshell 有一个 --class-path 参数可以指定 jar 包的位置, 因此, 我们需要知道Maven项目中所有依赖的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/bash

if [ ! -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"
  exit
fi

mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=classpath.txt
jshell --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@544a2ea6

jshell> b.host("segmentfault.com")
$7 ==> org.springframework.web.util.UriComponentsBuilder@544a2ea6

jshell> b.build()
$8 ==> https://segmentfault.com

jshell> b.pathSegment("u")
$9 ==> org.springframework.web.util.UriComponentsBuilder@544a2ea6

jshell> b.build()
$10 ==> https://segmentfault.com/u

jshell> b.pathSegment("developerworks")
$11 ==> org.springframework.web.util.UriComponentsBuilder@544a2ea6

jshell> b.build()
$12 ==> https://segmentfault.com/u/developerworks

jshell> b.queryParam("hello", "developerworks")
$13 ==> org.springframework.web.util.UriComponentsBuilder@544a2ea6

jshell> b.build()
$14 ==> https://segmentfault.com/u/developerworks?hello=developerworks

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69096.html

相关文章

  • Java9的新特性

    摘要:新特性概述系列一安装及使用系列二运行系列三模块系统精要系列四更新系列五系列六系列七系列八系列九与的区别迁移注意事项参数迁移相关选项解析使用构建实例使用示例带你提前了解中的新特性 Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性...

    ddongjian0000 评论0 收藏0
  • Java9特性预览——Jshell

    摘要:什么是项目是第一个官方的的缩写,即交互式编程环境,是一种命令行工具。它允许你无需编写类或者方法来执行语句。它与的解释器或其它本地支持的语言,如和类似。在即将到来的的特性中,这绝对是更有趣的特性之一。 什么是JShell? JShell/Kulla项目是第一个官方的Java REPL (Read-Eval-Print-Loop的缩写,即交互式编程环境),是一种命令行工具。它允许你无需编写...

    hikui 评论0 收藏0
  • JDK 9 变更一览

    摘要:概述是一个主要版本的发布这里介绍的是对的特性和增强的实现是的增强提案,包括增强建议和路线图流程规范请求,描述了针对平台的建议和最终规范主要变更统一模块化标准这是全新的编程组件模块,是可命名的可自描述的代码和数据集合。 概述 java9是一个主要版本的发布 这里介绍的是Oracle对JDK9的特性和增强的实现 JEP是JDK的增强提案,包括增强建议和路线图流程 JSR(Java规范请...

    sherlock221 评论0 收藏0
  • Java 9 新特性

    摘要:在语言上并没有添加太多的新特性,但在使用性能上做了很改进。二多版本包支持即在不同版本下,执行相应版本的代码。在发布新版本的后,用户可能不会升级到新环境,但是项目可能会开始逐步升级到新版本,来提前适应即将到来的环境。 Java9在语言上并没有添加太多的新特性,但在使用、性能上做了很改进。 一、模块间引用 Java9添加了模块化的概念,使得之前的控制访问权限有了改变。 之前: publ...

    SegmentFault 评论0 收藏0
  • java9系列(一)安装及jshell使用

    摘要:序本文介绍下下面的版本安装使用。下载官网地址安装路径下载袭来是个文件,双击安装,默认装到了这里,的地址是看下版本欢迎使用版本要大致了解该版本请键入有了就可以快速做一些验证,比如查看导入的类库方法定义及调用已创建方法已修改方法查看历史 序 本文介绍下mac下面的java9版本安装使用。 下载 官网地址http://www.oracle.com/technet... 安装路径 下载袭来是个...

    gaosboy 评论0 收藏0

发表评论

0条评论

warnerwu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<