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