Cuando solía escribir bibliotecas en C/C++ tuve el hábito de tener un método para devolver la fecha/hora de compilación. Esto siempre fue compilado en la biblioteca, por lo que diferenciaría las compilaciones de la biblioteca. Tengo esta devolviendo un # define en el código:¿Hay alguna manera de definir un valor constante para Java en tiempo de compilación
C++:
#ifdef _BuildDateTime_
char* SomeClass::getBuildDateTime() {
return _BuildDateTime_;
}
#else
char* SomeClass::getBuildDateTime() {
return "Undefined";
}
#endif
A continuación, en la compilación que tenían un '-D_BuildDateTime_ = Date
' en el script de construcción.
¿Hay alguna manera de lograr esto o algo similar en Java sin tener que recordar editar cualquier archivo manualmente o distribuir cualquier archivo por separado?
Una sugerencia que obtuve de un compañero de trabajo fue obtener el archivo ant para crear un archivo en el classpath y empaquetarlo en el JAR y hacer que lo lea el método.
Algo así como (suponiendo que el archivo creado se llamó 'DateTime.dat'):
// I know Exceptions and proper open/closing
// of the file are not done. This is just
// to explain the point!
String getBuildDateTime() {
return new BufferedReader(getClass()
.getResourceAsStream("DateTime.dat")).readLine();
}
Para mi mente que es un truco y podría eludirse/roto por alguien que tenga un archivo de nombre similar fuera de la JAR, pero en el classpath.
De todos modos, mi pregunta es si hay alguna manera de inyectar una constante en una clase en tiempo de compilación
EDITAR
La razón por la que considero mediante un archivo generado en el exterior en el JAR un hack es porque este es) una biblioteca y se integrará en las aplicaciones del cliente. Estas aplicaciones cliente pueden definir sus propios cargadores de clases, lo que significa que no puedo confiar en las reglas de carga de clase JVM estándar.
Mi preferencia personal sería utilizar la fecha del archivo JAR como lo sugiere serg10.
* En mi opinión, es un truco y podría ser eludido o roto por alguien que tenga un archivo con un nombre similar fuera del JAR, pero en el classpath. * ¿En qué entorno de trabajo programa que le preocupan las personas "eludiendo"? " ¿esta? Tener Ant generar el archivo no es un hack en absoluto. Por supuesto, el enfoque manifiesto es aún mejor para Java-ism (y usted puede hacer que Ant automatice eso también). – Hejazzman