當我用C/C++編寫庫時,我養成了一種返回編譯日期/時間的方法。這總是被編譯到庫中,所以會區分庫的構建。有沒有什麼辦法在編譯時爲Java定義一個常量值
C++:我在代碼中返回的#define得到這個
#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,但在類路徑上。
不管怎樣,我的問題是,是否有什麼辦法在編譯時注入一個恆定的成類
編輯
我之所以考慮使用外部生成文件中的JAR一個黑客就是因爲這個是)一個庫,並將嵌入到客戶端應用程序中。這些客戶端應用程序可能會定義他們自己的類加載器,這意味着我不能依賴於標準的JVM類加載規則。
我的個人偏好是使用serg10建議的JAR文件中的日期。
*在我看來,這是一種破解,可以通過在JAR之外具有類似命名文件但在類路徑中的人來規避/破壞* 您在什麼工作環境中編程,擔心人們會「繞過「 這個? 讓Ant生成文件根本不是黑客。當然,清單方法甚至更好的是Java-ism(你也可以讓Ant自動化)。 – Hejazzman 2009-04-29 23:40:34