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