山东聊城做网站,wordpress在线阅读主题,我国政务网站建设统计,网络推广哪个好会议是聚会Java名人的好地方。 Devoxx France是与Java语言架构师#xff0c;前同事和老朋友Brian Goetz#xff08; briangoetz #xff09;见面的一个机会。 我们谈论了JDK 9#xff0c;而他全都热衷于REPL。 他提到#xff0c;尽管Java SE 9中有很多重要功能 #xff0… 会议是聚会Java名人的好地方。 Devoxx France是与Java语言架构师前同事和老朋友Brian Goetz briangoetz 见面的一个机会。 我们谈论了JDK 9而他全都热衷于REPL。 他提到尽管Java SE 9中有很多重要功能 例如模块化和HTTP2客户端 但该工具将是最常被谈论的。 该声明之所以有意义是因为它将真正简化Java API的探索原型开发会议演示以及类似任务。 该博客来自我们在那里的讨论以及他对REPL的强烈投票 Read-Evaluate-Print-Loop在LispPythonRubyGroovyClojure和其他语言中已经存在了一段时间。 Unix shell是一个REPL它可以读取shell命令评估它们打印输出并返回循环以执行相同的操作。 您可以在JEP 222的 JDK 9中阅读有关REPL的全部信息。 JEP的摘要是 提供一个交互式工具用于评估Java编程语言的声明语句和表达式即提供Java编程语言的读取-评估-打印循环REPL。 另外提供构建工具的API使外部工具可以提供此功能。 杰普222 JEP中也明确阐明了动机 没有Foo类{public static void mainString [] args{…}}的仪式学习和探索就变得简化了。 杰普222 JEP 222的目标是将REPL与JDK 9一起提供但是openjdk.java.net/projects/jdk9并未将其列为“目标”或“建议目标”。 好像是一个文档错误:) 从JDK 9 build 61开始REPL未集成需要单独构建。 最终在发布JDK 9之前的某个时间此工具将集成到内部版本中。 让我们看看在OSX上运行它需要什么。 该博客遵循Java 9 REPL –入门指南来构建和运行REPL。 另外它提供了命令的完整日志输出这可能对某些人有用。 让我们开始吧 安装JDK 9 在撰写本文时下载最新的版本 61。 将JAVA_HOME设置为 export JAVA_HOME/usr/libexec/java_home -v1.9 在OSX上设置JAVA_HOME的更多详细信息在这里 。 验证版本 ~ java -version
java version 1.9.0-ea
Java(TM) SE Runtime Environment (build 1.9.0-ea-b61)
Java HotSpot(TM) 64-Bit Server VM (build 1.9.0-ea-b61, mixed mode) 检出并安装jline2 jline2是一个用于处理控制台输入的Java库。 一探究竟 workspaces git clone git://github.com/jline/jline2.git
Cloning into jline2...
remote: Counting objects: 6419, done.
remote: Total 6419 (delta 0), reused 0 (delta 0), pack-reused 6419
Receiving objects: 100% (6419/6419), 3.23 MiB | 80.00 KiB/s, done.
Resolving deltas: 100% (2945/2945), done.
Checking connectivity... done. 然后构建它 jline2 mvn install
[INFO] Scanning for projects...
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/scm/maven-scm-provider-gitexe/1.8.1/maven-scm-provider-gitexe-1.8.1.pom
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/scm/maven-scm-provider-gitexe/1.8.1/maven-scm-provider-gitexe-1.8.1.pom (3 KB at 0.3 KB/sec). . .[INFO] Installing /Users/arungupta/workspaces/jline2/target/jline-2.13-SNAPSHOT-sources.jar to /Users/arungupta/.m2/repository/jline/jline/2.13-SNAPSHOT/jline-2.13-SNAPSHOT-sources.jar
[INFO] Installing /Users/arungupta/workspaces/jline2/target/jline-2.13-SNAPSHOT-tests.jar to /Users/arungupta/.m2/repository/jline/jline/2.13-SNAPSHOT/jline-2.13-SNAPSHOT-tests.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 09:52 min
[INFO] Finished at: 2015-05-06T19:23:14-07:00
[INFO] Final Memory: 25M/146M
[INFO] ------------------------------------------------------------------------克隆并构建JDK 9 REPL 该项目的OpenJDK代号为Kulla意为“建设者之神”。 该工具的计划名称为jshell 。 签出工作区 workspaces hg clone http://hg.openjdk.java.net/kulla/dev kulla
requesting all changes
adding changesets
adding manifests
adding file changes
added 1453 changesets with 2226 changes to 172 files
updating to branch default
109 files updated, 0 files merged, 0 files removed, 0 files unresolved 获取来源 workspaces cd kulla
kulla chmod x ./get_source.sh
kulla ./get_source.sh
# Repositories: corba jaxp jaxws langtools jdk hotspot nashorn corba: hg clone http://hg.openjdk.java.net/kulla/dev/corba corbajaxp: hg clone http://hg.openjdk.java.net/kulla/dev/jaxp jaxpcorba: requesting all changesjaxp: requesting all changescorba: adding changesetsjaxp: adding changesetscorba: adding manifestsjaxp: adding manifestscorba: adding file changesjaxp: adding file changescorba: added 669 changesets with 4913 changes to 2576 filescorba: updating to branch defaultcorba: 1184 files updated, 0 files merged, 0 files removed, 0 files unresolvedjaxws: hg clone http://hg.openjdk.java.net/kulla/dev/jaxws jaxwsjaxws: requesting all changesjaxws: adding changesetsjaxws: adding manifestsjaxws: adding file changesjaxp: added 728 changesets with 10192 changes to 7393 filesjaxp: updating to branch defaultjaxp: 3044 files updated, 0 files merged, 0 files removed, 0 files unresolvedlangtools: hg clone http://hg.openjdk.java.net/kulla/dev/langtools langtoolslangtools: requesting all changeslangtools: adding changesetslangtools: adding manifestsjaxws: added 589 changesets with 20521 changes to 10746 filesjaxws: updating to branch defaultjaxws: 3750 files updated, 0 files merged, 0 files removed, 0 files unresolvedjdk: hg clone http://hg.openjdk.java.net/kulla/dev/jdk jdklangtools: adding file changesjdk: requesting all changesjdk: adding changesetsjdk: adding manifestslangtools: added 3173 changesets with 28112 changes to 9103 fileslangtools: updating to branch defaultlangtools: 7100 files updated, 0 files merged, 0 files removed, 0 files unresolvedhotspot: hg clone http://hg.openjdk.java.net/kulla/dev/hotspot hotspothotspot: requesting all changeshotspot: adding changesetshotspot: adding manifestshotspot: adding file changeshotspot: added 8073 changesets with 45889 changes to 6290 fileshotspot: updating to branch defaulthotspot: 5030 files updated, 0 files merged, 0 files removed, 0 files unresolvednashorn: hg clone http://hg.openjdk.java.net/kulla/dev/nashorn nashornnashorn: requesting all changesnashorn: adding changesetsnashorn: adding manifestsjdk: adding file changesnashorn: adding file changesnashorn: added 1252 changesets with 11596 changes to 3595 filesnashorn: updating to branch defaultnashorn: 2867 files updated, 0 files merged, 0 files removed, 0 files unresolvedjdk: added 11805 changesets with 116593 changes to 42135 filesjdk: updating to branch defaultjdk: 23192 files updated, 0 files merged, 0 files removed, 0 files unresolved
# Repositories: . corba jaxp jaxws langtools jdk hotspot nashorn .: cd . hg pull -ucorba: cd corba hg pull -ujaxp: cd jaxp hg pull -ujaxws: cd jaxws hg pull -ulangtools: cd langtools hg pull -ujdk: cd jdk hg pull -uhotspot: cd hotspot hg pull -unashorn: cd nashorn hg pull -ujaxws: pulling from http://hg.openjdk.java.net/kulla/dev/jaxwscorba: pulling from http://hg.openjdk.java.net/kulla/dev/corbalangtools: pulling from http://hg.openjdk.java.net/kulla/dev/langtoolshotspot: pulling from http://hg.openjdk.java.net/kulla/dev/hotspotjdk: pulling from http://hg.openjdk.java.net/kulla/dev/jdk.: pulling from http://hg.openjdk.java.net/kulla/devjaxp: pulling from http://hg.openjdk.java.net/kulla/dev/jaxpnashorn: pulling from http://hg.openjdk.java.net/kulla/dev/nashornnashorn: searching for changesnashorn: no changes foundjaxws: searching for changesjaxws: no changes foundjaxp: searching for changesjaxp: no changes foundcorba: searching for changescorba: no changes foundjdk: searching for changeshotspot: searching for changeshotspot: no changes foundjdk: no changes found.: searching for changes.: no changes foundlangtools: searching for changeslangtools: no changes found 编辑langtools/repl/scripts/compile.sh脚本如下所示 #!/bin/sh
JLINE2LIB/Users/arungupta/workspaces/jline2/target/jline-2.13-SNAPSHOT.jar
mkdir -p build
javac -Xlint:unchecked -Xdiags:verbose -cp ${JLINE2LIB} -d build ../src/jdk.jshell/share/classes/*/*/*.java ../src/jdk.jshell/share/classes/*/*/*/*/*.java ../src/jdk.jshell/share/classes/*/*/*/*/*/*.java 注意对于OSX唯一的编辑是#!/bin/sh 并将JLINE2LIB添加到先前编译的jline2工作区的位置。 从引用JDK 9的JAVA_HOME中拾取javac 。 通过从langtools/repl目录调用脚本来编译REPL工具 repl chmod x ./scripts/compile.sh
repl ./scripts/compile.sh 运行JDK 9 REPL 编辑langtools/repl/scripts/run.sh脚本如下所示 #!/bin/sh
JLINE2LIB/Users/arungupta/workspaces/jline2/target/jline-2.13-SNAPSHOT.jar
java -ea -esa -cp build:${JLINE2LIB} jdk.internal.jshell.tool.JShellTool $ 注意唯一的编辑是OSX的!/bin/sh并添加JLINE2LIB 。 将REPL运行为 repl ./scripts/run.sh
| Welcome to JShell -- Version 0.428
| Type /help for help JDK 9 REPL Hello World 与引入Java的弹跳球或跳舞Duke引入不同我们只将常规的Hello World用于REPL 将“ Hello World”运行为 - System.out.println(Hello World);
Hello World 瞧 没有public static void main 没有类的创建没有仪式只是干净而简单的Java代码。 输入的文本称为“代码段”。 使用/list all可以查看完整的Java代码如下所示 - /list all1 : import java.util.*;2 : import java.io.*;3 : import java.math.*;4 : import java.net.*;5 : import java.util.concurrent.*;6 : import java.util.prefs.*;7 : import java.util.regex.*;8 : void printf(String format, Object... args) { System.out.printf(format, args); }9 : System.out.println(Hello World); 此代码段可以另存为文件 - /save test 请注意这不是Java文件。 保存的代码段正是输入的内容 repl more test
System.out.println(Hello World); 该工具可以退出为 - /exit
| Goodbye 或者您可以按Ctrl C。 完整的命令列表很容易看到 - /help
Type a Java language expression, statement, or declaration.
Or type one of the following commands:/l or /list [all] -- list the source you have typed/seteditor executable -- set the external editor command to use
/e or /edit name or id -- edit a source entry referenced by name or id
/- or /drop name or id -- delete a source entry referenced by name or id
/s or /save [all|history] file -- save the source you have typed
/o or /open file -- open a file as source input
/v or /vars -- list the declared variables and their values
/m or /methods -- list the declared methods and their signatures
/c or /classes -- list the declared classes
/x or /exit -- exit the REPL
/r or /reset -- reset everything in the REPL
/f or /feedback level -- feedback information: off, concise, normal, verbose, default, or ?
/p or /prompt -- toggle display of a prompt
/cp or /classpath path -- add a path to the classpath
/h or /history -- history of what you have typed/setstart file -- read file and set as the new start-up definitions/savestart file -- save the default start-up definitions to the file
/? or /help -- this help messageSupported shortcuts include:
tab -- show possible completions for the current text
Shift-tab -- for current method or constructor invocation, show a synopsis of the method/constructorJDK 9 REPL后续步骤和反馈 遵循REPL教程以了解有关该工具功能的更多信息。 快速概述 接受Java语句变量方法和类的定义导入和表达式 设置和显示信息的命令例如/list显示代码片段列表 /vars显示变量列表 /save保存代码片段 /open以读回它们。 片段的历史记录可用片段可以按数字进行编辑等等 这是一个有用的RFE 将代码段导出为完整的Java类 随后的博客将展示如何将其用于Java EE应用程序的播放。 您将如何使用REPL 在kulla-dev上讨论项目/问题。 请享用 翻译自: https://www.javacodegeeks.com/2015/05/jdk-9-repl-getting-started.html