### Install Semver4j Dependency Source: https://github.com/vdurmont/semver4j/blob/master/README.md Configuration snippets for adding the Semver4j library to Maven or Gradle build files. ```xml com.vdurmont semver4j 3.1.0 ``` ```gradle compile 'com.vdurmont:semver4j:3.1.0' ``` -------------------------------- ### Initialize Semver Object Source: https://github.com/vdurmont/semver4j/blob/master/README.md Demonstrates how to instantiate a Semver object using different versioning modes. Throws a SemverException if the input string is invalid. ```java Semver sem1 = new Semver("1.2.3-beta.4+sha899d8g79f87"); // Defaults to STRICT mode Semver sem2 = new Semver("1.2.3-beta.4+sha899d8g79f87", SemverType.NPM); // Specify the mode ``` -------------------------------- ### Compare Versions Source: https://github.com/vdurmont/semver4j/blob/master/README.md Demonstrates various comparison methods including greater than, lower than, equality, and equivalence checks. ```java Semver sem = new Semver("1.2.3"); sem.isGreaterThan("1.2.2"); // true sem.isLowerThan("1.2.4"); // true Semver sem2 = new Semver("1.2.3+sha123456789"); sem2.isEqualTo("1.2.3+sha123456789"); // true sem2.isEquivalentTo("1.2.3+shaABCDEFGHI"); // true ``` -------------------------------- ### Compare Semver Objects in Java Source: https://context7.com/vdurmont/semver4j/llms.txt Illustrates various version comparison methods in Java provided by Semver4j, including greater than, less than, equal to, and equivalence checks. These methods correctly handle pre-release tags and build metadata according to semantic versioning rules. ```java import com.vdurmont.semver4j.Semver; Semver version = new Semver("1.2.3"); // Greater than comparison System.out.println(version.isGreaterThan("1.2.2")); // true System.out.println(version.isGreaterThan("1.2.4")); // false System.out.println(version.isGreaterThan("1.2.3")); // false // Greater than or equal comparison System.out.println(version.isGreaterThanOrEqualTo("1.2.3")); // true System.out.println(version.isGreaterThanOrEqualTo("1.2.2")); // true // Lower than comparison System.out.println(version.isLowerThan("1.2.4")); // true System.out.println(version.isLowerThan("1.2.2")); // false // Lower than or equal comparison System.out.println(version.isLowerThanOrEqualTo("1.2.3")); // true System.out.println(version.isLowerThanOrEqualTo("1.2.4")); // true // Exact equality (includes build metadata) Semver versionWithBuild = new Semver("1.2.3+sha123456789"); System.out.println(versionWithBuild.isEqualTo("1.2.3+sha123456789")); // true System.out.println(versionWithBuild.isEqualTo("1.2.3+shaABCDEFGHI")); // false // Equivalence (ignores build metadata) System.out.println(versionWithBuild.isEquivalentTo("1.2.3+sha123456789")); // true System.out.println(versionWithBuild.isEquivalentTo("1.2.3+shaABCDEFGHI")); // true // Pre-release version comparison Semver alpha = new Semver("1.0.0-alpha.1"); Semver beta = new Semver("1.0.0-beta.1"); Semver release = new Semver("1.0.0"); System.out.println(alpha.isLowerThan(beta)); // true System.out.println(beta.isLowerThan(release)); // true ``` -------------------------------- ### Ivy/Gradle Mode Requirement Satisfaction in Java Source: https://context7.com/vdurmont/semver4j/llms.txt Demonstrates how to use semver4j in Ivy/Gradle mode to satisfy version requirements using dynamic versions and mathematical range notation. This is useful for managing dependencies with flexible versioning schemes. It requires the semver4j library. ```java import com.vdurmont.semver4j.Semver; import com.vdurmont.semver4j.Semver.SemverType; import com.vdurmont.semver4j.Requirement; Semver version = new Semver("1.2.3", SemverType.IVY); // Dynamic patch version (1.2.+) System.out.println(version.satisfies("1.2.+")); // true (>= 1.2.0 and < 1.3.0) System.out.println(version.satisfies("1.3.+")); // false // Dynamic minor version (1.+) System.out.println(version.satisfies("1.+")); // true (>= 1.0.0 and < 2.0.0) System.out.println(version.satisfies("2.+")); // false // Mathematical range notation - bounded ranges // [1.0,2.0] means >= 1.0.0 and <= 2.0.0 System.out.println(version.satisfies("[1.0,2.0]")); // true // ]1.0,2.0[ means > 1.0.0 and < 2.0.0 System.out.println(version.satisfies("]1.0,2.0[")); // true // [1.0,1.2[ means >= 1.0.0 and < 1.2.0 System.out.println(version.satisfies("[1.0,1.2[")); // false // Unbounded ranges // (,2.0] means <= 2.0.0 System.out.println(version.satisfies("(,2.0]")); // true // [1.0,) means >= 1.0.0 System.out.println(version.satisfies("[1.0,)")); // true // Using Requirement.buildIvy directly Requirement ivyReq = Requirement.buildIvy("[1.0,2.0]"); System.out.println(ivyReq.isSatisfiedBy("1.5.0")); // true System.out.println(ivyReq.isSatisfiedBy("2.5.0")); // false ``` -------------------------------- ### Create Semver Objects in Java with Different Versioning Modes Source: https://context7.com/vdurmont/semver4j/llms.txt Demonstrates how to create `Semver` objects in Java, specifying different versioning modes like STRICT, NPM, LOOSE, COCOAPODS, and IVY. It also shows how to access individual version components such as major, minor, patch, suffix, and build metadata. ```java import com.vdurmont.semver4j.Semver; import com.vdurmont.semver4j.Semver.SemverType; // STRICT mode (default) - requires major.minor.patch Semver strictVersion = new Semver("1.2.3"); Semver strictWithSuffix = new Semver("1.2.3-beta.4+sha899d8g79f87"); // NPM mode - supports 'v' prefix and wildcards Semver npmVersion = new Semver("v1.2.3", SemverType.NPM); Semver npmLoose = new Semver("1.2", SemverType.NPM); // LOOSE mode - only major is required Semver looseVersion = new Semver("1", SemverType.LOOSE); // COCOAPODS mode Semver podVersion = new Semver("1.2.3", SemverType.COCOAPODS); // IVY mode (Gradle compatibility) Semver ivyVersion = new Semver("1.2.3", SemverType.IVY); // Access version components System.out.println(strictWithSuffix.getMajor()); // 1 System.out.println(strictWithSuffix.getMinor()); // 2 System.out.println(strictWithSuffix.getPatch()); // 3 System.out.println(strictWithSuffix.getSuffixTokens()); // ["beta", "4"] System.out.println(strictWithSuffix.getBuild()); // "sha899d8g79f87" System.out.println(strictWithSuffix.getValue()); // "1.2.3-beta.4+sha899d8g79f87" ``` -------------------------------- ### Handle SemverException in Java Source: https://context7.com/vdurmont/semver4j/llms.txt Demonstrates how to catch and handle SemverException when parsing invalid version strings with the Semver4j library. It covers scenarios like completely invalid formats, strict mode violations, and empty build metadata. A safe parsing pattern is also provided to return null instead of throwing an exception. ```java import com.vdurmont.semver4j.Semver; import com.vdurmont.semver4j.Semver.SemverType; import com.vdurmont.semver4j.SemverException; // Invalid version handling try { new Semver("not-a-version"); } catch (SemverException e) { System.out.println("Invalid version: " + e.getMessage()); } // STRICT mode requires all components try { new Semver("1.2", SemverType.STRICT); } catch (SemverException e) { System.out.println("STRICT mode requires patch: " + e.getMessage()); } // Empty build is invalid try { new Semver("1.2.3+"); } catch (SemverException e) { System.out.println("Empty build: " + e.getMessage()); } // Safe parsing pattern public static Semver safeParse(String version, SemverType type) { try { return new Semver(version, type); } catch (SemverException e) { return null; // or return a default version } } Semver parsed = safeParse("1.2.3", SemverType.NPM); if (parsed != null) { System.out.println("Valid version: " + parsed.getValue()); } ``` -------------------------------- ### NPM Mode Requirement Satisfaction in Java Source: https://context7.com/vdurmont/semver4j/llms.txt Illustrates NPM mode requirement satisfaction in semver4j, supporting a wide array of operators like comparison, tilde, caret, wildcards, hyphen ranges, and logical operators (AND/OR). This mode is suitable for complex dependency management scenarios. ```java import com.vdurmont.semver4j.Semver; import com.vdurmont.semver4j.Semver.SemverType; import com.vdurmont.semver4j.Requirement; Semver version = new Semver("1.2.3", SemverType.NPM); // Comparison operators System.out.println(version.satisfies(">1.2.2")); // true System.out.println(version.satisfies(">=1.2.3")); // true System.out.println(version.satisfies("<1.3.0")); // true System.out.println(version.satisfies("<=1.2.3")); // true System.out.println(version.satisfies("=1.2.3")); // true // Tilde (~) - allows patch-level changes System.out.println(version.satisfies("~1.2.1")); // true (>=1.2.1 <1.3.0) System.out.println(version.satisfies("~1.2.4")); // false // Caret (^) - allows minor-level changes (non-breaking) System.out.println(version.satisfies("^1.1.1")); // true (>=1.1.1 <2.0.0) System.out.println(version.satisfies("^1.3.0")); // false // Wildcards System.out.println(version.satisfies("1.2.x")); // true System.out.println(version.satisfies("1.2.*")); // true System.out.println(version.satisfies("1.x")); // true System.out.println(version.satisfies("*")); // true System.out.println(version.satisfies("1.1.*")); // false // Hyphen ranges System.out.println(version.satisfies("1.0.0 - 2.0.0")); // true System.out.println(version.satisfies("1.2.0 - 1.2.5")); // true // OR operator (||) System.out.println(version.satisfies("1.1.1 || 1.2.3 - 2.0.0")); // true System.out.println(version.satisfies("^1.0.0 || ^2.0.0")); // true // AND operator (space-separated) System.out.println(version.satisfies(">=1.2.0 <1.3.0")); // true // Using Requirement.buildNPM directly Requirement npmReq = Requirement.buildNPM("^1.0.0"); System.out.println(npmReq.isSatisfiedBy("1.5.0")); // true System.out.println(npmReq.isSatisfiedBy("2.0.0")); // false ``` -------------------------------- ### Sorting and Comparing Semver Versions in Java Source: https://context7.com/vdurmont/semver4j/llms.txt Explains how to sort and compare semantic versions using the `Semver` class in semver4j, which implements `Comparable`. This allows for easy ordering of versions in lists and sorted collections. It requires the semver4j library and standard Java collections. ```java import com.vdurmont.semver4j.Semver; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.TreeSet; // Create a list of versions List versions = new ArrayList<>(); versions.add(new Semver("2.0.0")); versions.add(new Semver("1.0.0-alpha")); versions.add(new Semver("1.0.0")); versions.add(new Semver("1.0.0-beta")); versions.add(new Semver("1.5.0")); versions.add(new Semver("1.0.0-alpha.1")); // Sort ascending Collections.sort(versions); for (Semver v : versions) { System.out.println(v); } // Output: // 1.0.0-alpha // 1.0.0-alpha.1 // 1.0.0-beta // 1.0.0 // 1.5.0 // 2.0.0 // Sort descending Collections.sort(versions, Collections.reverseOrder()); // Use in TreeSet for automatic ordering TreeSet sortedSet = new TreeSet<>(); sortedSet.add(new Semver("1.2.3")); sortedSet.add(new Semver("1.0.0")); sortedSet.add(new Semver("2.0.0")); System.out.println(sortedSet.first()); // 1.0.0 System.out.println(sortedSet.last()); // 2.0.0 // compareTo returns -1, 0, or 1 Semver v1 = new Semver("1.0.0"); Semver v2 = new Semver("2.0.0"); System.out.println(v1.compareTo(v2)); // -1 System.out.println(v2.compareTo(v1)); // 1 System.out.println(v1.compareTo(v1)); // 0 ``` -------------------------------- ### Custom Version Range Operations in Java Source: https://context7.com/vdurmont/semver4j/llms.txt Illustrates how to perform low-level version range checking using the `Range` class in semver4j. This allows for custom requirement logic with explicit operators like greater than, less than, etc. It requires the semver4j library. ```java import com.vdurmont.semver4j.Range; import com.vdurmont.semver4j.Range.RangeOperator; import com.vdurmont.semver4j.Semver; // Create ranges with explicit operators Range eqRange = new Range("1.2.3", RangeOperator.EQ); Range gtRange = new Range("1.0.0", RangeOperator.GT); Range gteRange = new Range("1.0.0", RangeOperator.GTE); Range ltRange = new Range("2.0.0", RangeOperator.LT); Range lteRange = new Range("2.0.0", RangeOperator.LTE); Semver version = new Semver("1.5.0"); // Check satisfaction System.out.println(eqRange.isSatisfiedBy(version)); // false System.out.println(gtRange.isSatisfiedBy(version)); // true System.out.println(gteRange.isSatisfiedBy(version)); // true System.out.println(ltRange.isSatisfiedBy(version)); // true System.out.println(lteRange.isSatisfiedBy(version)); // true // String representation System.out.println(gtRange.toString()); // >1.0.0 System.out.println(lteRange.toString()); // <=2.0.0 // Check with Semver objects Range semverRange = new Range(new Semver("1.5.0"), RangeOperator.EQ); System.out.println(semverRange.isSatisfiedBy(version)); // true ``` -------------------------------- ### Strict Mode Requirement Satisfaction in Java Source: https://context7.com/vdurmont/semver4j/llms.txt Demonstrates how to check for exact version matches in STRICT mode using semver4j. In this mode, only an identical version string satisfies the requirement. Ranges or wildcards are not supported and will throw an exception. ```java import com.vdurmont.semver4j.Semver; import com.vdurmont.semver4j.Semver.SemverType; import com.vdurmont.semver4j.Requirement; // STRICT mode - exact version match only Semver version = new Semver("1.2.3", SemverType.STRICT); System.out.println(version.satisfies("1.2.3")); // true System.out.println(version.satisfies("1.2.2")); // false System.out.println(version.satisfies("1.2.4")); // false // version.satisfies(">1.2.2"); // Throws SemverException - ranges not supported in STRICT // Using Requirement directly Requirement strictReq = Requirement.buildStrict("1.2.3"); System.out.println(strictReq.isSatisfiedBy("1.2.3")); // true System.out.println(strictReq.isSatisfiedBy("1.2.4")); // false // LOOSE mode - also exact match Requirement looseReq = Requirement.buildLoose("1.2"); System.out.println(looseReq.isSatisfiedBy("1.2.0")); // true ``` -------------------------------- ### Normalize Loose Versions to Strict Semver with `toStrict` Source: https://context7.com/vdurmont/semver4j/llms.txt The `toStrict()` method converts loose version formats to the strict semantic versioning format by filling in missing minor and patch numbers with zeros. This method also preserves any existing suffix and build metadata. ```java import com.vdurmont.semver4j.Semver; import com.vdurmont.semver4j.Semver.SemverType; // Convert loose versions to strict format Semver looseVersion = new Semver("1", SemverType.LOOSE); Semver strictVersion = looseVersion.toStrict(); System.out.println(strictVersion.getValue()); // 1.0.0 Semver partialVersion = new Semver("1.2", SemverType.NPM); System.out.println(partialVersion.toStrict().getValue()); // 1.2.0 // Preserves suffix and build when normalizing Semver withSuffix = new Semver("1.2-alpha+build", SemverType.LOOSE); System.out.println(withSuffix.toStrict().getValue()); // 1.2.0-alpha+build ``` -------------------------------- ### Check Version Satisfaction with Semver4j Source: https://github.com/vdurmont/semver4j/blob/master/README.md Demonstrates how to use the `satisfies` method in semver4j to check if a version meets specified requirements. Supports STRICT, NPM, COCOAPODS, and IVY modes, each with different requirement syntaxes. Incompatible requirements in STRICT mode will throw a SemverException. ```java import com.vdurmont.semver4j.Semver; import com.vdurmont.semver4j.SemverException; import com.vdurmont.semver4j.SemverType; // STRICT mode Semver semStrict = new Semver("1.2.3", SemverType.STRICT); System.out.println(semStrict.satisfies("1.2.3")); // true System.out.println(semStrict.satisfies("1.2.2")); // false System.out.println(semStrict.satisfies("1.2.4")); // false try { semStrict.satisfies(">1.2.2"); // SemverException, incompatible requirement for a STRICT mode } catch (SemverException e) { System.out.println("Caught expected exception: " + e.getMessage()); } // NPM mode (those are just examples, check NPM documentation to see all the cases) Semver semNPM = new Semver("1.2.3", SemverType.NPM); System.out.println(semNPM.satisfies(">1.2.2")); // true System.out.println(semNPM.satisfies("1.1.1 || 1.2.3 - 2.0.0")); // true System.out.println(semNPM.satisfies("1.1.*")); // false System.out.println(semNPM.satisfies("~1.2.1")); // true System.out.println(semNPM.satisfies("^1.1.1")); // true // COCOAPODS mode (those are just examples, check CocoaPods documentation to see all the cases) Semver semPOD = new Semver("1.2.3", SemverType.COCOAPODS); System.out.println(semPOD.satisfies("> 1.2.2")); // true System.out.println(semPOD.satisfies("~> 1.2.1")); // true System.out.println(semPOD.satisfies("<= 1.1.1")); // false // IVY mode (those are just examples, check Ivy/gradle documentation to see all the cases) Semver semIVY = new Semver("1.2.3", SemverType.IVY); System.out.println(semIVY.satisfies("1.2.+")); // true System.out.println(semIVY.satisfies("(,1.8.9]")); // true System.out.println(semIVY.satisfies("[0.2,1.4]")); // true ``` -------------------------------- ### Increment Version Components with `withInc` and `next` Methods Source: https://context7.com/vdurmont/semver4j/llms.txt Semver4j provides methods to create new version objects with incremented components. The `Semver` object is immutable, so these operations return new instances. Methods like `withIncMajor`, `withIncMinor`, `withIncPatch` preserve suffixes and build metadata, while `nextMajor`, `nextMinor`, and `nextPatch` clear them. ```java import com.vdurmont.semver4j.Semver; Semver version = new Semver("1.2.3-beta.4+sha899d8g79f87"); // Increment with suffix/build preservation System.out.println(version.withIncMajor()); // 2.2.3-beta.4+sha899d8g79f87 System.out.println(version.withIncMajor(2)); // 3.2.3-beta.4+sha899d8g79f87 System.out.println(version.withIncMinor()); // 1.3.3-beta.4+sha899d8g79f87 System.out.println(version.withIncPatch()); // 1.2.4-beta.4+sha899d8g79f87 // Next version (clears suffix and build) System.out.println(version.nextMajor()); // 2.0.0 System.out.println(version.nextMinor()); // 1.3.0 System.out.println(version.nextPatch()); // 1.2.4 // Clear suffix or build System.out.println(version.withClearedSuffix()); // 1.2.3+sha899d8g79f87 System.out.println(version.withClearedBuild()); // 1.2.3-beta.4 System.out.println(version.withClearedSuffixAndBuild()); // 1.2.3 // Set new suffix or build Semver base = new Semver("1.2.3"); System.out.println(base.withSuffix("rc.1")); // 1.2.3-rc.1 System.out.println(base.withBuild("build.456")); // 1.2.3+build.456 ``` -------------------------------- ### CocoaPods Mode Requirement Satisfaction in Java Source: https://context7.com/vdurmont/semver4j/llms.txt Details CocoaPods mode requirement satisfaction in semver4j, which supports standard comparison operators and the optimistic operator (~>). This mode is tailored for iOS/macOS dependency management. ```java import com.vdurmont.semver4j.Semver; import com.vdurmont.semver4j.Semver.SemverType; import com.vdurmont.semver4j.Requirement; Semver version = new Semver("1.2.3", SemverType.COCOAPODS); // Comparison operators System.out.println(version.satisfies("> 1.2.2")); // true System.out.println(version.satisfies(">= 1.2.3")); // true System.out.println(version.satisfies("< 1.3.0")); // true System.out.println(version.satisfies("<= 1.2.3")); // true System.out.println(version.satisfies("<= 1.1.1")); // false // Optimistic operator (~>) - similar to tilde in NPM // ~> 1.2.1 means >= 1.2.1 and < 1.3.0 System.out.println(version.satisfies("~> 1.2.1")); // true System.out.println(version.satisfies("~> 1.2")); // true (>= 1.2.0 and < 2.0.0) System.out.println(version.satisfies("~> 1.3.0")); // false // Using Requirement.buildCocoapods directly Requirement podReq = Requirement.buildCocoapods("~> 1.0"); System.out.println(podReq.isSatisfiedBy("1.9.9")); // true System.out.println(podReq.isSatisfiedBy("2.0.0")); // false ``` -------------------------------- ### Modify Semver Version Immutably with Semver4j Source: https://github.com/vdurmont/semver4j/blob/master/README.md Illustrates how to create new `Semver` objects with modified version components using immutable methods. This includes incrementing major, minor, or patch versions, clearing suffixes or build information, and advancing to the next major, minor, or patch version. ```java import com.vdurmont.semver4j.Semver; Semver original = new Semver("1.2.3-beta.4+sha32iddfu987"); // Incrementing specific parts Semver incMajor = original.withIncMajor(); // 2.2.3-beta.4+sha32iddfu987 Semver incMinor = original.withIncMinor(2); // 1.4.3-beta.4+sha32iddfu987 Semver incPatch = original.withIncPatch(); // 1.2.4-beta.4+sha32iddfu987 // Clearing parts Semver clearedSuffix = original.withClearedSuffix(); // 1.2.3+sha32iddfu987 Semver clearedBuild = original.withClearedBuild(); // 1.2.3-beta.4 // Advancing to next version parts Semver nextMajor = original.nextMajor(); // 2.0.0 Semver nextMinor = original.nextMinor(); // 1.3.0 Semver nextPatch = original.nextPatch(); // 1.2.4 System.out.println("Original: " + original); System.out.println("Inc Major: " + incMajor); System.out.println("Inc Minor: " + incMinor); System.out.println("Inc Patch: " + incPatch); System.out.println("Cleared Suffix: " + clearedSuffix); System.out.println("Cleared Build: " + clearedBuild); System.out.println("Next Major: " + nextMajor); System.out.println("Next Minor: " + nextMinor); System.out.println("Next Patch: " + nextPatch); ``` -------------------------------- ### Detect Version Differences with `diff` Method Source: https://context7.com/vdurmont/semver4j/llms.txt The `diff` method in semver4j detects the greatest difference between two version strings. It returns a `VersionDiff` enum value indicating NONE, MAJOR, MINOR, PATCH, SUFFIX, or BUILD differences. This is useful for upgrade detection and understanding compatibility. ```java import com.vdurmont.semver4j.Semver; import com.vdurmont.semver4j.Semver.VersionDiff; Semver version = new Semver("1.2.3-beta.4+sha899d8g79f87"); // Identify the greatest difference between versions System.out.println(version.diff("1.2.3-beta.4+sha899d8g79f87")); // NONE System.out.println(version.diff("2.3.4-alpha.5+sha32iddfu987")); // MAJOR System.out.println(version.diff("1.3.4-alpha.5+sha32iddfu987")); // MINOR System.out.println(version.diff("1.2.4-alpha.5+sha32iddfu987")); // PATCH System.out.println(version.diff("1.2.3-alpha.5+sha32iddfu987")); // SUFFIX System.out.println(version.diff("1.2.3-beta.4+sha32iddfu987")); // BUILD // Use diff for upgrade detection Semver current = new Semver("2.1.0"); Semver update = new Semver("3.0.0"); VersionDiff diff = current.diff(update); if (diff == VersionDiff.MAJOR) { System.out.println("Breaking changes possible - review changelog!"); } ``` -------------------------------- ### Check Version Stability with `isStable` Method Source: https://context7.com/vdurmont/semver4j/llms.txt The `isStable` method determines if a version is considered stable. A version is stable if its major number is strictly positive and it does not have a pre-release suffix. This method is crucial for differentiating between release versions and development or pre-release versions. ```java import com.vdurmont.semver4j.Semver; // Stable versions (major > 0 and no suffix) System.out.println(new Semver("1.2.3").isStable()); // true System.out.println(new Semver("1.2.3+sha.0nSFGKjkjsdf").isStable()); // true System.out.println(new Semver("2.0.0").isStable()); // true // Unstable versions (major = 0 or has suffix) System.out.println(new Semver("0.1.2").isStable()); // false System.out.println(new Semver("0.1.2+sha.0nSFGKjkjsdf").isStable()); // false System.out.println(new Semver("1.2.3-BETA.11+sha.0nSFGKjkjsdf").isStable()); // false System.out.println(new Semver("1.0.0-rc.1").isStable()); // false ``` -------------------------------- ### Check Version Stability Source: https://github.com/vdurmont/semver4j/blob/master/README.md Uses the isStable() method to determine if a version is considered stable based on its major number and absence of suffixes. ```java // TRUE new Semver("1.2.3").isStable(); new Semver("1.2.3+sHa.0nSFGKjkjsdf").isStable(); // FALSE new Semver("0.1.2").isStable()); new Semver("0.1.2+sHa.0nSFGKjkjsdf").isStable(); new Semver("1.2.3-BETA.11+sHa.0nSFGKjkjsdf").isStable(); ``` -------------------------------- ### Calculate Version Diffs Source: https://github.com/vdurmont/semver4j/blob/master/README.md Uses the diff method to identify the primary difference between two versions, returning a VersionDiff enum value. ```java Semver sem = new Semver("1.2.3-beta.4+sha899d8g79f87"); sem.diff("1.2.3-beta.4+sha899d8g79f87"); // NONE sem.diff("2.3.4-alpha.5+sha32iddfu987"); // MAJOR sem.diff("1.3.4-alpha.5+sha32iddfu987"); // MINOR sem.diff("1.2.4-alpha.5+sha32iddfu987"); // PATCH sem.diff("1.2.3-alpha.5+sha32iddfu987"); // SUFFIX sem.diff("1.2.3-beta.4+sha32iddfu987"); // BUILD ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.