Serialver - Generador java de número de serie UID
Serialver es una herramienta incorporada a JDK. Se usa para obtener números de serialVersionUID
de una o más clases de Java.
Básicamente, una clase serializable debe declarar una constante llamada serialVersionUID (ya sea explícitamente por el programador o implícitamente por el compilador) como esta:
import java.io.Serializable;
public class Book implements Serializable {
private static final long serialVersionUID = 1234L;
}
El número serialVersionUID es importante cuando se trata de la serialización/deserialización de objetos de una clase. El comando serialver es útil en caso de que deseemos saber ese número sin tener el código fuente de la clase.
Su sintaxis es tan simple como la siguiente:
serialver [-classpath classpath] [-show] [classname...]
- La opción
-classpath
especifica dónde buscar las clases (en directorios o archivos jar, separados por punto y coma;). - La opción
-show
muestra una interfaz de usuario sencilla que permite al usuario ingresar un nombre de clase completo y luego presionar la tecla Enter o hacer clic en el botón Show para mostrar el número serialVersionUID.
Ahora, veamos algunos ejemplos:
Partimos de la clase:
import java.io.Serializable;
import java.math.BigDecimal;
public class Book implements Serializable {
String title;
String author;
BigDecimal price;
Book(String title, String author, BigDecimal price){
this.title = title;
this.author = author;
this.price = price;
}
public String getTitle(){
return title;
}
public String getAuthor(){
return author;
}
public BigDecimal getPrice(){
return price;
}
}
- Obtener serialVersionUID de una clase en el paquete predeterminado:
javac Book.java
serialver Book
Output:
Book: private static final long serialVersionUID = -5356272207580456547L;
Si la clase especificada no es serializable, se muestra este mensaje:
Class Book is not Serializable.
- Obtener serialVersionUID de una clase en un paquete específico:
El siguiente comando muestra el serialVersionUID de la claseBook
bajo el paquetees.jripoll.store
, suponiendo que las clases se encuentran en el directoriobuild/classes
:
mkdir build build/classes
javac -d build/classes Book.java
serialver -classpath build/classes es.jripoll.store.Book
Output:
es.jripoll.store.Book: private static final long serialVersionUID = -5082803711895694981L;
- Obtener serialVersionUID de una clase Groovy en un paquete específico:
Partimos de la claseBook.groovy
:
package es.jripoll.store;
import java.io.Serializable;
import java.math.BigDecimal;
public class Book implements Serializable {
String title;
String author;
BigDecimal price;
}
Y procedemos a obtener el número de serie UID:
groovyc -d build/classes/ src/main/groovy/es/jripoll/store/Book.groovy
serialver -classpath "$GROOVY_HOME/lib/*:./build/classes" es.jripoll.store.Book
Output:
es.jripoll.store.Book: private static final long serialVersionUID = 4387351693220399732L;