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

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

いまさら初めて Ant のビルドファイルを書いたので、逆引きの備忘録を残す

# はじめに
これまで、CI/CD のプロジェクト導入を通じて、各種のビルドプロセスの自動化に関わってきましたが、今になって初めて Ant のビルドファイルを書く機会がありました。

現在、Java のビルドツールでは主に Maven もしくは Gradle が使われています[^1]。そのため、Web上の記事も Maven/Gradle に比べ Ant は比較的少ないようで、欲しい情報にたどり着くのに苦労しました。例えば、Qiita で Maven/Gradle/Ant のタグがついた記事はそれぞれ 932/1723/89 記事でした。桁が違いますね。

ちなみに、Google Trend で過去10年の人気度推移を比較すると以下のようなグラフになりました。

一応 [公式ドキュメント](https://ant.apache

元記事を表示

Keycloak23.0.1のセットアップ

:::note info
※本記事は、Keycloakのバージョンアップに伴い、「[Keycloakのセットアップ](https://qiita.com/tamura__246/items/13fc301e9409fef77bf3)」の記事を最新化したものです。
:::

概要

2023年12月2日時点での最新版Keycloak23.0.1を使用できるようにセットアップする手順について説明します。

セットアップ手順は以下の通りです。

1.Keycloakのダウンロード
2.サーバの起動
3.管理ユーザの作成
4.管理コンソールへのログイン

これに加えて、このページでは、Keycloakを日本語化する方法とアンインストールする方法についても触れます。

なお、詳細については、Keycloakの[各種ガイド](https://www.keycloak.org/documentation.html)を参照してください。NRI OpenStandiaで[ガイドの日本語訳](https://openstandia.jp/oss_info/keycloak/document.html)も

元記事を表示

複数の同型の Bean がある場合に `@Qualifier` や `@Primary` を使用せず inject する

## 結論
inject 先のフィールド名を Bean 名に合わせるだけで OK。

## 前提
`Example` を実装した Bean が 2 つ存在しているとする。
“`java
@Coponent
public ExampleImplA implements Example {
……
}
“`
“`java
@Coponent
public ExampleImplB implements Example {
……
}
“`
こんな感じで実行すると当然エラーが出る。
“`java
// Example 型の bean を使用
@Component
@RequiredArgsConstructor
public class BeanConsumer {
private final Example example;
……
}
“`
“`bash
……
BeanConsumer required a single bean, but 2 were found
…..
Consider markin

元記事を表示

Mac上でGraalVMでネイティブイメージを作ってHello Worldしようとしたが挫折した話

この記事は Javaのカレンダー 2日目の記事になります。

https://qiita.com/advent-calendar/2023/java

# はじめに

最近コードを触ることから離れていたのですが、最近少し時間ができたので、前から気になっていたGraalVMを触ってみることにしました。

本番環境で動かしている会社もあるんだろうか?

ということで、やってみた系の記事になります。

# GraalVMとは

Javaコードからネイティブバイナリを作る事ができるツールです。
ネイティブアプリを作れるということは、JVMを利用する場合の良くない特徴の、JVM特有の起動の遅さやJVMのランタイムを環境に入れなければ動作できないことを回避することができます。

つまり、アプリ高速に起動できたり、アプリ単体で起動できるということです!
もしかしたらアプリのパフォーマンスも高いのでは?

しかし、デメリットもあります。ネイティブアプリになるため、ビルドした環境と同じ環境でしか動かなかったり、JVMがOSなどの環境の違いを埋めていた部分の影響を受けることになります。

ただ、最近は

元記事を表示

SpringBoot2.7.x以前から3.2.xへOpenRewriteでアップグレード

## 概要
アップグレードの作業を出来るだけ再現しやすい手順にまとめようと思います。
このアップグレードには下記の要素が含まれます。

– Java11からJava21へのバージョンアップ
– Gradleのバージョンアップ
– Spring Boot3.2へのグレードアップをOpenRewriteで半自動化

インパクトが大きい変更が多いので、2.7.x以前の環境も残したうえで、3.2.xで開発できる状態を目指します。

## 環境
この記事で想定している環境は下記となります。

– Gitを使用
– Gradleを使用(Mavenでも応用はできると思います)
– Spring Bootを使用
– OpenRewriteを使用
– 筆者のIDEはEclipse
– 筆者のOSはWindows

IDEやOSによる差異はあまり多くないと思いますが、参考にしていただければと思います。

## 下準備
### 現(2023/11/21)時点でのJava21およびSpringの環境を確認
現時点ではツールやライブラリのJava21対応が遅れている場合があります。

例えばEclipseではJ

元記事を表示

【前編】Javaでオブジェクト指向を学びなおす

:::note warn
初学者向けではないです!
前提となるところは節々省略しています!
:::

前回「Hello World」を出力するコードがなんとなくでしか分からなかったので勉強をしました。

https://qiita.com/suda_imagitech/items/d24deca20e4795f55225

次は何かと考えるとオブジェクト指向でした。
なんだかんだエンジニア4年目なので未学習の言語でもぱっとみで何やってるかなんとな~く分かりますが、オブジェクト指向となると話が変わってきます。

何故かというとあまり覚えていません。。。
ここで改めて勉強しなおしこれからの開発に役立てようと思います。

以前PHPを使ったプロジェクトに携わっていた時期もありましたが、オブジェクト指向を考えて開発していませんでした。普通に良くない。

# 1.オブジェクト指向とは

おさらいです。

なんとなく分かっていますがいざ説明しろと言われるとできず、自分の中で言語化できていません。
ChatGPTさんに聞いてきましょう。

![image.png](https://qiita

元記事を表示

分割圧縮ファイルの解凍

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class FileProcessor {

public static void main(String[] args) {
splitAndCombineFiles(“/input/sample.docx”, “/split”, “/output/sample.docx”);
}

private static void splitAndCombineFiles(String inputPath, String splitFolderPath, String outputPath) {
try {
// Split the original file
splitFile(inputPath, splitFolderPath);

// Combine the split files

元記事を表示

Babashkaことはじめ – Clojureでシェルスクリプティングを代替する

この記事は[FOLIO Advent Calendar 2023](https://adventar.org/calendars/8882)の2日目です。

![00213-3321221044.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231669/79a49e89-3458-25d0-998d-d400c5237d22.png)

# この記事は?

この記事はClojureランタイムであるBabashkaを簡潔に紹介します。また、いくつかの役に立つコードスニペットを示し、チートシート的に使えることも目指します。

# 対象読者

* シェルスクリプトに疲れた人
* Babashka/Clojure固有の複雑な機能は使いませんが、LISP/Javaの右も左もわからない方には厳しいかも

# Babashkaとは?

Clojureは、LISP系のプログラミング言語で、JVM上で動くことが特徴です。

Babashkaは、Clojureのランタイムの一つで、GraalVMを利用し、Clojure

元記事を表示

Java メモ

## Javaについて
### Java
– Javaのプログラムは、OSやハードウェアに依存しないバイトコード(中間言語)と呼ばれる抽象的なコードで表現されています。
– [公式サイト](https://www.java.com/ja/)
– [GitHub](https://github.com/topics/java)

### Apache Tomcat
– Java Servletを動かすときに必要なソフト(サーブレットコンテナ)のひとつです。

### Apache Maven
– Apache Mavenは、Java用プロジェクト管理ツールである。
– Javaプログラムをビルドするためのツールです。
– Apache Antに代わるものとして作られました。
– Apacheライセンスにて配布されているオープンソースソフトウェアです。
– [公式サイト](https://maven.apache.org/)

### JavaServlet
– サーブレットは、サーバーマシン上で実行されるJavaアプリケーションプロク

元記事を表示

【Kotlin】lambda関数の書き方

こんにちは、GxPのチョウキです。
こちらはグロースエクスパートナーズ Advent Calendar 2023の3日目の記事です。

現在、私はアプリ開発に携わっており、その過程でKotlinを使用しています。別のプロジェクトではJavaを用いていましたが、JavaからKotlinへの移行にはいくつか困難が伴います。JavaとKotlinは100%互換性があるとされていますが、一方で似ている部分と大きく異なる部分が存在します。特に、よく使われているLambda関数の観点から、Kotlinの書き方を紹介したいと思います。Lambda関数を使用する際、初見では意味が分かりにくいことがしばしばあり、それを難しく感じることがあります。そのため、この知識をまとめることにしました。

## JavaとKotlinにおけるLambda関数と高階関数の使用
Lambda関数に入る前に、高階関数から説明します。
高階関数とは、簡単に言うと、関数型をパラメータや戻り値に持つ関数を指します。
### Javaでのメソッドの扱い
Javaでは、一つのメソッド内で別のメソッドを呼び出すことは一般的です。

`

元記事を表示

【プログラミング】メソッド・型

# 0.はじめに
大学の講義でJavaを使用するため学習を始めました
自身の備忘録として投稿してます

##### 関連学習
[【プログラミング】Java用語](https://qiita.com/AkihideKato/items/13ba72a0c61eabc540c3)
[【プログラミング】メソッド・型](https://qiita.com/AkihideKato/items/753ad55b10b29f184b0f)
[【プログラミング】Java注意点・ルール](https://qiita.com/AkihideKato/items/63402744493932e9f87b)
[【プログラミング】オブジェクト指向](https://qiita.com/AkihideKato/items/3eb988a962774a409f52)
[【プログラミング】コード記述向上ポイント(個人用)](https://qiita.com/AkihideKato/items/33fd1400be6be2e25f5a)

# 1.メソッド
まとまっと処理の道具のこと
|メソッド|詳細|
|

元記事を表示

SpringBootでgRPCアプリを作成し、Auth0などでJWT認証を行う

この記事は[SRA Advent Calendar 2023](https://qiita.com/advent-calendar/2023/sra)の1日目の記事です。

こんにちは! 関西事業部の佐々木です。

# SpringBootでgRPCアプリを
RESTアプリケーションなど、SpringBootを使ってWebアプリを作るのに慣れているJava技術者は少なくないはずです。
gRPCアプリを作る時にも慣れ親しんだSpringを使いたいと思うのは自然でしょう。
SpringBootを使ってgRPCアプリケーションを作るのは簡単で、LogNetのgrpc-spring-boot-starter([https://github.com/LogNet/grpc-spring-boot-starter] (https://github.com/LogNet/grpc-spring-boot-starter)) を依存関係に追加します。

gradleなら

“`deuild.gradle
dependencies {
implementation ‘io.github.logne

元記事を表示

[Java]staticとは何なのか

初投稿です。

牛尾剛氏著の『世界一流エンジニアの思考法』を読んで光の速さで感化され、とりあえず今のプロジェクトで使っているJavaとSpring bootを徹底的に基礎から勉強しなおそうと思い立ちました。
※エンジニアとしては6年目とかですが、これまでJavaは表層をさらっと理解した程度でググりながらor他のプログラマの見よう見まねで現場を乗り越えてきたド三流エンジニアです。

まずはJava、ということで定番書でもあるEffective Java 第3版を読み始める。
読み始めてすぐ、
staticファクトリメソッドとは?という疑問にぶちあたりました。
というか、そもそもstaticって何?ちゃんと理解しているか?していない。

じゃあまずはstaticについてちゃんと理解しよう。

### staticなメンバとは
結論から言うと、「インスタンスではなくクラスに紐づくメンバ」である。

ちょうど業務でいい例があったのでそれを使って整理してみます。

この日のタスクで解消したい課題は以下の通り。
「CSVから取り込んだ値に対して、数値項目を最終的なデータ連携先のDBの桁数に合わせて

元記事を表示

【Java】Jacksonを使ってJSONを比較する

# TL;DR
– `Jackson`を使うことで、単純に文字列では比較できない`JSON`も比較できる
– 単なる一致チェックにとどまらず、柔軟な比較も可能

# やりたいこと
以下のような、期待値の`JSON`が有ったとします。

“`json:expected.json
{
“foo”: “foo”,
“bar”: 1,
“baz”: true
}
“`

一方で、`Java`上で得られる`JSON`は以下のような形式だったとします。

“`java
String actual = “{\”bar\”:1,\”baz\”:true,\”foo\”:\”foo\”}”;
“`

このような場合に、この2つが`JSON`として等しいことをテストします[^joukyou]。

[^joukyou]: 具体的には、大きな`JSON`の出力結果をテストする際に、期待値は整形済み`JSON`で管理したいが、出力は整形できないという状況で、この方法で比較を行いました。

# やり方
題の通り、`Jackson`を使ったやり方を紹介します。

`Jackson`では`re

元記事を表示

GradleプロジェクトにGitHub Packagesで公開したJarを組み込みたい

# Overview
GitHub Packagesに自作jarをアップロードしたのですが、それをGradleで作った別のプロジェクトに組み込むための手順がヒットしなかったので、今回記事としてアップしました。

イメージとしては以下の通りです。
– zoeque.hogeというgroupIdを持つ、fugaというartifactをGitHub Packagesにアップロードした
– piyoというプロジェクトでこのfugaを使いたい!

“`plantuml
header
zoeque/hogeのfugaを依存関係に含めたい
end header
package “GitHub Packages”{
package fuga {
component Module
}
}
package piyo {
component Application
}
Module -> Application
“`

# 組み込み先の設定
piyoのbuild.gradleを修正します。具体的には以下のように設定します。
“`gradle
repositories

元記事を表示

各言語のplaygroundまとめ

直近、golangの現場で2年近くやらせていただいてるのですが、Go Playgroundめっちゃ便利ですよね!
バージョンも選べて、なおかつコードもシェアできて、ちょっと書いて実行して確認して、結果や内容を共有できるの最高です

いくら実行環境を簡単に用意できるような時代になったとはいえ、「ちょっと試したい」みたいなときってあるじゃないですか。
ということで、今回はいろんな言語のPlayground事情の調査も込めて、まとめていこうと思います

# go
https://go.dev/play/

# javascript
vueやreactまで?!これはすごい!!

https://playcode.io/

![スクリーンショット 2023-11-21 8.30.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323088/afccef1f-da3c-649b-7afa-ed6b4118869f.png)

# TypeScript
@takubii 様情報提供ありがとうございます!

htt

元記事を表示

プログラミング言語 Go Java C# で関数を介した整数カウントアップ実行時間を仲良く競う

# はじめに
プログラミング言語 Go ととJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
go version go1.19.5 windows/amd64
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。

# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
class Program
{
/**
* メイン
*

元記事を表示

Javaにおけるアノテーションについて学ぶ

Javaにおけるアノテーションについて学習ついでにまとめてみました。
アノテーションの基本的な構文や使い方について説明する記事です。
割とchatGTPくんに質問しながら理解していった節があるので、サンプルなどはGPTが生成したものが多いです。

# 基本的なアノテーションの使用法と概要
## そもそもアノテーションとは
直訳すると「注釈」という意味。
注釈とは「語句や文章をわかりやすく解説したもの」である。

## Javaにおけるアノテーションとは
アプリケーションのロジックに直接関係しない付随情報(メタデータ)をコードに追加することできる。
Javaには最初から用意されている「標準アノテーション」や、自作のオリジナルアノテーションを作成することもできる。

Spring Frameworkにおいて提供されるアノテーションも存在する。
これはフレームワーク自体の拡張機能に対して、特定の振る舞いや動作をさせたい場合にアノテーションを利用することもある。

## 使い方
基本的なアノテーションの構文は @ から始まり、その後にアノテーションの名前が続く。
アノテーションを追加する際は、

元記事を表示

SpringBootで初歩の環境構築~とりあえずトップページが表示されるところまで

# 開発環境

Windows10でやっていきます。

# Spring Tools 4 for Eclipseダウンロード

下記サイトからjarファイルをダウンロード。

https://spring.io/tools

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/bc94f5e2-6a12-05fd-d0e3-d1505188430d.png)

# jarファイル起動

ダウンロードしたjarファイル
spring-tool-suite-4-4.20.1.RELEASE-e4.29.0-win32.win32.x86_64.self-extracting.jar
を起動。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/2b850c5a-878b-85a0-c0d0-d0946127093d.png)

jarファイルと同じフォルダーに、『sts-4.

元記事を表示

JVMとは 〜プログラムが実行されるまでの一連の流れ〜

# はじめに
今回の記事では、JVMとJavaのプログラムが実行されるまでの一連の流れをまとめました。

# JVMとは
JVM(Java Virtual Machine)とは、Java仮想マシンとも呼ばれ、Javaのプログラムを動かすために必要なソフトウェアです。

# JVMを理解するために必要な知識
### コンパイラ
コンパイラは、ソースコード(.java file)をバイトコード(.class file)に変更します。そして、コンパイラはソースコードに構文エラーがないかをチェックします。エラーを発見した際には、コンパイルエラー(Compile Time Error)がスローされます。

### バイトコード
コンパイルの結果生成されたコードで、ソースコードと機械語の仲介役です。バイトコードは、JVMによって処理されます。これにより、JVMを保持するシステムは、OSに関係なくJavaのプログラムを実行することができます。

### 機械語
コンピュータが理解できるコードで、CPUによって処理されます。機械語は0と1の2進数で表現されます。

# なぜJVMが必要なのか
JVMは

元記事を表示

OTHERカテゴリの最新記事