Когда я писал библиотеки на C / C ++, у меня появилась привычка иметь метод для возврата даты / времени компиляции. Это всегда было скомпилировано в библиотеку, поэтому будет отличаться сборками библиотеки. Я получил это, вернув #define в коде:
C ++:
#ifdef _BuildDateTime_
char* SomeClass::getBuildDateTime() {
return _BuildDateTime_;
}
#else
char* SomeClass::getBuildDateTime() {
return "Undefined";
}
#endif
Затем во время компиляции в сценарии сборки у меня было '-D_BuildDateTime _ = Date
'.
Есть ли способ достичь этого или аналогичного в Java, не забывая редактировать какие-либо файлы вручную или распространяя отдельные файлы.
Одним из предложений, которое я получил от коллеги, было получить файл ant для создания файла на пути к классам и упаковать его в JAR и прочитать его методом.
Примерно так (при условии, что созданный файл назывался '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();
}
На мой взгляд, это взломанный файл, который может быть обойден / сломан кем-то, имеющим файл с таким же именем вне JAR, но на пути к классам.
В любом случае, мой вопрос заключается в том, существует ли какой-либо способ ввести константу в класс во время компиляции
EDIT
Причина, по которой я считаю использование внешне сгенерированного файла в JAR взломом, заключается в том, что является ) библиотекой и будет встроена в клиентские приложения. Эти клиентские приложения могут определять свои собственные загрузчики классов, что означает, что я не могу полагаться на стандартные правила загрузки классов JVM.
Мое личное предпочтение будет заключаться в использовании даты из файла JAR, как предложено serg10.