摘要:已經(jīng)出來有一段時間了,因此很多流行的應(yīng)用紛紛增添了對乃至的支持,比如。來自,這個類正是引入的。因此如果用加載不到這個類,一定說明當前的運行環(huán)境是以下。通過這種方式進行運行環(huán)境的檢測比準確,因為后者獲取的信息理論上有可能被別人用覆蓋。
JDK9已經(jīng)出來有一段時間了,因此很多流行的Java應(yīng)用紛紛增添了對JDK9乃至JDK10的支持,比如Tomcat。
我們通過這個鏈接下載最新的Tomcat源文件包,總共7MB:
https://tomcat.apache.org/dow...
解壓之后,在文件夾apache-tomcat-9.0.10-srcjavaorgapachecatalinacore里找到文件JreMemoryLeakPreventionListener.java:
可以看到大量調(diào)用工具類JreCompat檢測JRE9是否可用:
JreCompat.isJre9Available()
查看isJre9Available的具體實現(xiàn):
public static boolean isJre9Available() { return jre9Available; }
被一個boolean控制:jre9Available。
jre9Available這個boolean被Jre9Compat.isSupported()控制: static { // This is Tomcat 9 with a minimum Java version of Java 8. // Look for the highest supported JVM first if (Jre9Compat.isSupported()) { instance = new Jre9Compat(); jre9Available = true; } else { instance = new JreCompat(); jre9Available = false; } }
再看Jre9Compat.isSupported()的代碼:
static boolean isSupported() { return inaccessibleObjectExceptionClazz != null; }
一旦inaccessibleObjectExceptionClazz不為null,說明JRE9可用。
inaccessibleObjectExceptionClazz來自Class.forName("java.lang.reflect.InaccessibleObjectException"),
java.lang.reflect.InaccessibleObjectException這個類正是Java 9引入的。因此如果用Class loader加載不到這個類,一定說明當前的運行環(huán)境是Java 9以下。
通過這種方式進行Java運行環(huán)境的檢測比System.getProperty準確,因為后者獲取的信息理論上有可能被別人用setProperty覆蓋。
ABAP通過表CVERS查看Software component的版本信息:
要獲取更多Jerry的原創(chuàng)文章,請關(guān)注公眾號"汪子熙":
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71932.html
摘要:然而,作為學(xué)生代表的我,絕對不允許老師混入進來充當間諜。而且,該方法由所獨享,并不需要判斷是否為學(xué)生。由此,改進為以下版本。得到如下測試代碼而對于教學(xué)分類的判斷,則有以下兩種情形。 前言 入學(xué)不久之后,我就在想,對于學(xué)校的這么多人,這么多教師,這么多學(xué)生,以及其他種種事物,能否對應(yīng)的做一套系統(tǒng)下來呢?隨之也跟著思考了起來。 設(shè)計 好了,最直觀的映入大腦的就是三個實體:人、教師、學(xué)生。這...
今年3月,Google 破天荒提前半年發(fā)布了 Android N 開發(fā)者預(yù)覽版。當然,作為一個不合格的谷粉并沒有第一時間體驗安裝,因為至今仍然能夠回憶起來去年今日此門中(霧)興沖沖刷了 Android M Preview 的時候發(fā)現(xiàn)各種 Crash 就連微信也(不出所料得)中招時自己一臉懵逼的心情。當然,為自己的機智而慶幸并沒有過多久,很快就有微信好友(當然也是純純的谷粉)反饋微信又雙叒叕在 An...
摘要:內(nèi)部長期使用來管理代碼。審核通過并且成功后,觸發(fā)靜態(tài)測試單元測試鏡像構(gòu)建鏡像部署集成測試等測試通過后,創(chuàng)建一個從到的,由負責人進行審核。從圖中我們可以看到,部分是一個單元測試,預(yù)發(fā)布部署,集成測試,,提交代碼的循環(huán)過程。UCloud內(nèi)部長期使用 Gitlab 來管理代碼。雖然Gitlab作為一套開源平臺已很優(yōu)秀,但我們對于其能為CI/CD提供的敏捷性并不十分滿意,內(nèi)部實踐中的代碼發(fā)布周期仍需...
摘要:所以此版本號在這里的作用并不是用來區(qū)分版本的,小版本號才是真正用來做版本區(qū)分的,那么在引用這個就要這么來控制版本號,舉個栗子鎖定大版本號和小版本號,不管我們開發(fā)過程中提交了多少次,我們引用都是最新的。 最近在把公司內(nèi)部用的一個庫發(fā)布到內(nèi)網(wǎng)的npm私服上,僅僅是發(fā)布的話是比較簡單的,但這個庫是由多個人一起維護的,而且npm私服只有一套,所以生產(chǎn)環(huán)境和開發(fā)環(huán)境,用的是同一個,那么,我們的需...
閱讀 2578·2021-11-22 09:34
閱讀 944·2021-11-19 11:34
閱讀 2805·2021-10-14 09:42
閱讀 1482·2021-09-22 15:27
閱讀 2388·2021-09-07 09:59
閱讀 1737·2021-08-27 13:13
閱讀 3436·2019-08-30 11:21
閱讀 777·2019-08-29 18:35