ksino's diary

覚えたことを忘れないように、小さなことでも書いていく。

java

Gradle(build.gradle)で定義した依存性がVSCode上で解決されない問題への対処

Ctrl + Shift + P でコマンドパレットを開き、"Java: Clean Java Language Server Workspace"を実行すればOKでした。

java.util.Date型を計算(1年後の日付、とか)

Dateを一旦Calenderにして計算し、そこからDateを得る。 import java.util.Calendar; import java.util.Date; public class AddDate { public static void main(String[] args) { Date now = new Date(); System.out.println(now); Calendar cal = Calendar.…

Jakarta Mailを使ってメール送信(テキスト、HTML(画像なし)、HTML(画像あり))

/* * This Java source file was generated by the Gradle 'init' task. */ package htmlmail; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import j…

GreenMailを使ってメール送信のテストを行う

GreenMail メール送信機能の開発において、テストを実施するのに便利です。 greenmail-mail-test.github.io build.gradle dependencies { implementation 'com.sun.mail:jakarta.mail:1.6.7' testImplementation 'com.icegreen:greenmail:1.6.3' testImpleme…

Jakarta Mailを使ってメール送信

build.gradle dependenciesに追加します。 implementation group: 'com.sun.mail', name: 'jakarta.mail', version: '2.0.1' Javaソース import java.util.Date; import java.util.Properties; import jakarta.mail.Message; import jakarta.mail.Session; i…

Karateによるテスト自動化(書きかけ)

Karate github.com 動作環境 2021/02/09時点での最新版は0.9.6だが、Nashorn前提になっている。 しかしJDK15以降でNashornは削除されているため、JDK15以降では動作しない。 プロジェクトの作成 mvn archetype:generate -DarchetypeGroupId="com.intuit.kara…

SpringでList自体をBeanとして定義する

Listの要素にしたいクラス(Config.java) package com.example.utillist; public class Config { private int num; private String data; public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getData() { r…

Selenideでclickに失敗するのを回避

Selenideで↓のようにclickを実行しようとすると、失敗するケースがありました。 $(By.id("id1")).click(); sendKeysを試したらうまくいきました。 $(By.id("id1")).sendKeys(Keys.ENTER); 原因はきちんと追っていないのですが、、、id1に紐づくのがsubmitボ…

ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD の除去

Eclipseに導入したSpotBugsで、「インスタンスメソッドからstaticフィールドへの書き込み」がエラー検知されました。↓こんなコードです。 public class WriteStatic { private static String s; public void method(String value) { s = value; } } 諸事情に…

PMD

ソースコードアナライザ pmd.github.io

gradleでのビルド時に、特定のクラス名を取得し、設定ファイル中の文字列を置換する

特定のネーミングルールに則ったクラス名の一覧を取得し、設定ファイルに書き込みたいことってありますよね。 build.gradle task genConfig { StringBuilder sb = new StringBuilder(); FileTree tree = fileTree(dir: 'src/main/java', include: '**/*Maste…

Thymeleafの式

変数式 ${...} 選択変数式 *{...} メッセージ式 #{...} リンクURL式 @{...} フラグメント式 ~{...}

propertiesファイルの読み込み

大した内容じゃないけど、すぐに忘れるのでメモ。 LoadProperties.java package jp.gr.java_conf.ksino.sample; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.Properties; public class LoadProperties { public st…

全角文字列を半角文字列に変換する

package com.example.normalize; import java.text.Normalizer; public class Zenkaku2Hankaku { public static void main(String[] args) { String zenkaku = "H20181226"; String hankaku = Normalizer.normalize(zenkaku, Normalizer.Form.NFKC)…

JavaSE 6 西暦で与えられた日付文字列を和暦に変換する

package com.example.era; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class EraMain { public static void main(String[] args) { Strin…

Commons FileUploadを試す

https://commons.apache.org/proper/commons-fileupload/ index.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> </body></html>

文字列の連結

StringJoinerクラスを使用する import java.util.StringJoiner; String s = new StringJoiner(",") .add("あいう") .add("えおか") .add("きくけ") .toString(); Collectors#joiningメソッドを使用する import java.util.stream.Collectors; import java.uti…

CDIビーンを動的に取得するコードの単体テスト

やりたいこと CDIビーンを動的に取得するコードについて書きました。 ksino.hatenablog.com で、Weldなどを使わずに当該コードの単体テストをやりたいです。 実装 CDI関連クラスのモックを作る CDIProviderクラスのモック package jp.gr.java_conf.ksino.wel…

CDIビーンを動的に取得する

やりたいこと CDIビーンを動的に取得したい。 動的という表現も微妙ですが、要は@Injectでなくプログラム的に取得したいということです。 実装コード CDIビーン インタフェース package jp.gr.java_conf.ksino.weldtest.cdibeans; public interface Hero { p…

Mockitoの使い方

やること Mockitoの使い方を覚えたい。 ちょっとずつ書いていく。 テスト対象のコード Car.java package jp.gr.java_conf.ksino.mockito; public class Car { private String team; private Engine engine; public Car() { super(); engine = new Engine(); …

CDIでインジェクトするクラスを切り替える

やりたいこと CDIでインジェクトするCDIビーンを切り替える方法にはいくつかありますが、ここでは@Alternativeとbeans.xmlを使います。 実装 CDIビーン package jp.gr.java_conf.ksino.weldtest.cdibeans; public interface Hero { public void showName(); …

NetBeansでクラスやメソッドの修飾名をコピーしたい

以下のプラグインを入れる plugins.netbeans.org

JavaSE環境でCDIを試したい

やりたいこと JavaSE環境でCDIを試したい。 どうやらWeldでできるようです。 環境 Oracle JDK 1.8.0_77(64bit) 準備(pom.xml) <dependency> <groupId>org.jboss.weld.se</groupId> <artifactId>weld-se</artifactId> <version>2.3.3.Final</version> <scope>compile</scope> </dependency> コード CDIビーン package jp.gr.java_conf.ksino.weldtest.cdibeans; pub…

型パラメータを取得する

やりたいこと Genericsで以下のような型パラメータが指定されていた場合、型パラメータに指定されたクラス名(jp.gr.java_conf.ksino.generics.ABean)を取得したい。 public class CBean { private List<jp.gr.java_conf.ksino.generics.ABean> aBeans; 実装 ParameterizedTypeで取れます。 import j</jp.gr.java_conf.ksino.generics.abean>…

Java 8でのファイル読み込み

こんなことができるようになっていた Path path = Paths.get("test.txt"); try (BufferedReader reader = Files.newBufferedReader(path);) { reader.lines().forEach(s -> System.out.println(s)); } catch (IOException ex) { // 例外処理 } test.txt ロズ…

文字列の結合(String#join)

Java 8でこんなことができるようになってた。 String[] array = {"a", "bc", "def", "ghi"}; System.out.println(String.join("_", array)); 実行結果 a_bc_def_ghi

EclipseでexportしたJARファイル内でgetResourceするとnullが返る

JARファイル内のリソースを読み込む方法について書きました。 ksino.hatenablog.com ただし、Eclipseのexportで生成したJARファイルでは、getResourceがnullを返すことがあります。 その場合は、export時に"Add directory entries"オプションのチェックボッ…

JAR内の特定のディレクトリに格納された定義ファイルをすべて読み込む

やりたいこと JAR内の特定のディレクトリに格納された定義ファイルをすべて読み込みたい。 例えばJARの構成が以下であった場合、messagesディレクトリに格納された*.propertiesを読み込みます。 xxx.jar ├META-INF/ | └MANIFEST.MF ├com/ | └example/ | └…

Javaでオブジェクトのディープクローンを行う

ディープクローンという言葉があるかどうか分かりませんが。。 オブジェクトのディープコピーを返すメソッドを作成します。 方法はいくつかあるかと思いますが、ここではSerializableインタフェースを用いてやってみます。 public static Object deepClone(S…

SimpleDateFormatを使って、文字列が日付として正しいかチェックする

public static void main(String[] args) { System.out.println(checkDate("20150823")); // true System.out.println(checkDate("20150831")); // true System.out.println(checkDate("20150832")); // false System.out.println(checkDate("a20150823")); …