Czy jest jakiś sposób na zdefiniowanie stałej wartości Java w czasie kompilacji
Kiedy pisałem biblioteki w C / C ++, nabrałem zwyczaju zwracania daty / godziny kompilacji. To zawsze było wkompilowane w bibliotekę, tak by odróżnić kompilacje biblioteki. Dostałem to, zwracając #define w kodzie:
C ++:
<code>#ifdef _BuildDateTime_ char* SomeClass::getBuildDateTime() { return _BuildDateTime_; } #else char* SomeClass::getBuildDateTime() { return "Undefined"; } #endif </code>
Następnie w kompilacji miałem '-D_BuildDateTime_ =Date
'w skrypcie kompilacji.
Czy istnieje jakikolwiek sposób na osiągnięcie tego lub podobnego w Javie bez konieczności pamiętania o ręcznej edycji jakichkolwiek plików lub dystrybucji jakichkolwiek oddzielnych plików.
Jedną z sugestii, jaką otrzymałem od współpracownika, było uzyskanie pliku mrówki w celu utworzenia pliku w ścieżce klasy i spakowanie go do pliku JAR i odczytanie go metodą.
Coś w stylu (zakładając, że utworzony plik nosi nazwę „DateTime.dat”):
<code>// 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(); } </code>
Moim zdaniem jest to hack i można go obejść / złamać przez kogoś o podobnej nazwiena zewnątrz JAR, ale na ścieżce klasy.
W każdym razie moje pytanie brzmi, czy istnieje jakiś sposób na wprowadzenie stałej do klasy w czasie kompilacji
EDYTOWAĆ
Powodem, dla którego rozważam użycie pliku generowanego zewnętrznie w JAR, jest hack, ponieważ tojest) biblioteka i zostanie osadzona w aplikacjach klienckich. Te aplikacje klienckie mogą definiować własne programy ładujące klasy, co oznacza, że nie mogę polegać na standardowych regułach ładowania klas JVM.
Moim osobistym upodobaniem byłoby używanie daty z pliku JAR zgodnie z sugestią serg10.