2018/10/9 JJUGナイトセミナー「JDK 11リリース記念:今知っておくべきJDK 11の重要ポイント」で講演させていただいた、「JDK: 新しいリリースモデル解説 v.2.1」です。 JDK 11のリリースに伴い、提供ライセンスの変更、有償ライセンスの説明などが含まれます。
![JDK: 新しいリリースモデル解説(ver.2.1)](https://cdn-ak-scissors.b.st-hatena.com/image/square/fec18de069c5f8bb34e0ff777a1fdd43f84e0691/height=288;version=1;width=512/https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2F20181008jjugjdknewreleasemodel-v21-181009104332-thumbnail.jpg%3Fwidth%3D640%26height%3D640%26fit%3Dbounds)
Java 9が広まってきて、しかし多少古いScalaやsbtのままやろうとしてハマっている人を見かけることが多くなってきたので、簡単にまとめておきます。 (追記) Java 9となっているところは、Java 10やJava11と置き換えても大体当てはまります。つまりJava8からJava9のclasspath関連の変更が一番重大で、逆にJava9で動けばJava10や11でも動く場合が多いので。 Java 9 で動くScala(のコンパイラやREPL) 2.9系以前は不可能 2.10系はScala 2.10.7以降なら可 2.11系はScala 2.11.12以降なら可 2.12系はScala 2.12.1以降なら可 *1 2.13系はマイルストーン含めて全部可 Java 9 で動くsbt sbt 0.12系以前は不可能(0.12系はScala 2.9系なため) sbt 0.13系はsbt
Streams API をこれまでまともに使ったことがなかった。 まともに使おうとしたら例外処理の扱いが非常に難しいことを実感したので、一例を挙げてその難しさを解説する。 やりたい処理 複数のテキストファイルのそれぞれを1行ずつ読みこみ、空白文字で各行を単語に分割し、単語に対して何か処理を行なう、というよくある処理を実装してみよう。処理の手順を手続き的に書くと以下のようになる。 あるディレクトリの直下に存在する複数のテキストファイル(拡張子 .txt)を1つずつ読む 各テキストファイルを1行ずつ読む 各行(文字列)を、空白文字を区切り文字として複数の文字列(単語と呼ぶことにする)に分割する 各単語に対して何か処理をする。以下、処理の名前を analyze とする クラスの雛形 以下の TextFileProcessor を拡張したクラスを実装する。 各単語に関する処理 analyze は実
Java 9の起動パラメータ java.locale.providers に Java 8 と同じ優先度で国際化を行う指定をします。 java -Djava.locale.providers=COMPAT,SPI この設定で日付のフォーマットが Java 8 と同じように動作するようになり、自動テストが成功しました。 以上で 750 個のテストがすべて成功するようになりました。次はいよいよJava 9で既存のソースコードをコンパイルします。 Java 9でコンパイルして Java 9で動かす ヌーラボのアカウント基盤には Java のコンパイル対象が約 1,360 ファイルあります。目標は 1,360 のソースコードがJava 9 ですべてコンパイルできることです。 コンパイラの設定を Java 9に切り替える コンパイラを Java 9に切り替えます。Java 9のバージョン指定には注意
こちらの投稿のときに作成した、ライブラリは新たにHogenという名前に変更になっています。 詳細に関しては近日公開させてもらうので、よろしければそちらを参照して頂けると幸いです。 最近プロダクションコードはJava、ビルドツール(Gradle)、テストコード(Spock、Geb)の組み合わを使うようになってGroovyを使う機会が増えてきました。 JavaでのDBのテストデータ作成はDbSetupが楽 そんな中こちらの記事を拝見させてもらいました。 Groovyで似たようなinsertをしようとすると以下のようになります。 Sql sql = Sql.newInstance("jdbc:h2:mem:", "org.h2.Driver") def table = sql.dataSet('item_master') table.add(id:1, name:'Apple', price:5
Spock とは build.gradle HelloSpock 仕様(テストケース)の構造 フィールド fixture メソッド feature メソッド helper メソッド データドリブンなテスト @Unroll data pipe Stack の仕様例 例外の検証 例外とならないことの検証 タイムアウトを適用する Hamcrest matchers を使う リソースのクリーンナップを行う @Shared で共有リソースを利用する Specification に自然言語の名前をつける MOPを適用する feature の実行を制限する @Ignore @IgnoreRest @IgnoreIf @Requires @Stepwise Spock とは Java と Groovy アプリケーションのテスティングと仕様フレームワーク JUnit, jMock, RSpec, Groov
前回のNIO.2の続きで、簡単にファイル入出力ができるようになったので試してみた。 サンプルコードは、以下に置いている。 Sample/SimpleReadWrite.java at master · eiKatou/Sample JavaDocは以下。 Files (Java Platform SE 8 ) BufferedReader, BufferedWriterを使う ファイルの入出力で使うBufferedReader, BufferedWriterは、Filesクラスから取得できるようになった。 try (BufferedReader reader = Files.newBufferedReader(fooPath)) { String line = null; while ((line = reader.readLine()) != null) { System.out.pri
概要 [/2017-07-26] 生成 整形(format) 解析・解決(parse) [/2014-07-23] SimpleDateFormatとの違い [2014-07-23] 書式の文字 [2014-07-23] リゾルバースタイル [/2014-07-23] 解析フェーズのみの実行 [2014-07-28] 概要 日付時刻オブジェクトを文字列に整形(format)、あるいは逆に文字列から日付時刻オブジェクトを生成(parse)するにはjava.time.format.DateTimeFormatterを使う。 (従来はjava.text.SimpleDateFormatを使っていた) DateTimeFormatterは不変オブジェクトであり、スレッドセーフである。 ただし、シリアライズ可能ではない。(SimpleDateFormatはシリアライズ可能だったが)[2017-07-
spring-boot-starter (5) リモートホストと通信する単純なSpring Webアプリケーションを開発しています。私はそれをローカルの企業プロキシの背後でテストしたいと思います。 私は "Spring Boot"のgradleプラグインを使用しています。質問はどうやってJVMのプロキシ設定を指定できますか? 私はそれを行ういくつかの方法を試してみました: gradle -Dhttp.proxyHost=XXXX -Dhttp.proxyPort=8080 bootRun export JAVA_OPTS="-Dhttp.proxyHost=XXXX -Dhttp.proxyPort=8080" export GRADLE_OPTS="-Dhttp.proxyHost=XXXX -Dhttp.proxyPort=8080" しかし、彼らのどれもうまく動作していないようです
Java 9では国際化機構で用いられるリソース文字列のファイル表現の文字コードとしてUTF-8がデフォルトで使用されることになるそうです。従来、ISO/IEC 8859-1がデフォルトであるためにUnicodeエスケープが必要となり、外部ツールで日本語テキストを「\u3042」のようなエスケープ文字列に変換する煩わしさがありましたが、ようやく解消されることになります。 Java SE 9、API以外の新機能で知っておきたいこと (2017/7/20, ITproの記事) Javaには古くから国際化のための枠組みが用意されています。その最も基本的な機構となる、多言語のメッセージ文字列を用意する仕組みとしては設定ファイルなどに用いるプロパティファイルという形式が用いられています。ところがこのファイルはデフォルトの文字コードがISO/IEC 8859-1という西欧向けの1バイトコードなのでした。
JavaのString型の変数を扱う上で、byte型に変換が必要なことがあります。 この記事では、getBytesの使い方やString型とbyte型の変換方法について、以下の内容で解説していきます。 そもそもbyte型ってなに? getBytesの使い方について知りたい byte型のさまざまな変換方法について知りたい 16進数文字列⇔byte配列の変換方法が知りたい Javaのbyte型とは byte型とは1バイト(8ビット)のサイズの整数値を表します。 Javaのbyte型は符号付きで-128から127までです。文字列は文字の配列ですが、それぞれの文字は文字コードに従ってbyte型に変換することができます。 ですので、文字列はbyte型の配列に変換できますし、byte型の配列を文字列に変換することができます。 JavaのgetBytesとは getBytesメソッドは、対象の文字列をバ
本稿では、Java 言語において「byte配列」と「16進数文字列」を相互に変換する方法について解説します。 方法を知ろう byte配列と16進数文字列とを変換する方法はいくつかあります。 Apache Commons Codec の Hex クラスを利用する DatatypeConverter クラスを利用する 筆者が最も利用するのは Apache Commons Codec の Hex クラスを利用する方法です。 逆に2015年ともなった今、最も参考にしない方が良い方法は、変換クラスの自作です。 インターネットで検索すると自作クラス(メソッド)を作成する方法が多く検索結果に現れますが、どれも古い記事で、上記のようなライブラリやクラスがある今では労力の無駄だと考えます。 Apache Commons Codec の Hex クラスを利用する Apache Commons Codec は言
過去に何度も書いた Java AES 暗合・複合 秘密鍵、初期ベクトルをどう作成するか、いろんな方法あるが、 改めて、256bit で、SHA-256 ハッシュ値を使う方法。 暗合 public static String encrypt(String passwd, String message){ try{ byte[] key = passwd.getBytes(); MessageDigest sha = MessageDigest.getInstance("SHA-256"); key = sha.digest(key); key = Arrays.copyOf(key, 32); SecretKeySpec keyObj = new SecretKeySpec(key, "AES"); IvParameterSpec ivObj = new IvParameterSpec(Ar
最近開発で使用するために記事を読み返していて、Spring Boot + Doma 2 の使用方法について内容がきちんとまとまっておらず自分でも分かりにくかったので、まとめ直すことにしました。 簡単に試せるように Project のテンプレートを作成して GitHub に上げました。以下の記事を参考に作成しています。 Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( その4 )( Project の作成 ) Spring Boot でメール送信する Web アプリケーションを作る ( 番外編 )( IntelliJ IDEA の Spring MVC View に URL 一覧を表示する ) 参照したサイト・書籍 Welcome to Doma http://doma.readthedocs.org/ja/stable/ Welcome to
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く