Javaでのバージョン比較ライブラリ一覧

Claude 3.7 Sonnet(消費:1)

Claude 3.7 Sonnet(消費:1)

Javaでバージョンを比較する何か良いライブラリ・APIはありますか?

Javaでバージョン比較を行うライブラリ/API

Javaでバージョン文字列を比較するには、以下のライブラリやAPIが便利です:

1. Apache Maven Artifact

Maven自体のバージョン比較ロジックは堅牢で広く使われています。

Java
1import org.apache.maven.artifact.versioning.ComparableVersion;
2
3ComparableVersion v1 = new ComparableVersion("1.2.3");
4ComparableVersion v2 = new ComparableVersion("1.2.10");
5
6int result = v1.compareTo(v2); // 負の値が返る(v1 < v2)

依存関係:

xml
1<dependency>
2    <groupId>org.apache.maven</groupId>
3    <artifactId>maven-artifact</artifactId>
4    <version>3.8.6</version>
5</dependency>

2. Semantic Versioning (semver4j)

セマンティックバージョニング(SemVer)規格に準拠したバージョン比較:

Java
1import com.vdurmont.semver4j.Semver;
2
3Semver sem1 = new Semver("1.2.3");
4Semver sem2 = new Semver("1.3.0");
5
6boolean result = sem1.isLowerThan(sem2); // true

依存関係:

xml
1<dependency>
2    <groupId>com.vdurmont</groupId>
3    <artifactId>semver4j</artifactId>
4    <version>3.1.0</version>
5</dependency>

3. Java標準APIで自前実装

標準APIを使った単純な実装:

Java
1public int compareVersions(String version1, String version2) {
2    String[] v1Parts = version1.split("\\.");
3    String[] v2Parts = version2.split("\\.");
4    
5    int length = Math.max(v1Parts.length, v2Parts.length);
6    
7    for (int i = 0; i < length; i++) {
8        int v1 = i < v1Parts.length ? Integer.parseInt(v1Parts[i]) : 0;
9        int v2 = i < v2Parts.length ? Integer.parseInt(v2Parts[i]) : 0;
10        
11        if (v1 < v2) return -1;
12        if (v1 > v2) return 1;
13    }
14    
15    return 0;
16}

ユースケースに合わせて、最適な選択肢を検討してください。複雑なバージョン形式(プレリリースタグ付きなど)を扱う場合は、既存のライブラリを利用するのが確実です。