Русская Википедия:JShell
JShell - это Java-утилита типа REPL, впервые представленная в JDK 9. Одной из причин по которой была предложена JShell являлась то, что много приложений использовало свои собственные реализации по интерактивному выполнению выражений а, по факту, проект BeanShell который должен был выполнять такую роль был заброшен с 2003 года и вносил произвольные изменения в язык.
Предложение по этой утилите хранится в JEP 222.
Возможности
- Набор Java кода, с некоторыми особенностями, и его выполнение в интерактивном режиме
- Сохранение кода в файлы и его выполнение из файлов без запуска IDE
- Сохранение истории набора в файл
- Настройка контекста выполнения кода
- Различные режимы работы и загрузки утилиты
- Код выполняется сверху вниз и поэтому необходимо сначала объявлять, а потом использовать
- Возможность импорта сторонних библиотек(jar-ков) в контекст выполнения скрипта
- Просмотр всех переменных, методов, импортируемых пакетов и типов
- Возможность написания функции без тела класса
- Встроенный минимальный редактор кода
Интеграция с IDE
- JShell возможно запустить в Intellij Idea через Tools->JShell Console...
- В Eclipse можно запустить через плагин QuickShell или через настройку Run->External Tools->External Tools Configurations...
- В Netbeans IDE через Tools->Open Java Platform Shell
Настройка
Запустить JShell можно из терминала (командной строки) при установленной JDK, где он и находится, набрав:
jshell
При запуске можно указать режим обратной связи (feedback mode) который определяет информативность описания выполненных команд.
Всего их 4: silent, concise, normal и verbose. При запуске нужно указать флаг --feedback:
jshell --feedback silent
Также есть 3 режима загрузки:
- DEFAULT: Режим по-умолчанию, загружает стандартные пакеты
- PRINTING: Позволяет использовать методы print(), printf() и println() без обращение к System.out
- JAVASE: Загружает все пакеты из Java SE
При запуске нужно указать флаг --startup:
jshell --startup PRINTING
Для выхода из JShell нужно набрать:
jshell> /exit
Работа в интерактивном режиме
Посмотреть помощь по командам:
jshell> /help
Запуск минимального встроенного редактора кода с указанием ID введенного ранее выражения или объявления (откроет редактор со строкой :System.out.println("Hello, World!")):
jshell> System.out.println("Hello, World!");
jshell> /edit 1
Работа при исполнении скриптов
Сохранить набранный код в файл:
jshell> /save my_file.jsh
Открыть файл с кодом (например: my_file.jsh или my_file.java):
jshell my_file.jsh
или
jshell> /open my_file.jsh
Примеры
$ jshell | Welcome to JShell -- Version 9 | For an introduction type: /help intro jshell> int a[] = {0,1,3,5,8} a ==> int[5] { 0, 1, 3, 5, 8 } jshell> int fact(int n){ ...> return n<2?1:n*fact(n-1); ...> } | created method fact(int) jshell> /exit | Goodbye $
Импорт библиотеки которая находится в той же директории что и запускается JShell:
jshell --class-path guava-19.0.jar
Импорт модуля:
jshell --add-modules java.sql
Ссылки
Метод ненаучного тыка: введение в JShell Статья с описанием возможностей
User's Guide Официальное руководство (на англ.)
Java 9 JShell (Project REPL) Часть 1 - Обучающая статья по JShell
Статья о JShell Что она должна делать? (на англ.)
Введение в работу JShell (на англ.)
Начало работы Примеры работы с JShell (на англ.)