Appearance
Generate UUID in Groovy
Since Groovy is a JVM-based language, we can use the same libraries and methods we would have used in Java to generate UUIDs, as long as we do so in Groovy syntax. The following code snippet produces a valid version 4 UUID:
groovy
import java.util.UUID
println UUID.randomUUID()
If you need to generate a specific UUID version, you need to use a third-party library such as uuid-creator which offers more flexible options:
groovy
import com.github.f4b6a3.uuid.UuidCreator
//generate UUID version 1
var uuid = UuidCreator.getTimeBased()
//generate UUID version 2
var uuid = UuidCreator.getDceSecurity(UuidLocalDomain.LOCAL_DOMAIN_PERSON, 1234)
//generate UUID version 3
var uuid = UuidCreator.getNameBasedMd5(UuidNamespace.NAMESPACE_URL, "https://github.com/")
//generate UUID version 4
var uuid = UuidCreator.getRandomBased()
//generate UUID version 5
var uuid = UuidCreator.getNameBasedSha1(UuidNamespace.NAMESPACE_URL, "https://github.com/")
//generate UUID version 6
var uuid = UuidCreator.getTimeOrdered()
//generate UUID version 7
var uuid = UuidCreator.getTimeOrderedEpoch()
Installation & Setup
Gradle:
groovy
dependencies {
implementation 'com.github.f4b6a3:uuid-creator:5.3.2'
}
Maven:
xml
<dependency>
<groupId>com.github.f4b6a3</groupId>
<artifactId>uuid-creator</artifactId>
<version>5.3.2</version>
</dependency>
Advanced Groovy Usage
UUID Service with Groovy Features:
groovy
import java.util.UUID
import com.github.f4b6a3.uuid.UuidCreator
class UUIDService {
static String generateV4() {
UUID.randomUUID().toString()
}
static String generateV7() {
UuidCreator.getTimeOrderedEpoch().toString()
}
static boolean isValidUUID(String uuidString) {
try {
UUID.fromString(uuidString)
return true
} catch (IllegalArgumentException e) {
return false
}
}
static Integer getUUIDVersion(String uuidString) {
try {
return UUID.fromString(uuidString).version()
} catch (IllegalArgumentException e) {
return null
}
}
}
// Groovy extension methods
String.metaClass.isValidUUID = {
UUIDService.isValidUUID(delegate)
}
// Usage
def uuid = UUIDService.generateV4()
println "Valid UUID: ${uuid.isValidUUID()}"
Grails Integration:
groovy
// Domain Class
class User {
String id = UUID.randomUUID().toString()
String name
String email
Date dateCreated
Date lastUpdated
static constraints = {
id blank: false, unique: true
name blank: false
email email: true, unique: true
}
static mapping = {
id generator: 'assigned'
}
}
// Controller
class UUIDController {
def generateUUID() {
render([
uuid: UUID.randomUUID().toString(),
timestamp: new Date().format("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
] as JSON)
}
def generateNamedUUID(String name) {
def namespace = UUID.fromString("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
def namedUUID = UUID.nameUUIDFromBytes("${namespace}${name}".bytes)
render([
uuid: namedUUID.toString(),
name: name,
deterministic: true
] as JSON)
}
}
Spock Testing:
groovy
import spock.lang.Specification
import java.util.UUID
class UUIDServiceSpec extends Specification {
def "should generate valid UUID v4"() {
when:
def uuid = UUIDService.generateV4()
then:
uuid != null
uuid.isValidUUID()
UUIDService.getUUIDVersion(uuid) == 4
}
def "should validate UUID format"() {
expect:
UUIDService.isValidUUID(validUUID) == expectedResult
where:
validUUID | expectedResult
"550e8400-e29b-41d4-a716-446655440000" | true
"invalid-uuid" | false
"" | false
null | false
}
}
UUID Version Comparison
Choose the right version for your Groovy application:
- Version 1 - Time-based, includes MAC address
- Version 3 - MD5 namespace-based, deterministic
- Version 4 - Random, most popular choice
- Version 5 - SHA-1 namespace-based, more secure than v3
- Version 6 - Time-ordered, better than v1 for databases
- Version 7 - Modern time-based with improved sorting
For Groovy applications:
- Grails web apps: Use Version 4 for domain object IDs
- Build scripts: Consider Version 5 for deterministic build artifacts
- Testing frameworks: Use Version 1 for test execution tracking
How do I generate UUID in other languages?
JVM ecosystem:
- Java - Enterprise applications
- Kotlin - Modern JVM development
- Scala - Functional programming and big data
Scripting and web:
- JavaScript - crypto.randomUUID() & uuid library
- Python - Built-in uuid module
- PHP - Built-in functions & ramsey/uuid