LoginSignup
2
3

More than 5 years have passed since last update.

JDKの公式Dockerイメージを使って手っ取り早くjshellを使うメモ

Last updated at Posted at 2018-11-16

公式Java Dockerイメージを活用する

  • 特定のバージョンのJVMを使ってテストしたい
  • JVMのインストールが面倒

って時はJVMのDockerイメージを活用すると楽ですね。

$ cat Hoge.java 
public class Moge {
  public static void main(String[] args) {
    System.out.println("hoge");
  }
}

$  docker run --rm -it --volume `pwd`:/tmp adoptopenjdk/openjdk11-openj9 java /tmp/Hoge.java
hoge

javaをコンパイルせずに実行してる?
-> JEP330
Java11:単一ファイルのJavaコードをそのまま実行
Java11ではjavacせずにJavaファイルが実行できるようになる

参考
Dockerで色んなJDKを試す
AdoptOpenJDK https://adoptopenjdk.net
公式Dockerイメージ https://hub.docker.com/u/adoptopenjdk/

メモ:繰り返し実行

$  docker run --rm -it --volume `pwd`:/tmp adoptopenjdk/openjdk11-openj9 /bin/sh -c 'for i in `seq 1 10`; do java -jar /tmp/MDTest.jar |grep -v dig; done' | awk '{sum+=$3} END {print "avg="sum/NR}'
avg=26.1

jshell

  • 手っ取り早くJavaで(記述した)処理を実行したい
  • クラスやmainなど書きたくない、コンパイル&実行面倒

って時は jshellが便利ですね。DockerがあればJava9以降を入れてない環境でもサクッと使えますし。

$  docker run --rm -it adoptopenjdk/openjdk11-openj9 jshell
Nov 16, 2018 12:00:26 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
|  Welcome to JShell -- Version 11.0.1
|  For an introduction type: /help intro

jshell> System.out.println("moge")
moge

jshell> java.time.Instant.ofEpochMilli(1294012469700l);
$1 ==> 2011-01-02T23:54:29.700Z

jshell> 

そや、one-linerってどうやって書くんでしょう?

JavaのJShellでワンライナーのスクリプトを書く方法(ついでにFizzBuzzのコードゴルフ)

なるほど!

$ echo 'println("hello, world!")' | docker run --rm -it adoptopenjdk/openjdk11-openj9 jshell PRINTING -
the input device is not a TTY

あれ?ああ。

$ echo 'println("hello, world!")' | docker run --rm -i adoptopenjdk/openjdk11-openj9 jshell PRINTING -
Nov 16, 2018 3:12:46 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
hello, world!

なんでもかんでも -it つけてた。

参考
JShellで始めるJava - Javaの世界を覗いてみる
JShellを使ってJava2Dであそぶ
[Java9 新機能] jshell入門

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3