gradle + Kotlin で実行可能jarをビルドする

KotlinからMySQL 8.0に接続してみました。
Kotlin + gradleでMySQL 8.0に接続するプログラムを実行する

このプログラムを微調整。
単独で実行できるjarをビルドしてみます。


Kotlinプログラム



登録しているデータを検索するプログラムとしました。


  1. package sample
  2. import java.sql.*
  3. // MySQLへ接続
  4. fun main(args: Array<String>) {
  5.     var conn: Connection? = null
  6.     var stmt: Statement? = null
  7.     var rs: ResultSet? = null
  8.     try {
  9.         conn = DriverManager.getConnection("jdbc:mysql://192.168.1.101/sample", "admin", "P@ssw0rd")        
  10.         stmt = conn.createStatement()
  11.         rs = stmt.executeQuery("SELECT * FROM test")
  12.         while (rs.next()) {
  13.             println(rs.getInt("id"))
  14.             println(rs.getString("value"))
  15.         }
  16.     } catch (e: Exception) {
  17.         println(e)
  18.     } finally {
  19.         rs?.close()
  20.         stmt?.close()
  21.         conn?.close()
  22.     }
  23.     
  24. }





gradle



build.gradleを編集。
単独で実行できるjarとなるよう、必要なjarを同梱するよう構成します。

こちらを参考にさせていただきました。
ことりんと一緒 - 3. 実行可能 JAR

・build.gradle


plugins {
    // Apply the Kotlin JVM plugin to add support for Kotlin.
    id 'org.jetbrains.kotlin.jvm' version '1.3.72'

    // Apply the application plugin to add support for building a CLI application.
    id 'application'
}

repositories {
    // Use jcenter for resolving dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

dependencies {
    // Align versions of all Kotlin components
    implementation platform('org.jetbrains.kotlin:kotlin-bom')

    // Use the Kotlin JDK 8 standard library.
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'

    // Use the Kotlin test library.
    testImplementation 'org.jetbrains.kotlin:kotlin-test'

    // Use the Kotlin JUnit integration.
    testImplementation 'org.jetbrains.kotlin:kotlin-test-junit'

    // ※ こちらの記載を追記
    // 実行可能jar作成時に必要
    compile 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72'
    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.20'

}

application {
    // Define the main class for the application.
    mainClassName = 'sample.AppKt'
}

// ※ こちらの記載を追記
// jar作成のための構成を追記
jar {
    manifest {
        attributes 'Main-Class': 'sample.AppKt'
    }
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
}





jarを生成


$ gradle jar




build/libsにsample.jarが出力されました。
実行してみます。


$ java -jar build/libs/sample.jar
1
Kotlinで更新
2
Kotlinから追加



無事単独で実行できるjarファイルが作成できました。


関連記事

Kotlin + gradleでMySQL 8.0に接続するプログラムを実行する

Kotlinのビルドはこちらで作成したgradle環境で行っています。
gradleでKotlinプロジェクトの雛形を生成・ビルド

gradleの設定MySQLのjarを追加
Kotlinから以下で作成したMySQL 8.0環境に接続してみます。
MySQL 8.0をUbuntu Server 20.04へインストール
Ubuntu Server 20.04 + MySQL 8 ユーザーの作成と別端末からの接続許可



サンプルテーブルの作成



登録、検索のテスト用にこんなテーブルを作成しておきました。


create table test (
id int not null primary key,
value text not null
)



1行データを追加しておきます。


insert into test (id, value) values (1, 'テストデータ')





gradle



build.gradleを編集し、MySQLのJDBCドライバを記載します。
記載方法はこちらを参照
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.20

・build.gradle


  1. plugins {
  2.     // Apply the Kotlin JVM plugin to add support for Kotlin.
  3.     id 'org.jetbrains.kotlin.jvm' version '1.3.72'
  4.     // Apply the application plugin to add support for building a CLI application.
  5.     id 'application'
  6. }
  7. repositories {
  8.     // Use jcenter for resolving dependencies.
  9.     // You can declare any Maven/Ivy/file repository here.
  10.     jcenter()
  11. }
  12. dependencies {
  13.     // Align versions of all Kotlin components
  14.     implementation platform('org.jetbrains.kotlin:kotlin-bom')
  15.     // Use the Kotlin JDK 8 standard library.
  16.     implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
  17.     // Use the Kotlin test library.
  18.     testImplementation 'org.jetbrains.kotlin:kotlin-test'
  19.     // Use the Kotlin JUnit integration.
  20.     testImplementation 'org.jetbrains.kotlin:kotlin-test-junit'
  21.     // ※ こちらの記載を追記
  22.     compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.20'
  23. }
  24. application {
  25.     // Define the main class for the application.
  26.     mainClassName = 'sample.AppKt'
  27. }





接続サンプル



接続サンプルはこちらを参考にさせていただきました。
Kotlin で MariaDB 10.4 に接続する


  1. import java.sql.*
  2. // MySQLへ接続
  3. fun main(args: Array<String>) {
  4.     var conn: Connection? = null
  5.     var stmt: Statement? = null
  6.     var rs: ResultSet? = null
  7.     try {
  8.         conn = DriverManager.getConnection("jdbc:mysql://192.168.1.101/sample", "admin", "P@ssw0rd")
  9.         println("connect ok")
  10.         stmt = conn.createStatement()
  11.         rs = stmt.executeQuery("SELECT * FROM test")
  12.         while (rs.next()) {
  13.             println(rs.getInt("id"))
  14.             println(rs.getString("value"))
  15.         }
  16.     } catch (e: Exception) {
  17.         println(e)
  18.     } finally {
  19.         rs?.close()
  20.         stmt?.close()
  21.         conn?.close()
  22.     }
  23.     
  24. }



実行結果


connect ok
1
テストデータ



データベースに接続してデータが取得できました。



データの追加、更新



データの追加や更新を試してみます。


  1. import java.sql.*
  2. // MySQLへ接続
  3. fun main(args: Array<String>) {
  4.     var conn: Connection? = null
  5.     var stmt: Statement? = null
  6.     var rs: ResultSet? = null
  7.     try {
  8.         conn = DriverManager.getConnection("jdbc:mysql://192.168.1.101/sample", "admin", "P@ssw0rd")
  9.         println("connect ok")
  10.         stmt = conn.createStatement()
  11.         // データの追加
  12.         stmt.execute("INSERT INTO test (id, value) VALUES (2, 'Kotlinから追加')")
  13.         // データの更新
  14.         stmt.execute("UPDATE test SET value = 'Kotlinで更新' WHERE id = 1")
  15.         rs = stmt.executeQuery("SELECT * FROM test")
  16.         while (rs.next()) {
  17.             println(rs.getInt("id"))
  18.             println(rs.getString("value"))
  19.         }
  20.     } catch (e: Exception) {
  21.         println(e)
  22.     } finally {
  23.         rs?.close()
  24.         stmt?.close()
  25.         conn?.close()
  26.     }
  27.     
  28. }




実行結果


connect ok
1
Kotlinで更新
2
Kotlinから追加





【参考URL】
Kotlin で MariaDB 10.4 に接続する

関連記事

Kotlinで文字コードを指定し、CSVファイルを読み込む

KotlinでCSVファイルの読み込みを試してみます。
その前にまず普通のテキストファイル読み込みから。


テキストファイルを1行づつ読み込む



こちらを参考にさせていただきました。
Javaでファイル読み込みする3つの方法 簡単なものから性能重視まで!

読み込むファイルはこちら

・sample.txt

日本語でこんにちは
二行目




Kotlinのソースはこのようになりました。


  1. import java.io.*
  2. import java.nio.file.*
  3. // ファイル読み込み
  4. fun main(args: Array<String>) {
  5.     val file = Paths.get("sample.txt")
  6.     var br: BufferedReader? = null
  7.     try {
  8.         br = Files.newBufferedReader(file)
  9.         var text = br.readLine()
  10.         while(text != null) {
  11.             println(text)
  12.             text = br.readLine()
  13.         }
  14.     } catch(e: Exception) {
  15.         print(e)
  16.     } finally {
  17.         br?.close()
  18.         print("ok")
  19.     }
  20.     
  21. }



実行結果


日本語でこんにちは
二行目
ok





文字コードを指定してファイルを読み込む



文字コードをms932に変更したテキストを用意しプログラムを実行するとエラーになります。


java.nio.charset.MalformedInputException: Input length = 1




文字コードを指定してファイルを読み込むサンプルはこうなりました。


  1. import java.io.*
  2. import java.nio.file.*
  3. import java.nio.charset.*
  4. // 文字コードを指定してファイル読み込み
  5. fun main(args: Array<String>) {
  6.     val file = Paths.get("sample_ms932.txt")
  7.     var br: BufferedReader? = null
  8.     try {
  9.         // 第二引数で文字コードを指定
  10.         br = Files.newBufferedReader(file, Charset.forName("MS932"))
  11.         var text = br.readLine()
  12.         while(text != null) {
  13.             println(text)
  14.             text = br.readLine()
  15.         }
  16.     } catch(e: Exception) {
  17.         print(e)
  18.     } finally {
  19.         br?.close()
  20.         print("ok")
  21.     }
  22.     
  23. }







CSVファイルを読み込み



続いてCSVファイルを読み込んでみます。
使用するのは郵便番号データの北海道版としました。
https://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html


文字コードはms932
「,」で分割し、分割後の文字列の前後「"」を取り除きます。
郵便番号と住所を表示してみました。


  1. import java.io.*
  2. import java.nio.file.*
  3. import java.nio.charset.*
  4. // CSVファイル読み込み
  5. fun main(args: Array<String>) {
  6.     val file = Paths.get("01HOKKAI.CSV")
  7.     var br: BufferedReader? = null
  8.     try {
  9.         // 文字コードはms932
  10.         br = Files.newBufferedReader(file, Charset.forName("MS932"))
  11.         var text = br.readLine()
  12.         while(text != null) {
  13.             // 2:郵便番号, 6:都道府県, 7:市区町村, 8:番地
  14.             val row = text.split(",").map{ it.trim('"') }
  15.             println(row[2])
  16.             println(row[6] + row[7] + row[8])
  17.             text = br.readLine()
  18.             // 確認のため1行目を表示したら停止
  19.             break
  20.         }
  21.     } catch(e: Exception) {
  22.         print(e)
  23.     } finally {
  24.         br?.close()
  25.         print("ok")
  26.     }
  27.     
  28. }



実行結果


0600000
北海道札幌市中央区以下に掲載がない場合
ok



改行などを含まない簡単なCSVファイルならこれで読み込めそうです。



【参考URL】
Javaでファイル読み込みする3つの方法 簡単なものから性能重視まで!
関連記事

Kotlin 文字を指定し文字列前後の文字を除去する

KotlinでPythonでいうstripのような動作をさせる方法


trim



trimに除去したい文字をChar型で指定すればOKです
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/trim.html


  1. fun main(args: Array<String>) {
  2.     val text = "-----abc123-------"
  3.     println(text.trim('-'))
  4. }



実行結果


abc123




複数文字指定も可能です


  1. fun main(args: Array<String>) {
  2.     val text = "--__==---abc123-------__=="
  3.     println(text.trim('-', '_', '='))
  4. }


関連記事

Ubuntu 20.04にOpenJDK 14をインストール

Ubuntu 20.04にOpen-JDK 14をインストールしてみます。


apt



普通にaptでインストールできました。


$ sudo apt install openjdk-14-jdk




jdk 14がインストールできました。


$ java --version
openjdk 14.0.1 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+7-Ubuntu-1ubuntu1)
OpenJDK 64-Bit Server VM (build 14.0.1+7-Ubuntu-1ubuntu1, mixed mode, sharing)


関連記事

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ