JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

gradle を使用して jar ファイルを作成する

## 想定読者
– gradle の task で jar ファイルを作成する方法を知りたい人

## 結論
– 基本的には build task を実行すれば ok

“` bash:linux cli
./gradlew build
“`

ただ、別の task を利用して jar を生成することも可能
以下はそういった別の task も含めた解説
## 解説
– jar ファイルの作成には jar, bootJar, build の 3 つの task が利用できる

#### jar
– plain jar を作成する (依存関係 や マニフェストファイルは含まれない)
– ライブラリとして使用する jar の作成に使用される
– (jarファイル名)-plain.jar の形式で ./build/libs/ に出力される
#### bootJar
– 実行可能 jar を作成する (全ての依存関係を含み、単独で実行可能)
– (jarファイル名).jar の形式で ./build/

元記事を表示

Javaで「if文を使った条件分岐」の動作を確認してみた

# 概要

Javaで「if文を使った条件分岐」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/if/index1.html

# 実装

以下のファイルを作成しました。
“`JSample1_1.java
class JSample1_1{
public static void main(String[] args){
System.out.println(“1から10までの数値で偶数を出力します”);

for (int i = 1 ; i <= 10 ; i++){ System.out.print(i + " は"); if (i % 2 == 0){ System.out.println("偶数です"); }else{ System.out.println("奇数です"); } } } } ``` ```JSample1_2.java class JSample1_2{ publi

元記事を表示

JavaのStringクラスについて

ググったら似たような記事がいくつもヒットすると思うけど、あまりにもモヤモヤしたのでここにまとめておく。すんまへん…

### ことの発端
とあるJavaカリキュラムでオブジェクト指向の勉強をしている最中に、「文字列の比較には`equals()`メソッドを使うんだよ!`==`は使えないよ!」と説明してあり、「ふーん。そうなんだねー…」と思ったまま、特にその時は何の疑問ももたずに学習を進めていた。しかぁし!、その2つくらい先の章の最初のサンプルコードにぃ〜?、下のように書いてあるじゃぁ、あ〜りませんかぁ!

“`java:コード1
boolean sampleMethod(String s1, String s2) {
if(s1 == “Hello” && s2 == “World”) {

“`
…あれ?`==`使ってるやん!?しかも、これについて何の解説もされてなく、さも当たり前かのように書いてあるので、どういうことだと思ってちょっと調べてみることにした。

### 結論
文字列リテラルを直接クラス型変数に代入するインスタンスの生成方法

元記事を表示

EclipseでJava Servletを使用したLINE BOTの作成

# はじめに
今回は、Eclipseを使用してJava ServletベースのLINE BOTを作成する方法をご紹介します。このボットは、ユーザーからのメッセージに対して「Hello」と返信するシンプルなものです。

# バージョンアップに関する注意事項
今回のブログ記事はバージョンアップがあったため、新たにまとめ直すことを目的としています。

## From version 7.x
LINEのSDK開発チームはOpenAPI仕様に基づいてSDKコードを生成することを決定しました。その結果、LINE BOTSDK 7.xは6.xとは互換性がありませんが、今後のAPI変更には迅速に対応できるようになります。

– `line-bot-model`と`line-bot-api-client`は`line-bot-webhook`と`clients`モジュールに分割されました。
– `line-bot-servlet`はサポートされなくなりました。
– `line-bot-cli`はサポートされなくなりました。
– `line-bot-spring-boot`は以下のモジュールに分割されまし

元記事を表示

SpringBootで静的なcssやJavaScriptのファイルを扱う

# この記事はこれの続きです

https://qiita.com/waokitsune/items/25e7712c5bcd96c8bae7

# 静的なファイルを置いておくフォルダー作成

**パッケージではなくフォルダー** というのがポイント。

『src/main/resources』直下にフォルダー作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/80337334-1d39-a97e-fd9b-dea7ea41b313.png)

フォルダー名は『static』。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/59428758-002a-49e0-ef16-c9faa337112e.png)

# 静的なファイル作成後はこちら

staticより下の階層については、フォルダー名やファイル名に特別な縛りはありません。
本記事ではこのようにcs

元記事を表示

Javaのソースファイルモードを使って最も浅いJDBCのサンプルを作ってみた

### サンプルコード

“`jdbc.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class SqlConnect {
public static void main(String[] args) throws Exception {
Class.forName(“com.mysql.cj.jdbc.Driver”);
final String jdbcId = “root”;
final String jdbcPass = “”;
final String jdbcUrl = “jdbc:mysql://127.0.0.1:3306/”;
Connection cn = DriverManager.getConne

元記事を表示

TestcontainersでOracle XE起動時にXEPDB1に初期化SQLを実行

# 背景
Testcontainersで“`gvenzl/oracle-xe“`を使用してdockerにOracle XEを起動する際、“`SYS“`としてデフォルトPDBの“`XEPDB1“`に初期化SQLを実行したい。

# やり方など
詳細は公式ドキュメント https://hub.docker.com/r/gvenzl/oracle-xe の Initialization scripts に解説がある。

まず、コンテナの機能で“`/container-entrypoint-initdb.d“` ディレクトリ下へ “`*.sql“` を配置するとDB初期化時にこれらを実行する。次に、testcontainersの“`withCopyFileToContainer“`でホストのファイルをコンテナにコピーできる。なので、これらを組み合わせて使用する。またポイントとして“`SYS“` ユーザでこれらSQLを実行する。なので、権限が必要な初期化処理はこれを利用する。

サンプルのソースコードは以下の通り。

“`java
import org.testco

元記事を表示

Javaで「continue文の使い方」の動作を確認してみた

# 概要

Javaで「continue文の使い方」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/for/index10.html

# 実装

以下のファイルを作成しました。
“`JSample10_1.java
class JSample10_1{
public static void main(String[] args){
for (int i = 1; i < 10; i++){ if (i % 3 == 0){ continue; } System.out.println("i = " + i); } System.out.println("End"); } } ``` ```JSample10_2.java class JSample10_2{ public static void main(String[] args){ Outer: for (int i = 1; i < 6;

元記事を表示

Pathの拡張子をチェックしたい

Pathの拡張子をチェックしたい場合、PathMatcherクラスのmatchesメソッドを利用します。

例) Pathの拡張子がcsvかどうかをチェックする

“`java
Path path = Path.of(“Path/To/Target.csv”);
PathMatcher matcher = FileSystems.getDefault().getPathMatcher(“glob:**.csv”);
if (matcher.matches(path)) {
System.out.println(“This file is csv.”);
} else {
System.out.println(“This file is not csv.”);
}
“`

**環境情報**

“`
C:\>javac -version
javac 21-beta

C:\>java -version
openjdk version “21-beta” 2023-09-19
OpenJDK Runtime Environment Temurin-21+35-20230904213

元記事を表示

Nablarch 6のRESTfulウェブサービスのExampleをOpen Liberty+PostgreSQLを使うように変更してみる

# What’s?

前にNablarchのRESTfulウェブサービスのExampleをPostgreSQLに変更して動かしてみました。

https://qiita.com/charon/items/095a89b19421010160aa

今回は、Nablarch 6を使ってRESTfulウェブサービスのExampleをOpen Liberty+PostgreSQLで動かしてみたいと思います。

Nablarch 6をOpen Libertyで動かすことが主題、とも言えます。

# Nablarch 6

Nablarch 6は2023年12月にリリースされており、現在のバージョンは6u1です。

https://nablarch.github.io/docs/6u1/doc/releases/index.html

Nablarch 6はJakarta EE 10に対応しています。

https://nablarch.github.io/docs/6u1/doc/migration/index.html

NablarchのRESTfulウェブサービスのExampleはこちら

元記事を表示

SpringBootでよくあるエラー

# エラー内容
“`
Error starting ApplicationContext. To display the condition evaluation report re-run your application with ‘debug’ enabled.
“`

このエラーは、ポート番号がすでに使用中となっているときによく出てしまいます。

# 対処法
ターミナルで
“`
lsof -i:8080
“`
と入力した後、
“`
kill 番号
“`
と入力してください。
番号には一個目を実行した後に出てくるものです。

そしてもう一度Eclipseでプログラムを起動してみてください。

# 終わりに
これでも直らなかった場合は、application.propertiesやpom.xmlを見直してみてください。

元記事を表示

Javaで「break文の使い方」の動作を確認してみた

# 概要

Javaで「break文の使い方」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/for/index9.html

# 実装

以下のファイルを作成しました。
“`JSample9_1.java
class JSample9_1{
public static void main(String[] args){
int num = 1;

for (int i = 0; i < 30; i++){ num *= 5; System.out.println("num = " + num); if (num > 10000){
System.out.println(“Over 10000”);
break;
}
}
}
}
“`

以下のファイルを作成しました。
“`JSample9_2.java
class JSample9_2{
public static void main(S

元記事を表示

[備忘録]forとwhileの使い分け(Java)

プログラミングを初めて3日目。
そろそろ処理を繰り返したいぞとなった私は2つの処理を学習しました。

**for**  と  **while**
(do~whileはおそらくしばらく登場しないので次の機会に)

いつ、どちらを使えばいいの???
ということでまとめてみました。

**・forとは**
“`
import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {

for (初期値; 条件式; 増減式) {
  繰り返し処理
}
}
“`
for 文は冒頭で初期値、条件式、増減式の3つを設定する。
ここで**繰り返しを何回行うか**について設定するのがよくある方法。

**・whileとは**
“`
import java.util.*;

public class Main {
public static void main(String[] args) throws Exception {
while (条件式)

元記事を表示

備忘-プロパティ & コンストラクタ

## プロパティとは
呼び出す側は直接フィールドを変更しているように見えますが、実際はgetterやsetterを通して行われる仕組みを指します。

“`java
public class Product{
private String name;
private String id;
private int price;

public String getName(){
return this.name;
}

public void setName(String name){
this.name = name;
}
}
“`
上記の仕組みにより、フィールドを自由にいじることができ、修正が発生しても簡単に実行できるようになります。

## インスタンスとは
コンストラクタを説明する前にインスタンスについて整理することにより、コンストラクタとの違いがわかり、理解しやすいと考えインスタンスをまず書いていきたいです。

インスタンスとは、データを格納できる箱のような存在です。名前や価格を箱に詰めていくことで、独自

元記事を表示

Javaで「拡張for文(for-each文)を使って要素を順に取得する」の動作を確認してみた

# 概要

Javaで「拡張for文(for-each文)を使って要素を順に取得する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/for/index8.html

# 実装

以下のファイルを作成しました。
“`JSample8_1.java
class JSample8_1{
public static void main(String[] args){
String pref[] = {“北海道”, “東京都”, “神奈川県”};

for (String str: pref){
System.out.println(str);
}
}
}
“`

以下のコマンドを実行しました。

“`
$ javac JSample8_1.java
$ java JSample8_1
北海道
東京都
神奈川県
“`

# まとめ

何かの役に立てばと。

元記事を表示

SpringAIのきほんのき

## Hello SpringAI
[SpringAI](https://spring.pleiades.io/spring-ai/reference/)はSpringの**AIアプリケーションフレームワーク**です。テキスト生成に限らず画像生成AIや音声生成AIにもサポートを広げています。
テキスト生成においては他のLangChain4jと同じように、さまざまな開発補助をしてくれます。

![スクリーンショット 2024-05-31 11.18.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801871/970357ce-291e-cec6-9c4a-3775c06134d6.png)

GPTなどの主要なLLMサービスには対応しており、簡単なコードの実装でLLMが動作するアプリを開発することができます。
ローカルLLMに対しては[Ollama](https://ollama.com/)経由で対応しています。

Ollamaやllama.cppについては、以下のとおりになります。

|名前|説

元記事を表示

【SpringSecurity】5.4.6から5.4.7に上げた時に発生したFilter順序不正について

# 背景
SpringFrameworkのバージョンを上げたことでエラー画面からログイン画面に戻れなくなったため、確認したのがきっかけです。
Controllerを通過せずにエラーになっていたため、SpringSecurityのTRACEログを確認したところ、SessionManagementFilter通過後の挙動が異なっていることがわかりました。

# 【前提】SpringSecurityとは?
> Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.
Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spr

元記事を表示

備忘-直列化 & static

## 直列化
インスタンスをバイト列に変換したり、その反対をしたりすることができる仕組みのことです。直列化することにより、ファイルを保存したり、ネットワークで送ったりすることができる様になります。直列化対象のクラスは、java.io.Serializableを実装することが必要になります。

“`java
public class Product implements Seralizable {
private String name;
private Deals id;
private int price;
}
“`

ProductsクラスとDealsクラスが直列化を実装していた場合、Productsインスタンスを直列化したときにDealsインスタンスも直列化されます。一方でDealsクラスが直列化を実装していなかった場合はバイト列に変換されたとき、Dealsインスタンスの情報は含まれません。また、復元した場合、idフィールドがnullの状態で復元されます。

加えて、直列化した後に資産が更新された場合、直前で直列化してしまったファイルは矛盾が生

元記事を表示

Javaで「do..while文を使った繰り返し処理」の動作を確認してみた

# 概要

Javaで「do..while文を使った繰り返し処理」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/for/index7.html

# 実装

以下のファイルを作成しました。
“`JSample7_1.java
import java.util.Random;

class JSample7_1{
public static void main(String[] args){
int num;
Random rand = new Random();

System.out.println(“6が出たら終わりです”);

do{
num = rand.nextInt(6) + 1;
System.out.println(“no = ” + num);
}while (num != 6);
}
}
“`

以下のコマンドを実行しました。
“`
$ javac JSample7_1.java
$ java JSample7

元記事を表示

javaとtypescriptの開発3日目

前回からToDoアプリケーションを作成しました。
ブラウザ表示は簡素なものとなっていますが、サーバーからCRUPを行うAPIを実行できるようになっているので満足しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631649/7dd124f0-7f14-3d9c-d0f9-915788ee25d3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631649/bacca9ca-8cbe-be03-d160-94139d8d5404.png)

最終的にこのようなディレクトリ構造になりました。
後学のために各ファイルの役割をメモも併せて記載するとこうなります。

my-java-ts-project/
├── demo/ # バックエンド (Spring Boot)
│ ├── Dockerfile # Docke

元記事を表示

OTHERカテゴリの最新記事