日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Java環(huán)境配置自動化:跨平臺JAVA_HOME/PATH與多版本切換實踐

Java環(huán)境配置自動化:跨平臺JAVA_HOME/PATH與多版本切換實踐 搭過幾次新機器之后你會發(fā)現(xiàn)裝 JDK 那五分鐘從來不是問題真正吃掉半天的是裝完之后那堆看不見的活環(huán)境變量寫沒寫對、終端里java -version和javac -version為什么對不上、IDE 里報找不到 JDK、換個項目又要切回舊版本、同事照著你寫的文檔配了一遍結(jié)果怎么都跑不起來。這些事單獨看都是小事湊在一起就是典型的配置稅。我后來干脆把這套流程做成一個 Java 環(huán)境配置自動化工具給一個安裝包路徑剩下的探測、落盤、寫變量、驗證、出錯回滾全部交給程序一條命令跑完新機器從零到能編譯不超過兩分鐘。下面就把這個東西的設(shè)計取舍、跨平臺實現(xiàn)細節(jié)和實測踩過的坑完整拆一遍適合手上有多臺開發(fā)機、經(jīng)常給團隊新人做環(huán)境交接、或者單純受夠了手工配 PATH 的同學(xué)照著復(fù)現(xiàn)。1. 手工配 Java 環(huán)境這件事真正耗時的從來不是裝 JDK先把問題拆開看。很多人對配 Java 環(huán)境的理解就是下載安裝包、下一步下一步、驗證一下版本號。這個理解沒錯但它只覆蓋了整條鏈路的第一步。剩下幾步才是返工的主要來源而且這幾步有個共同特征它們不會立刻報錯而是延遲到某個不確定的時刻才炸所以你很難把故障和當初那次配置動作聯(lián)系起來。1.1 讓配置反復(fù)返工的五類隱性成本我把過去幾年遇到的返工場景歸了個類大概能覆蓋八成以上返工類型表面現(xiàn)象真實原因變量作用域錯位當前終端正常新開終端失效寫進了當前會話而不是持久化配置文件路徑優(yōu)先級沖突版本號顯示的不是剛裝的那個舊 JDK 的 bin 目錄排在 PATH 更前面用戶級與系統(tǒng)級混寫換個登錄賬戶就找不到 JDK只寫了用戶變量腳本卻按系統(tǒng)變量讀變量引用被固化改 JAVA_HOME 后 PATH 完全不跟著變寫入時把變量展開成了字面量缺少完整工具鏈能跑 java 不能跑 javac裝的是運行環(huán)境而非完整開發(fā)包這五類里面前三類是寫錯地方第四類是寫壞格式第五類是選錯包。它們都不會在寫入的那一刻給你任何提示全部要靠后續(xù)驗證才能暴露。所以自動化工具的價值不在于省掉復(fù)制粘貼路徑這幾秒鐘而在于把驗證做成流程的一部分讓錯誤在當場暴露而不是三天后在構(gòu)建機上暴露。1.2 一次典型的交接事故復(fù)盤說個具體的。某團隊要給新加入的幾位開發(fā)者準備統(tǒng)一環(huán)境負責(zé)人寫了一份圖文文檔步驟一共十一張截圖。前兩位照著做沒問題第三位卡在構(gòu)建階段日志里是一行很普通的找不到符號。排查鏈路是這樣的先看java -version正常再看javac -version報不是內(nèi)部或外部命令也就是系統(tǒng)里只有運行環(huán)境沒有編譯器確認安裝包名稱發(fā)現(xiàn)文檔里的鏈接指向的是運行環(huán)境版本而前兩位之所以沒出問題是因為他們電腦上原本就裝著別的開發(fā)包java命令實際找到的是那個舊版本新裝的運行環(huán)境根本沒有被使用。整個事故里有兩個獨立的錯誤同時存在而且互相掩蓋——這正是手工配置最麻煩的地方錯誤之間會互相遮蔽。如果把這件事交給工具做javac -version是必過的一項檢查第二個錯誤立刻就會被攔下而PATH 里到底哪個 java 會被優(yōu)先命中也會被顯式打印出來第一個錯誤也藏不住。這就是我在設(shè)計這個工具時堅持的第一條原則所有的隱式狀態(tài)都必須被顯式打印出來。2. 工具形態(tài)怎么選腳本、安裝器、還是常駐命令確定要做接下來第一件事是選形態(tài)。這個選擇直接決定了后面所有實現(xiàn)細節(jié)所以值得單獨聊一章。2.1 三種形態(tài)分別適合什么場景我評估過三條路線純腳本方案。寫一份 shell 腳本加一份 PowerShell 腳本用戶按平臺各跑一個。優(yōu)點是零依賴、體積小、隨便改缺點是兩個平臺兩份代碼邏輯容易分叉而且腳本本身的可讀性和錯誤處理能力有限尤其是需要做備份—寫入—驗證—回滾這種帶事務(wù)感的事情時腳本會寫得很勉強。安裝器方案。打成平臺原生的安裝包雙擊下一步。優(yōu)點是體驗最好缺點是打包成本高改一行邏輯就要重新出包而且安裝器在寫環(huán)境變量這件事上并沒有比腳本強多少反而多了一層黑盒。常駐命令方案。用 Java 自己寫一個命令行工具分發(fā)成一個可執(zhí)行的 jar 或者用包裝腳本調(diào)用。優(yōu)點是邏輯只寫一遍跨平臺靠 Java 抹平而且這個工具的用戶本來就要裝 Java用它自己的生態(tài)解決它自己的問題自洽。2.2 為什么最終選了以 Java 為主腳本兜底我最終的結(jié)構(gòu)是這樣核心邏輯全部用 Java 寫跨平臺差異收攏到少數(shù)幾個策略實現(xiàn)類里分發(fā)時給 Windows 配一個.cmd啟動器給類 Unix 系統(tǒng)配一個.sh啟動器兩個啟動器只負責(zé)找到 java 并轉(zhuǎn)發(fā)參數(shù)不含任何業(yè)務(wù)邏輯。這么選有三個理由。第一這套東西的目標用戶一定裝了某個版本的 Java否則他不需要這個工具所以用 Java 寫不構(gòu)成額外的依賴負擔(dān)。第二環(huán)境變量的持久化寫入本質(zhì)上是一次系統(tǒng) API 調(diào)用Java 里可以用ProcessBuilder調(diào)set/export這類系統(tǒng)命令也可以用平臺原生命令控制粒度比 shell 腳本更細還方便統(tǒng)一做日志。第三出錯回滾需要序列化和狀態(tài)管理Java 里做起來比純腳本舒服得多。有一點需要提前說明啟動器里找 java 這一步本身就有坑。如果用戶是第一次配環(huán)境機器上可能壓根沒有 java啟動器就轉(zhuǎn)不起來了。我的處理是給啟動器加一條降級路徑——先找JAVA_HOME找不到就看 PATH都沒有就提示請先用安裝包手工裝一個任意版本的開發(fā)包再運行本工具并且明確告訴用戶這一步只需要做一次。這是個產(chǎn)品層面的妥協(xié)繞不開但要說清楚。3. 跨平臺寫環(huán)境變量三套系統(tǒng)的三套脾氣這是整個工具里最容易翻車的一章。三個平臺的持久化環(huán)境變量機制完全不同而且每一套都有各自的暗坑。3.1 Windows注冊表、命令行工具與 PATH 長度Windows 上持久化環(huán)境變量市面上常見三種寫法差別很大set只影響當前命令行窗口關(guān)閉即失效。絕對不能用它做持久化。setx寫注冊表持久化生效但它有兩個著名缺陷——單值超過 1024 字符會被截斷而且寫 PATH 時會把原本的REG_EXPAND_SZ類型改成REG_SZ導(dǎo)致里面原本的%SystemRoot%這類變量引用永久變成字面量再也展開不了。這個坑一旦踩中修復(fù)起來非常麻煩因為原有內(nèi)容已經(jīng)丟失了。[Environment]::SetEnvironmentVariable(name, value, scope)在 PowerShell 里調(diào)用底層 API行為比 setx 穩(wěn)妥不會截斷也不會把類型改掉。所以我在 Windows 分支里只用第三種絕不碰 setx。核心代碼大致是這樣param( [Parameter(Mandatory $true)][string]$JdkHome, [ValidateSet(Machine,User)][string]$Scope Machine ) $javaExe Join-Path $JdkHome bin\java.exe if (-not (Test-Path $javaExe)) { throw 目標目錄不是有效的開發(fā)包根目錄$JdkHome } # 1. 先備份現(xiàn)有 PATH落到文件里 $stamp Get-Date -Format yyyyMMddHHmmss $backup Join-Path $env:ProgramData java-env-backup-$stamp.txt $oldPath [Environment]::GetEnvironmentVariable(Path, $Scope) $oldHome [Environment]::GetEnvironmentVariable(JAVA_HOME, $Scope) JAVA_HOME$oldHome | Out-File $backup -Encoding utf8 PATH$oldPath | Out-File $backup -Append -Encoding utf8 # 2. 拆段、清掉舊 JAVA_HOME 相關(guān)段、再拼回來保證冪等 $parts $oldPath -split ; | Where-Object { $_ -and ($_ -notmatch (?i)jdk) -and ($_ -notmatch %JAVA_HOME%) } $newPath ((%JAVA_HOME%\bin) $parts) -join ; # 3. 寫入 [Environment]::SetEnvironmentVariable(JAVA_HOME, $JdkHome, $Scope) [Environment]::SetEnvironmentVariable(Path, $newPath, $Scope) Write-Host 已寫入備份文件$backup Write-Host 新的 PATH 前 200 字符$($newPath.Substring(0, [Math]::Min(200, $newPath.Length)))幾個細節(jié)值得單獨點出來。第一PATH 里優(yōu)先寫%JAVA_HOME%\bin這種變量引用形式而不是絕對路徑。這樣以后換版本只要改JAVA_HOME一個地方PATH 自動跟著走不用再動長串。第二清理舊段時用了寬松匹配jdk和%JAVA_HOME%都當成待清理目標因為用戶歷史配置里可能有各種寫法。第三備份一定要做而且路徑要打印出來這是回滾的唯一依據(jù)。另外還有一個容易被忽略的點系統(tǒng)級變量和用戶級變量會合并合并順序是系統(tǒng)級在前、用戶級在后。也就是說如果歷史遺留的用戶級 PATH 里藏著一個舊 JDK 的 bin它會排在系統(tǒng)級 PATH 后面但如果你往系統(tǒng)級 PATH 前面插了新版本反而會出現(xiàn)新版優(yōu)先的假象——一旦用戶換了登錄賬戶順序可能又變。我的做法是兩個作用域都檢查一遍發(fā)現(xiàn)殘留就提示用戶確認是否清理不擅自刪但一定要讓他知道。3.2 macOS版本探測與 shell 啟動文件的分裂macOS 上有兩件事要處理。一是找到一個可用的 JDK 根目錄二是把變量寫進正確的啟動文件。第一件事相對簡單系統(tǒng)自帶一個版本探測器/usr/libexec/java_home -V它會列出所有已安裝的運行時及其版本用它返回的路徑作為 JAVA_HOME 是最穩(wěn)的不要自己拼/Library/Java/JavaVirtualMachines/...這種路徑因為不同分發(fā)版的目錄結(jié)構(gòu)并不統(tǒng)一。第二件事才是麻煩。macOS 從某個版本之后默認 shell 換了用戶的啟動文件可能是~/.zshrc、~/.zprofile、~/.bash_profile、~/.bashrc中的任意一個寫錯文件的表現(xiàn)是當前窗口能用新開窗口就沒了。我的策略是通過$SHELL判斷當前 shell找到該 shell 實際會加載的那個文件——交互式非登錄 shell 讀~/.zshrc或~/.bashrc登錄 shell 讀~/.zprofile或~/.bash_profile兩個都寫用帶標記的段落包裹方便以后精確替換。帶標記這件事很關(guān)鍵。我在文件里插入的是這樣一段# java-env-managed begin export JAVA_HOME$(/usr/libexec/java_home -v 17 2/dev/null || echo /path/to/jdk) export PATH$JAVA_HOME/bin:$PATH # java-env-managed end 有了這對標記重跑工具時就可以按正則把舊段落整段替換掉而不是每次都往后追加一堆重復(fù)的 export。這是保證冪等的核心手段比檢查 PATH 里有沒有包含某字符串可靠得多。3.3 Linuxprofile.d 與 alternatives 的分工Linux 的服務(wù)端場景多需要區(qū)分給當前用戶配和給整機配。給當前用戶配寫~/.bashrc或者~/.profile思路和 macOS 一致用標記段落。給整機配我傾向于寫到/etc/profile.d/下單獨建一個文件#!/usr/bin/env bash # /etc/profile.d/java_env.sh export JAVA_HOME/opt/jdk/current export PATH$JAVA_HOME/bin:$PATH用獨立文件而不是往/etc/profile里塞好處是卸載時直接刪文件就行干凈利落,不會把系統(tǒng)文件改花。注意這個文件需要可讀部分發(fā)行版還要求644權(quán)限才會被加載。至于update-alternatives很多教程推薦用它管理 java 命令。它確實能處理/usr/bin/java這個符號鏈接指向哪個版本但它只管命令鏈接不管 JAVA_HOME。而大量構(gòu)建工具和框架是靠讀JAVA_HOME來確定用哪個 JDK 的。所以我的做法是兩者一起用alternatives 負責(zé)讓java、javac這些命令正確profile.d負責(zé)JAVA_HOME正確。只做前者會出現(xiàn)命令行版本對、構(gòu)建工具版本不對的詭異現(xiàn)象。4. 一鍵流程的骨架探測、落盤、寫入、驗證、回滾工具的主流程我定成五段順序不能換每一段都有存在理由。4.1 探測先確認裝進來的到底是什么第一步不是急著裝而是把你給的路徑驗明正身。判斷依據(jù)不是目錄名而是實際執(zhí)行一次public record JdkInfo(Path home, String version, String vendor, boolean hasCompiler) {} public static JdkInfo probe(Path candidate) throws IOException { Path javaExe candidate.resolve(bin) .resolve(System.getProperty(os.name).toLowerCase().contains(win) ? java.exe : java); Path javacExe candidate.resolve(bin) .resolve(System.getProperty(os.name).toLowerCase().contains(win) ? javac.exe : javac); if (!Files.isExecutable(javaExe)) { throw new IllegalStateException(目錄下沒有可執(zhí)行的 java candidate); } String out runAndCapture(javaExe.toString(), -version); String version parseVersion(out); // 從輸出里抓版本號 boolean hasCompiler Files.isExecutable(javacExe); return new JdkInfo(candidate, version, parseVendor(out), hasCompiler); }這里有兩點經(jīng)驗。第一版本號必須從實際執(zhí)行的輸出里解析不能信目錄名。我見過太多目錄叫jdk-17實際里面是 11 的情況也見過解壓不完整、只有空殼目錄的情況。第二hasCompiler必須單獨檢查。前面那個交接事故就是栽在這上面。如果檢測到?jīng)]有編譯器工具應(yīng)該直接拒絕并給出明確提示而不是先配上再說。順便說一句解析java -version的輸出要小心它寫到標準錯誤流而不是標準輸出流很多實現(xiàn)里只讀 stdout 會拿到空字符串。這個細節(jié)我踩過一次調(diào)了半小時。4.2 寫入與驗證驗證不是可選項寫入按平臺分發(fā)前面幾節(jié)已經(jīng)講透。重點說驗證。我的驗證分成四層任何一層失敗都觸發(fā)回滾層級檢查內(nèi)容為什么要有這一層進程內(nèi)用絕對路徑執(zhí)行java -version、javac -version確認包本身完好環(huán)境變量重新讀取持久化變量比對 JAVA_HOME 是否等于目標值確認寫入真的落地了而不是寫到了會話里路徑解析啟動一個新的子進程在其中執(zhí)行where java/which java輸出所有命中項確認優(yōu)先級和殘留構(gòu)建冒煙編譯一個 hello world 并運行端到端確認工具鏈可用第四層看起來有點重但它是最有價值的一層。我做過統(tǒng)計前三層全過但第四層失敗的場景大概占百分之幾原因往往是磁盤上殘留了某個tools.jar或者CLASSPATH里有一條失效路徑。多花三秒省掉一次配完了還是跑不起來的扯皮非常劃算。驗證必須在新的子進程里做不能在本進程里做。因為本進程的環(huán)境變量在啟動時就固定了你在 Java 里改了系統(tǒng)環(huán)境變量當前 JVM 是看不到的。必須新起一個進程它才會繼承最新的環(huán)境。這個細節(jié)如果沒處理好會出現(xiàn)工具說配好了用戶開新終端卻不行的經(jīng)典割裂。4.3 回滾備份文件就是生命線回滾邏輯很簡單但在設(shè)計上有個細節(jié)要拿捏粒度。按變量粒度回滾——只恢復(fù) JAVA_HOME 和 PATH——比整文件恢復(fù)更合理。因為 PATH 是共享資源用戶在你這段時間里可能還裝了別的東西整文件覆蓋會把他剛裝的工具一起干掉。我的做法是寫入前把兩個變量的原始值序列化到備份文件回滾時讀出來逐個恢復(fù)public void rollback(Path backupFile) throws IOException { Properties p new Properties(); try (var in Files.newInputStream(backupFile)) { p.load(in); } envWriter.set(JAVA_HOME, p.getProperty(JAVA_HOME, )); envWriter.set(PATH, p.getProperty(PATH)); log.info(已回滾到備份狀態(tài){}, backupFile); }備份文件我建議落在固定位置而不是臨時目錄因為臨時目錄會被系統(tǒng)清理等到用戶想回滾的時候文件已經(jīng)沒了。Windows 上放程序數(shù)據(jù)目錄類 Unix 系統(tǒng)上放用戶目錄下的隱藏子目錄文件名帶時間戳只保留最近五份多了自動刪。這套規(guī)矩看著啰嗦但真出事的時候能救命。5. 冪等性和多版本共存才是工具能不能長期用的分水嶺這兩個特性決定了工具是用一次就扔還是能長期待在你機器上。5.1 冪等跑一次和跑十次結(jié)果必須一樣非冪等的工具是災(zāi)難。用戶重跑一次PATH 后面多一段重復(fù)的 bin跑五次PATH 長得溢出屏幕還得手工去刪。實現(xiàn)冪等的關(guān)鍵不是檢查有沒有而是先清理再寫入。具體到 PATH就是把它按分隔符拆成數(shù)組過濾掉所有指向 JDK 的段和所有包含變量引用的 JAVA_HOME 段再把新段插到最前面最后拼回去。這個過程跑多少次結(jié)果都一樣。標記段落是另一個層面的冪等。凡是我往用戶配置文件里寫的塊都用成對標記包起來重寫時用正則精確替換private static final Pattern MANAGED Pattern.compile( # java-env-managed begin [\\s\\S]*?# java-env-managed end , Pattern.MULTILINE); public String upsert(String content, String block) { if (MANAGED.matcher(content).find()) { return MANAGED.matcher(content).replaceFirst( java.util.regex.Matcher.quoteReplacement(block)); } return content.endsWith(\n) ? content block \n : content \n block \n; }有個容易忽略的冪等盲區(qū)大小寫和路徑分隔符。Windows 上同一個路徑可能有C:\Java\jdk17、C:\JAVA\JDK17、C:/Java/jdk17好幾種寫法單純做字符串匹配會漏掉。所以比較前要先Path.toRealPath()歸一化再在 Windows 上做忽略大小寫的比較。這一步不做用戶重跑十次就會得到十段重復(fù)內(nèi)容因為每次都沒找到。5.2 多版本符號鏈接比寫死路徑優(yōu)雅太多開發(fā)中同時存在多個 JDK 版本是常態(tài)。兩種模型我都試過。寫死模型每次切版本就重寫 JAVA_HOME 為某個具體路徑。簡單直接但缺點是你永遠無法從環(huán)境變量看出當前用的是哪個版本只能靠java -version現(xiàn)查而且構(gòu)建腳本里如果引用了具體路徑切完就斷。符號鏈接模型所有版本解壓到j(luò)dk/17、jdk/21、jdk/8之類固定目錄然后維護一個jdk/current指向其中一個JAVA_HOME 永遠寫jdk/current。切版本只改一條鏈接環(huán)境變量一個字節(jié)都不用動。# 類 Unix ln -sfn /opt/jdk/jdk-21 /opt/jdk/current# Windows需要管理員或開發(fā)者模式 New-Item -ItemType SymbolicLink -Path C:\jdk\current -Target C:\jdk\jdk-21 -Force符號鏈接模型的好處是切版本變成原子操作失敗也不會留下中間狀態(tài)。缺點是 Windows 上創(chuàng)建符號鏈接需要額外權(quán)限普通賬戶可能會失敗。所以工具里要做降級檢測到權(quán)限不足就退回寫死模型但要明確告訴用戶本次使用的是直接路徑模式切換版本需要重新運行工具。這種降級策略是我認為對一個工具是否成熟的判斷標準之一——不假設(shè)用戶環(huán)境十全十美。另外還有一個細節(jié)切完版本之后已經(jīng)在運行的進程不會自動更新環(huán)境。IDE、終端、構(gòu)建守護進程全部需要重啟。我一般在切換完成后直接打一段提示列出需要重啟的常見程序類型雖然啰嗦但能省掉大量為什么切了還是舊版本的追問。6. 實測踩坑與排查鏈路這一章都是真金白銀換來的。6.1 環(huán)境變量寫對了IDE 卻堅稱沒有 JDK現(xiàn)象命令行里java -version正常工具驗證也全綠但打開 IDE 新建項目提示找不到開發(fā)包。排查鏈路先在終端確認java -version——正常。說明系統(tǒng)層面沒問題。用工具自帶的診斷功能打印當前 JAVA_HOME——正常。關(guān)鍵一步查這個 IDE 進程到底繼承了什么環(huán)境。Windows 上看進程環(huán)境需要點手段最土但最有效的辦法是任務(wù)管理器里結(jié)束該 IDE 進程重開問題消失。根因IDE 是從它啟動時那一刻的父進程環(huán)境繼承變量的。如果 IDE 在配環(huán)境之前就已經(jīng)開著它拿到的是舊快照之后無論你怎么改系統(tǒng)變量它都不會刷新。更隱蔽的情況是Windows 上資源管理器本身也有環(huán)境快照某些從資源管理器啟動的程序會繼承這份舊快照導(dǎo)致重開 IDE 都不好使必須重啟資源管理器進程甚至重新登錄。解決方案寫進工具里寫入環(huán)境變量成功后工具主動檢測當前有沒有正在運行的常見開發(fā)程序進程有就提示建議重啟以下進程xxx。這個提示我原本覺得多余實際用下來是反饋最好的功能之一。6.2 PATH 里有個更早的版本在搶現(xiàn)象工具說配好了java -version卻顯示另一個版本。排查鏈路這條鏈路要看全量命中而不是只看第一條。Windows 上where java類 Unix 系統(tǒng)上which -a java把全部命中項和順序打出來問題一目了然。我遇到過的真實原因包括某個工具安裝時往系統(tǒng) PATH 頭部插了自己的 bin用戶手動加過一條絕對路徑的舊版本還有一個比較隱蔽的——PATH 里有兩條相同的段前面的那條指向已刪除目錄系統(tǒng)跳過它繼續(xù)往后找導(dǎo)致實際命中的是第三條。工具里的處理診斷功能輸出所有命中項并標注每一項的來源系統(tǒng)級還是用戶級。同時在寫入階段只要發(fā)現(xiàn)任何指向 JDK 的段殘留在 PATH 中不管位置在哪一律清理掉只保留工具自己插入的那一條。這個策略比較強硬所以我加了確認提示讓用戶知道要刪什么。6.3 中文路徑與字符集帶來的連鎖反應(yīng)現(xiàn)象路徑里有中文字符時某些構(gòu)建工具報錯或者工具自身的腳本執(zhí)行失敗。根因有兩層。第一層是腳本文件本身的編碼。Windows 的批處理默認按系統(tǒng)編碼解析如果文件存成不帶 BOM 的 UTF-8里面的中文注釋會讓解析錯位。第二層是子進程輸出的編碼Java 在 Windows 上默認按系統(tǒng)編碼讀子進程輸出流遇到非 ASCII 會亂碼導(dǎo)致版本號解析失敗。處理方式一是把工具的所有腳本文件統(tǒng)一存成帶 BOM 的 UTF-8或者干脆在腳本里只用 ASCII 字符寫注釋——我選了后者最省事。二是在 Java 里讀子進程輸出時顯式指定編碼不要用平臺默認值ProcessBuilder pb new ProcessBuilder(javaExe.toString(), -version); pb.redirectErrorStream(true); Process p pb.start(); String out new String(p.getInputStream().readAllBytes(), StandardCharsets.UTF_8);三是盡量勸用戶把 JDK 裝到純英文路徑下工具里做一次簡單檢查發(fā)現(xiàn)路徑含非 ASCII 字符就警告。這條不是硬性攔截但提示的價值很大。6.4 權(quán)限不足與安全軟件攔截現(xiàn)象寫入系統(tǒng)級變量時報拒絕訪問或者執(zhí)行到一半進程被殺。根因?qū)懴到y(tǒng)級環(huán)境變量需要管理員權(quán)限這一點在 Windows 上尤其明顯。而某些安全軟件對批量修改環(huán)境變量這種行為比較敏感會攔截或者延遲放行。處理方式工具啟動時先做一次權(quán)限探測——嘗試往目標作用域?qū)懸粋€同值的變量捕獲異常就能判斷有沒有權(quán)限。沒權(quán)限就明確提示請以管理員身份重新運行或者改用當前用戶作用域。絕不靜默降級因為用戶級變量和系統(tǒng)級變量的作用范圍完全不同靜默降級會造成我配了但別的賬戶用不了的困惑。至于安全軟件攔截我的經(jīng)驗是把工具的執(zhí)行過程做成有日志的每一步都輸出到日志文件。一旦被攔截用戶拿著日志能看出停在哪一步而不是面對一個沒有任何輸出的黑窗口反復(fù)重試。7. 交付前的自檢清單工具寫完不算完還得能被別人正確使用。7.1 一份可以抄走的驗收腳本每次配完我會跑這么一段做最終確認。它同時覆蓋了環(huán)境變量的持久值和實際解析結(jié)果#!/usr/bin/env bash set -u fail0 check() { local label$1; shift if $ /dev/null 21; then echo [OK] $label else echo [FAIL] $label fail1 fi } echo JAVA_HOME ${JAVA_HOME:-未設(shè)置} check java 可執(zhí)行 java -version check javac 可執(zhí)行 javac -version echo --- java 的全部命中項 --- which -a java 2/dev/null || where java 2/dev/null echo --- 版本一致性 --- jv$(java -version 21 | head -n1) cv$(javac -version 21 | head -n1) echo java : $jv echo javac: $cv if [ -n ${JAVA_HOME:-} ] [ -x $JAVA_HOME/bin/javac ]; then real$(readlink -f $JAVA_HOME/bin/java 2/dev/null || echo ) found$(command -v java) real_found$(readlink -f $found 2/dev/null || echo $found) if [ -n $real ] [ $real ! $real_found ]; then echo [WARN] java 命令實際指向 $real_found與 JAVA_HOME 不一致 fail1 fi fi [ $fail -eq 0 ] echo 全部通過 || echo 存在失敗項請查看上方輸出 exit $fail最后那段一致性檢查是我后來加的之前吃過虧java命令和JAVA_HOME指向不同版本平時無感但構(gòu)建工具讀 JAVA_HOME、命令行讀 PATH兩邊行為不一致排查起來極其痛苦。把這項做成硬性檢查之后同類問題再沒出現(xiàn)過。7.2 一些只有自己上手才會知道的體會第一診斷信息的價值遠大于自動化本身。我現(xiàn)在回頭看這個工具真正幫我省下的時間大部分不是來自自動寫變量而是來自出問題時能一眼看到全貌。所以如果你只做一個功能我建議做診斷而不是自動寫入。第二日志要寫給兩種人看。一種是用戶他要看到現(xiàn)在在干什么、成功了沒有一種是你自己出問題時你需要看到子進程的完整輸出、變量的前后差異、每一步的耗時。這兩種需求不要合并成一個輸出流分成兩個文件或者兩種級別更清楚。第三永遠不要信任已存在的狀態(tài)。工具每次運行都應(yīng)該把當前狀態(tài)完整讀一遍再決策而不是基于上次運行留下的記錄做增量。用戶在這中間可能手工改過文件、裝過別的工具、換過 shell任何緩存都可能過期。第四CLASSPATH 能不設(shè)就別設(shè)。我一開始把CLASSPATH也納入了自動配置范圍設(shè)成.;%JAVA_HOME%\lib之類。后來發(fā)現(xiàn)這個做法在只寫.的場景下會覆蓋構(gòu)建工具自己的類路徑計算邏輯引發(fā)莫名其妙的問題?,F(xiàn)在我默認不碰 CLASSPATH只在用戶顯式要求時才寫并且在文檔里注明風(fēng)險。第五給回滾留一條不用命令行的路。工具出問題時用戶可能連終端都打不開所以我在備份文件旁邊同時放一份純文本的手工恢復(fù)說明里面就三行打開哪個設(shè)置界面、把哪個變量改回什么值、刪掉哪個段落。這份說明救過我自己一次。最后說個可以繼續(xù)往下做的方向?,F(xiàn)在這個工具的版本探測是基于本地已有安裝包的如果再加上檢查某個版本是否已下載、沒有就按需獲取并校驗完整性的能力就能覆蓋從裸機到可開發(fā)的完整鏈路。不過這會引入網(wǎng)絡(luò)依賴和校驗邏輯復(fù)雜度上一個臺階我暫時沒做等到手工確認版本來源的環(huán)節(jié)真的成為瓶頸了再說。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99青青草国产视频| 日本肉体xxxx裸交| 国产精品高朝久久久久久久| 国产13区| 嗯嗯嗯啊啊啊操的我好爽| 国产女人91精品嗷嗷嗷嗷| 男人天堂新在线| 国产精品久久久久久夜夜夜| 偷拍三区| 不卡一区二区日本视频| jazzjazz国产精品麻豆| 搡老女人老91二区| 欧美激情区| 97视频在线视频| 五月天春色激情网| 日本福利二区视频| 秋霞久久亚洲精品成人| 狠狠久久手机视频精品| 秋霞操逼片| 91综合无码| 男人天堂久久精品不卡| 蜜桃AV天堂| 久久骚| 性欧美天天| 狠狠操夜夜操蜜桃视频三区| 操逼日韩无码| 婷婷五月av| 在线观看中文av字幕| 日韩在线欧美精品一区二区| 收看日本人日bb| 东京热男人的天堂| 在线欧美69V免费观看视频| 亚洲超碰97| 啊啊啊啊好爽好舒服一区二区易域| 神马久久69| 91新在线欧美| 久久 亚洲 日韩 人妻| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 亚洲综合在线91| 97jingpin| 日产成人久久| 精品在线78| 久久精品操| 亚洲熟妇AV日韩熟妇在线| 99只有精品| 亚洲男人天堂2016| 夜夜操一区二区| 98福利在线视频| 加勒比综合a∨| 国产精品久久久久久久久久久久久久久 | 免费男人的天堂| 亚洲图片 欧美电影| 欧美后入式| 亚洲清纯综合| 男女做爰猛烈动高潮A片免费应用| 亚洲婷婷综合网| 欧美一区二区男人天堂| 国产中文大片资源中文字幕| 国产精品无码AV网站| 一级免费啪啪片| 97资源制服丝袜| 久久国产99精品72福利| 蜜臀久久99精品| 亚洲宗合网| 精品人妻一区二区三区蜜桃视频| 白丝一区| 日韩在线观看字幕精品| 中文高清一区二区的| 中文久久一区| 老熟乱一区二区三区四区| 中文字幕欧美丝袜07资源| 亚洲欧美一区二区网址| 久久久久国产精品片区无码直播| 麻豆久久视频在线地址| 91精品久久久久久| 黄色无码高清黄色无码网站| 91快色色色色色| 色播五月丁香| 欧美综合色综合| a级免费在线观看| 日韩成人在线性爱视频| 丝袜大香蕉| 91天天爱| 亚洲欧美色图片| 日韩精品在线观看网站| 不卡九肏| 亚洲国产另类在线中文| 香一区二区三区| 色亚州人久干视频在线观看免费版| 97在线播放 | 偷看洗澡一二三区美女| 成人女人国产| 久久大黄片| 手机在线中文字幕国产| 欧美老熟另类| 97超碰欧美精品| 999亚洲国产视频| 亚洲图片 91| 另类视频在线| 国产成人超碰在线| 99999精品视频| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 欧美 亚洲精品首页| 人人干人人操人人爱| 91色婷婷综合久久中文字幕二区| 伊人 俄罗斯 a v| 人人爱人人乐人人操| 国产精品久久久久久久久AV大片 | 操逼操逼逼操操逼91 | 久久久久久久 九九九九九九九| 国产精品午夜福利视频| 99久久精品无码一区二区毛片免费| AV电影在线播放| 国桃视频产巨乳精品一区二区在线| 东北少妇高潮zzzz| 欧美亚洲激情小说| 九九精品无码专区免费| 高树玛利亚无码流出| 人人操人人摸超碰| 伊人大香蕉在线| 亚洲欧美另类小说| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 亚洲欧美日韩夜夜| 五月天九九日国产精品一区二区三区| 国产高清成人mv在线观看| 天天综合网在线| 玖玖爱在线视频免费观看| 野狼激情网| 中文字幕蜜乳av| 久久精品一区| 国内亚洲精彩视频在线| 麻豆区久久久久亚| 日韩AV电影网站| 97超碰人人操人人操| 精品福利视频| 亚洲国产一级精品毛一级精品看免费视频| 91精品操美女| 久久久999日本大片| 中文字幕乱妇免费视频| 人妻在线中出视频| 成人麻豆av电影网站| 中文字幕精品久久久久人妻红杏ⅰ| 日韩AV无码网站| 久久精品老司| 四虎永久在线精品免费网址 | 国产农村妇女精品一| 男人天堂新| 神马久久久久眼| 国产乱码精品一区二区三区四川| 综合熟妇一区二区三区| 91婷婷伊人狠人| 亚洲婷婷综合网| 亚洲色悠悠久久88| 男人的天堂不卡一区二区| 天天日天天看| 国产成人天堂| 色情五月婷婷| 乱伦一区二区三区‘| 另类成人首页一区| 欧美在线官网| 少妇干B| 啊啊啊啊免费视频| 97精品国产精品免费观看| 偷窥自拍亚洲天堂网爆| 国产乱色国产精品免费视| 色香综合天天影视综合| 久久久久网站-538在线视频-欧美永久乱码 | 久久少妇| 欧美大色交| 七久久久| 熟女人妻av在线资源,黄色的资源| 在线视频亚洲无码| 一二三四区电影| 91精品成人www| 色婷婷视频| 国产精品国产精品国产| 超碰视97中文| 色诱avtt| 亚州再线| 亚欧美天堂在线| 亚洲精品人妻吞精av| 日本中文字幕不卡视频| 91综合无码| 日本顶级天天操狠狠操夜夜操中文字幕| av凤凰久久久| 伊人久久大香线蕉无码| 免费在线黄片视频| 欧美不卡五十路| 二级毛片| 精品人妻一区二区三区不卡断 | 欧美激情性爱视频网站| 久九色| 亚洲熟女一区二区| 久久久熟女一区| 国产精品久久久777| 激情综合97| 色情五月综合婷婷| 婷婷五月天激情网| 久久老子无码午夜伦不卡| 美女写真| 操逼片中文| 精品国产无码中文| 天天谢天天干| 特级特黄一级毛片免费| 亚洲精品一区二区精品| 双插性欧美一二三区| 操www| 国产91影院| 一级性爱网| 国产精品点击进入在线影院高清| 思思久热在线精品66| 欧美日韩97| 嗯嗯啊啊好爽| 三级日本一区二区三区| 伊人一区二区在线播放| 久久毛卡| 六月丁香网| 中文字幕一区av| 性吧在线视频| 91老熟女老女人国产老太| 色天堂综合| 青女在线| 四虎精品永久在线观看| 国产又黄又爽| 午夜人人操| 免费一级性爱久久| 国产不卡免费在线视频| 丁香五月色情| 成人色女网| 久久久国产精品亚洲精品| a人片中文字幕一区二区| 欧美 日韩 婷婷 五月| 国产精品动态一区二区三区四四| 在线视频资源| 女性喷水高潮在线观看| 国产91久久九九免费精品无码| 人、人、摸,人、人、草| 欧亚免费视频| 欧洲中文字幕| 偷拍亚洲情色| 97亚洲欧美| a片久久久久久久久久久久 | 亚洲精品天天影视综合网 | 超碰97男人| 欧美色图在线视频少妇| 天躁夜夜躁2021| 欧美91精品国产自产| 看大黄色大片原件| 色99视频| 精品国产国产AV| 国产在线激情| 亚洲1区2区三区高清中文字幕| 99热网站| 亚洲性综合11| 四虎影视永久在线免费| 嗯嗯,啊啊,国产精品| 日本熟妇色熟妇在线视频播放| 中文字幕乱码在线观看| 欧美东京热精品A∨| av婷婷色网| com 首页 18岁 禁区 女优 免费 精选 同城| 91精品导航| 手机在线视频国内精品| 国产人妻精品久久久一区二区三区 | 日韩三级网址| 99热销国产这里有精品| 爱射综合| 60秒免费视频| 国产午夜福利专区综合| 日本不卡卡一区| 加勒比伊人影院| 伊人国产成人av网站| 国产精品探花在线| 日日干夜夜骑| 欧美日韩另类在线| 天天干天天操天天拍| 99热国产精品| 啪啪AV导航| 800zy一区二区| 久久αⅴ| 色婷婷丁香五月| 日韩欧美麻豆 | 国产60区。| 久热最新在线杭州| 99热在线播放| 久热这里只有精品9| 尤物黄色在线观看网站| 青青草白白色| 亚洲精品白浆高清久久久久久| 大奶啊啊好爽 | 中文字幕国产| 粉嫩小泬久久久一区二区| 久久精品国产Aⅴ| 欧美色偷拍| 91亚洲人| 97超碰jingpin| 欧美日韩在线小说 | 五月丁香六月婷| 国产精品色| 黄色区免费观看中文字幕| 牛牛久久国产精品视频一二三| 久久精品国产精品一区| 国产精品在线网站| 精品一区二区亚洲国产| 大香蕉中文201| 精品国产精品一区二区| 国产日本顶级一区二区三区| 五月丁香激情综合网| 精品1区2区3区| 激情四射婷婷四五月天| 久久久久久久久久久免费精品| 18岁禁 茉莉成人久久| 亚洲h片在线免费观看| 久久久久久久久久久999| 欧美一区二区三区四区综合| 疯操AV| 99碰碰| 香蕉视频精品亚洲一区二区三区在线播| 人妻熟女字幕一区二区| 亚洲精品成人动漫在线| 老鸭窝成人| 床上啊啊啊一区二区三区| 97超碰9| 91电影色诱| 国产精品久久久久无码A√| 校园春色欧美| 久久精品国产精品亚洲艾通辽熟妇| 后入式免费视频| 绯色AV粉色AV蜜臀AV| 青青操综合网| 中文AV制服乱伦| 美女91av| 九九视品黄色| 国产CHASE男男GAYGA 毛多色婷婷| 97干在线视频| 久久久禁| 有码免费观看| 婷婷久久五月| 内射夫妻三片| 99re久久| 欧美日韩人妻少妇 一区二区三区| 色五月综合网| 欧美性爱第一区| 欧美熟妇精品黑人巨大91| 男人的天堂色偷偷青青草视频婷婷网| 亚洲欧洲综合视频在线| 国产无码精品无码| 欧美BT 亚洲色图| 97视频7| 99九九久久| 8x福利精品第一福利视频导航| 91操熟女视频| 日韩色女精品| 大香蕉伊人网WWWn0n| 国产一级作爱毛片| 97在线精品观看视频| 日本加勒比无码专区| 国产情色第一第二页在线观看| 看看小穴| 长长久久免费视频| 久久美女福利是上海美女| 亚洲欧美精品国产一区二区| 亚洲无线观看久久| 亚洲毛片久久| 麻豆av一区二区| 婷婷久草| 欲色啪| 欧美91网站| 九一综合精品视品av| 欧美婷婷| 色色热| 久久99久久99久久99人受| 成人5码视频| 乱伦一区二区三区‘| 国产精品久久久啊| 欧美综合网在线| 久久久亚洲精品中文字幕人妻| 中文欧丝袜诱惑| 老熟妇综合| 久久久中文版| 天天色怡春院| 麻豆传媒一区二区在线观看| 蜜乳av一区二区三区四区不卡| 农村妇女精品一区二区| 亚州欧美一区| 亚州欧美综合| 强乱老妇中文字幕| 天天综合97| 黑人综合网| 久久69| 99久久无码| 秋霞免费无码视频日韩A片 | 亚洲日韩欧美一区二区| 国产精品电| 亚洲欧美激情小说| 偷拍盗拍亚洲色图图片| 伊人天天久久动态图| 黄骗免费网站| 欧美一级AAAAAAA| 美女操逼A A| 国产特级毛片AAAAAA高潮流水 | 日本丝袜美腿人妻九九| 日韩精品99久久久久久中文字幕| 都市激情人妻一区二区青青操视频 | 777超碰| av亚欧| 岛国毛片在线观看免费| 国产色呦呦| www.狠狠| 传媒免费一区二区三区| 欧美日综合| 成人a v在线播放免费| 成人日韩3| av大香蕉| 91精品国久久久久久无码| 男人天堂最新手机版在线青青草| 色欧美综合| 中文色综合| 自偷自拍的亚洲视频| 人人妻人人操人人乐| 欧美熟妇亚洲版| 人人妻人人澡人人爽人人精品浪潮| 老熟女91| 亚洲成A∨人影院在线欢看| 6080yy午夜理论三级一区二区三区无码| 国产久久一区二区三区野外在线| 99热99re6国产在线播放| 日夜伊人网| 国产成人手机视频激情| 91精品国产综合久久久蜜臀| 日本顶级天天操狠狠操夜夜操中文字幕| 人人操人人操人妻人| 无码高清操逼网址| 丁香五月婷婷五月| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 超碰97男女| 国产Aα| http://qxhbdz.com| 亚洲天堂日本| 一级日本牲交大片好爽在线看| 精品成人av一区二区三区在线| 91色黑人少妇| 美女91网站| 日本3级一区二区免费| 久久仑合| 人人操人人干xxx| 大香蕉丝袜一级片| 人人澡人人澡人人| 操高情无码| 成人日本精品九区| 国产精品女aA片爽爽视频| 婬女免费一二三区A片| 欧美一区二区传媒| 国产精品成人AV片免费看网站| 色一情一乱一乱一区91Av| 先锋音影AV| 国产精品美女久久久久久网站| 柠檬AV导航| 蜜臀久久99'精品久久久| 岛国网址国产| 亚洲图片 激情小说| 91在线秘 男同| 久久久9视频| 成人久久久| 五月花婷婷| 国产美女高潮视频| 色五月首页| 亚洲资源一区| 一区二区三区在线资源| 日本精品一区二区不卡| 可以免费观看的av| 国产97在线 | 亚洲| 久久人妻丝袜一区二区三| 精品免费囯产一区二区三区 | 熟妇色99| 看看小穴| 成人一道本免费视频| 亚洲另类色图片| 欧美日韩*字幕一区| 在线 亚洲 网爆 自拍| 亚洲精品国产精品成人| 97在线欧洲| 亚洲精品人妻在线| 亚洲激情欧美色图 | 亚洲欧美天| 人妻熟女午夜精品在线| 国产97在线视频| 色狠狠综合噜一二三区| 亚洲阿v天堂无码z2018| 欧美手机在线综合| 99精品视频在线观看| 午夜精品久久99蜜桃的功能章节| 中文字幕制服欧美久久一区| 一起草日韩| 欧美丝袜亚洲| 日本一区二区电影网站| 日韩亚洲中文有码视频| 久久久久女教师免费一区 | 五月天人妻综合| 另类图片五月天| 精品人妻视频入口| 啊啊啊啊啊舒服| 啊啊啊好爽快点啊啊啊嗯嗯| 2020中文在线一区二区三区| 青青青在线高清视频在线一二三四区| 亚洲情色五月天 | 亚洲成人美女无吗| 欧美97在线欧| 久久人体一区二区| 97玖玖人妻| 免费在线观看国内色片网站网址| 日韩无码一区二区三区| 日韩中文字幕宗合在线| 东京太热久久久| 日本激情免费大片| 亚洲中文字幕精品一区| 久久久精品九| 国产精品suv一区| 91人妻PORNY九色大屁股| 国产精品一区二区a| 曰本道人妻久久久在线不卡色视频| 五月天综合| 91人妻精华帖| 91东北熟女| 97在线播放 | a片在线播放| 青青草在线视频播放器| 天天日天天操VV| 久久黄黄| 丁香五月影院| 国产亚洲色婷婷久久99精品91葵花宝典| 久久东京热久久| 大屁股熟女一区二区三区| 亚洲熟妇图片| 欧美操逼一二三区| 免费看日产一区二区三区| 天天日天天搞天天干| 四虎精品一区二区| 中文字幕第7页| 肉丝无码中文高清| 91天射| 99.色网| 狠狠中文字幕| 久久精品一区二区三区不卡| 亚洲综合五月天| 日韩一级片在线看| 欧美日韩性爱操大逼| 日本精品成人无码| 91热| 大香蕉在线视频15| 99成人| 亚洲一区二区三区欧美日韩| 国产51色综合久久免费| 久久欲| 日B操| 手机看片91人妻| 日本精品五区| 91天天看| 欧美性爱精品七区| 亚洲欧洲自拍图片专区满春格| 国产无码精品久久久久久| 男人的天堂视频精品乱在线| 久久久久久久久久久久97| 九九九九九九九九九九九蜜桃| 久久久99999久网站| 亚洲涩涩| 加勒比久久av| 人妻丰满熟妇av无码区蜜桃| 天天日天天干天天摸天天操| 性欧美91| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 精品人妻一区二区三区日产乱码| 超碰91在线| 久久伊人最新网址视频| 丁香九月 婷婷| 人妻中文字幕精品无码 | 精品国产国产AV| 亚洲国产中文字幕| 大香蕉中文网| 国产粉嫩蜜臀av一区二区三区| 欧美精品69性爱| 久久久久人妻二区精品叶可怜| 亚洲国产奇米影视久久| 天天干夜夜操网| 任你草| 嗯嗯嗯,草死我| 99久热精品99re6热| 任你干在线视频| 91日韩网站| 色哟哟 日韩精品| 在线播放免费av福利片| 国产激情片在线观看| 欧美嫩性色| 97视频620| 久久精品一区二区三区蜜桃臀| 夜夜夜夜久久久久| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 一级特级aaaa毛片免费观看| 屌逼麻豆| 免费亚洲国产精品久久一区| 91人妻熟女| 又大又长又粗又爽又黄| AV九九| 男人天堂日日夜夜| 一本色道人妻久久| 国产日韩欧美操逼视频| www.狠狠| 亚洲日韩熟女人妻高清在线| 日日摸天天爽夜夜欢| 久久这里是精品| 九九内射在线| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 日本天堂网| 久久九九精品一区二区| 在线人成亚洲视频免费观看| 99热最新网址| 精品久久艹| 高清国产精品福利网站| 91Chinese在线| 国产精品视频播放| 爱爱啊啊啊| 免费综合亚洲中文| 欧亚日韩三区| 久久超碰国产一区二区三区| 五月丁香影院| 大香交| 中文字幕一区二区三区高清| 91九九九馒头| 超碰九7免费| 亚洲免费人妻在| 天天综合网AV91| 三男一女不戴套的A片| 色欧美天天| 黑人性欧美| 亚洲色图欧美视频| 欧美国产操逼| 亚洲啪啪视频一区二区| 伊人国产视频| 天天视频网站黄| 高清不卡国产| 2023天天操夜夜操| 69AV女优男人的天堂| 啊啊啊啊啊好多水| 亚洲.欧美.丝袜.中文.综合| 人妻精品一区二区三区| 天天看,天天做| 亚洲天堂少妇| 日韩操人| 日韩欧美传媒一区国产| 99视频在线| 欧美日韩精品久久久久久久久东北老熟妇| 91黑人无码激情在线| 日本五区不卡| 欧美日综合| 丰满人妻-区二区三区免费看 | 日韩一级二级三级免费看完整版国语版| 亚洲日韩精品久久久久一区壹牛 | 天天干嫩逼网| 亚洲另类久操网| a片在线播放| 歐美性天天| 中文一区在线视频| 骚熟女AV网| 天天干少妇| 熟妇综合一区二区三区| 国产白领连续中出在线播放| 黄色电影观看久久9| 欧美第一页| 九月婷婷久久| 日韩激情电影中文字幕| 中文字幕女同在线| 日本午夜久久电影| 婷婷丁香激情| 亚洲性猛交| 亚洲经典啪啪| 国产真实子伦对白| 欧美日韩亚洲五月天婷婷| 精品在线观看视频在线| 日韩精品一二三| 熟妇人妻一区二区| 中文字幕aⅴ在线视频| 午夜啊啊| 久操在97| 日韩精品99999| 无遮挡一级毛片视频免费的| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| www.色婷婷| 午夜福利1区2区3区| 天天综合站| 丝袜制服字幕在线| 亚洲精品亚洲人成在线麻豆| 欧美色图20p| 国产久久男人天堂| 欧美亚州手机在线| 日韩欧美中文| 色色毛片| 欧美性高潮| 国产成人主播| 骚货人妻偷情自拍在线视频| 强奸乱伦Av网| aaa亚无码专区| av2014 日韩在线中文字幕| 99国产在线绯色一区| 国产伦精品一区二区三区在线观| 精品无码一区二区三区色欲| 欧美日韩国产色五月综合在线| 九九精品美女高溯喷水| 97人妻免费中文字幕| 亚洲国产丝袜熟女av| 一本一道久久综合久久| 免费网色网站| 久久久影院| 五月天婷婷色色| av在线免费一区二区| 日韩成人性日韩成人性爱视频在线免费观看| 男人成人黄色视频在线观看免费下载| 国产污视频麻豆传媒一区二区 | 男女无套 免费网站| 97伦综合| 色综合1991| 亚洲天天影视色综合| 欧美久久毛片基地| 久久天天性久久伊人| www狠狠| 亚洲黄色网址视频| 逼逼逼逼操操操操操操操操操午夜剧场| 伊人国产成人av网站| 火箭成精品视频884必出精品| 欧美在线|亚洲| 91欧美性| 噜噜噜亚洲精品| 欧美青青视频| 亚洲精品蜜桃久久久久久久| 欧美性爱一区二区三区四区| 中文字幕55555| 草b在线| 97超碰无码网| 啊啊啊啊啊操我视频| 嗯啊免费视频| 丁香五月天婷婷姐| 国产有码一区| 欧美性,色九九| 国产精品欧美激在线| 久久久久一本一区二区青青蜜月| 亚洲男人天堂2012| 成人日韩中文字幕| 九九九九九九成人| 欧美在线视频观看一二三四区高清| 60秒试看最爽10分钟网站| 久久综合精品一区二区三区| 97色视频在线| 蜜桃狠狠色伊人亚洲综合| 蜜臀无码一区二区| 97爱爱官网| 快灬快灬 一下爽蜜桃在线观看| 九九热精品| 最新无码国产| 国产精品成人福利在线| 国产视频一区二区免费| 婷婷五月影院| 四虎影视在线| 色网在线| 亚洲欧洲日韩中文字幕一区| 校园春色 欧美| 黄色免费网| 家庭乱伦性爱av| 六月丁香久久| 免費人妻夜夜爽天天爽爽一区| 级品肉射| 四虎av在线| 无码不卡亚洲成?人片| 大香蕉www.超碰| 一区二区三区欧美激情| 精品人妻一区二区三区-国产| 亚洲综合99999| 婷婷久久久精品| 精品无码欧美三级| 女人喷水视频在线观看| 大胆91| 综合视频91| 久久精品店| 国产黄片在线免费观看| 五月丁香啪啪啪| 热久久九九热| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 日韩强奸av| www…国产操逼| 人人色人人射人人妻| 天天干1区2区在线| 精品视频一区二区| 欧美特大黄一级片片免费| 人妻精品综合中文字幕在线 | 翔田千里爆乳巨臀无码| 性爱av网站| 久偷拍| 97在线免费视频观看| 亚一综合久久久久久久久久| 欧美天天插| 午夜九九| 999亚洲国产视频| 麻豆 欧美 日韩| 中文字幕精品三级久久久| 秋霞操逼片| 红杏大香蕉| 麻豆色99999| 国产A v无码专区| 国产日韩精品一区二区三区| 殴美色网| 欧美性爱另类综合| 久久婷婷欧美| 精品国模无码| 天天综合日韩网| 婷婷性网| 伊人色综合网电影| 青青操视频在线| av在线播放国产一区| 天天日老熟妇| 久操免费观看| 无码色| 九久久精| 婷婷色色网| 日日摸日日弄日日拍| caoni国产亚洲av| 好屌色综合| 久久精品日韩| 欧美在线l亚洲| 国内毛片国产欧美拍| 免费的av网| 国产一国产一级毛片古装| 久久性爱视频| 青草一区二区| 亚洲成人av色网| 日韩少妇无码| 不卡超碰护士AV在线免费播放| 人妻丝袜一区二区三区在线| www99热| 天天干嫩逼网| 日韩人妻少妇中文字幕| 亚洲97综| 天天综和| 影音先锋日本一区二区| 夜夜嗷嗷一区二区| av天堂天堂av日韩| 老司机午夜福利视频一区二区| 欧美激情性爱视频网站| 色香在线| 久久精品国产亚洲AV无码电影| 97网址97| 成人丁香五月| 亚洲男人电影天堂| 欧亚不卡| 亚洲欧美在线观看2021| 一区二区三区一亚洲中文字幕、综合区灬 | 五月丁香影院| 亚洲中字幕日本一区二区三区| 97天天综合网| 老司机射| 超碰色97| 91殴美大片| 国产乱人伦AVA麻豆软件.| 欧美成人精品一区二区男人蜜臀| 色丁香五月婷婷| 在线视频97| 天操老女人| 国产67194| 亚洲一区二区三区春色| 久久精品99久久久久久| 五月天色图| 欧美爆乳精品一区二区| 人妻无码视频一区二区三区久久| 99热最新| 波多野结衣之双飞调教在线播放| 91 丝袜在线观看| 色色五月婷| 超碰97人人cao| 激情文学小说一区二区 | 天天日天天操天天射河南省| 精品久久九| 色色色综合| 国产精品毛片?v一区二区三区 | 青草视频在线看看看看看看看看看| 国产在线能看的你懂的| 蜜桃狠狠色伊人亚洲综合 | 人妻内射一区二区在线视频| 色色色综合网| 亚洲精品人妻在线| 欧美综合亚洲综合| 91成人久久| 日本精品人妻少妇一区二区| 激情五月天丁香社区| AAAA欧美日韩| 天堂亚洲欧美| 久久精品中文| 日本人妻一区二区| av一区二区三区 中文| 国产9 9在线 | 亚洲| 天天欲望网| 欧亚揄拍偷拍精品视频| 久久精品视频久久久| 国产精品久久伊人| 性爱视频无打码在线观看| 国产一区在线播放| 快播久久人人aV| 一区二区国产视频在线观看| 97久久资源| 99超级碰免费视频| 国产女人操逼视频| 妇女性内射冈站HDWWWCOM| 久久综合97| 色777999综合| 亚洲日韩少妇一道本视频| 成人精品电影| 欧美|91色综合| 激情五月天色色网| 日韩视频啪啪| www.黄色在线| 久久久久久人妻一区精品色欧美| 久久9久| 99re视频在线播放青草| 欧美精品亚洲精品日韩传电影| 日本五十路在线| 久久超碰免费的| 无码91| 91色碰| 精品少妇后入一区二区三区四区人妻巨乳| 久精品无码av一区二免费国产在线观看 | 99久久久久| 999国产精品999| hd成人一区二区在线| 国产精品一级毛片不卡视| 午夜操逼不卡| 美国精品国产精品| 18啪啪手机免费性爱| 老司机天天操| 一区不卡在线观看av| 青草草免费网站av| 国产超碰AV在线精品| 欧美一区二区一级岛国大片| 国产91会所女技师在线观看| 欧美片第一页| 高清在线不卡一区二区 视频| 沈阳熟女高潮对白视频| 国产成人亚洲精品无码最新在线| 爱妃国产亚洲视频中文字幕| av亚欧| 国产Av超碰| 丰满人妻一区二区三区四区| 在线a v| 熟女六十路| 五月婷色| 麻豆亚洲Av成人无码一区精品| 亚洲另类久操网| 人人污日韩一区二区| 欧美色图成人网一区二区 | 一本色道熟妇| 97操| 国产黄色在线播放观看| 国产精品久久久久亚洲av| 欧美性爱视频免费一区一A | 日比av无码| 九九九九热| 日韩成人在线性爱视频| 性爱乱伦网址| 天堂精品在线| 日韩99神马视频播放| 天天操天天日天天干| 久久大香蕉97| 中文字幕在线免费观看2| 欧美性爱第一区| 久操婷婷| 色女99一级片在线观看| 亚洲丝袜99| 综合网 欧美| 午夜男人av| 亚洲激情综合| 神马久久久久久久久久| 天天干夜夜操一区二区| 欧美第一页| 久久国内| 久热久一区二区三区| 97超碰人操| 久久激情婷婷| 激情网色| 色综合98| 岛国不卡超碰护士AV在线播放| 日本大香蕉综合网| 免费人成在线观看网站品爱网| 中文字幕在线免费观看视频| 91红杏| 超碰色图| 中文字幕亚洲热播人妻| 激激五月| 国产av色网| 欧美高清18A片| 大屁股xxxxx| 国精综合一二三区影视| 肥臀熟女一区二区三区视频| 色天使亚洲综合在线观看| 五月花婷婷| 日韩 女同 综合| 国产精品成久久久久午夜午夜| av凤凰久久久| 伊人精品视频| 久久久97| 五月婷婷啪啪| 男人天堂免费| 日本高清视频xxxx| 99re这里只有精品中心播放| 99精品无码| 国产成人亚洲精品无码古代早漏男| 97天天摸天天碰| 成人草草视频| 黑丝自慰喷水网站| 欧美色图成人网一区二区| 日韩射精| 五月婷婷激情| 超碰吊日色| 日韩欧美午夜视频在线| 欧美97日韩精品| 你懂的在线观看区国产| 欧美|91色综合| 欧美日韩一二三| 亚洲欧美日韩精品久久久一区二区| 久久久性爱视频| 秋霞一集毛片观看| 7月婷婷综合| 97综合网| 五月久久HDAV| 午夜精品久久一区二区| www.91色综合| 天天综合中文字幕 91| 欧美99热| 東南亚性呦成人伦理资源在线视频| 黑人精品成人一区二区三区| 天天插天天操天天摸天天射天天看| 97人人夜夜精品视频| 久久超碰、| 囯戸精品高潮呻吟旡码| 青青草十区九区爱夜| 青娱乐淫乱1314| 蜜臀在线免费观看在线免费观看| 中文字幕欧美丝袜07资源| 丰满欧美少妇| 中文一区二区三区影院| 超碰午夜在线| 国产乱伦性爱区| 亚洲视频二区 | 3571色综合一区二区二区| 94色色电影网| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 国产av色网| 91色婷婷综合久久中文字幕二区| 日韩欧美麻豆 | 后入式999| 激情五月婷婷综合| 欧美加勒比| 日本精品88888888| 日韩无码三级影院| 日本性爱欧美性爱| 99热在线观看| 国产精品久久久久久久久久久久| 东京热男人的天堂网| 国产成人欧美精品在线| 九九英色视频| 人人妻人人狠人人| 亚洲 日本 不卡| 国产极品999| 久久av一级av少妇av高潮| 久久9999| 东京热男人的天堂网| 老子午夜伦不卡影院| 日本顶级天天操狠狠操夜夜操中文字幕| 伊人女女资源在线观看| 亚洲人妻五月丁香婷婷| 97综合日韩| 日韩激情中文字幕有码| 91黄站| 欧美激情一区二区| 亚欧高清v| 国产91影院| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 九区国产| 久久午夜伦| 无码丰满熟妇一区二区浪潮AV| 尤物视频偷拍免费| av优播| 日韩av一级黄片| 神马久久久久| 午夜久久久| av在线人气| 亚洲欧洲综合视频在线| 精品国产Av无码久久久亚洲| 久9爱经典视频| 宅男91视频在线播放| 日本一区二区三区四区免费观看| 91国模| 蜜臀无码一区二区| 99中出在线| 午夜男人一级A片7777| 欧美A片中文字幕| 怡春院久久| 青青草玖玖爱| 少妇被玩视频二三区| 亚洲啪啪性视频| 国产日产精品久久快鸭的功能介绍| 另类小说欧美激情校园春色| 国产成人天堂| 免費人妻夜夜爽天天爽爽一区| 一起草精品人妻| 欧美日韩色综合网| 97国产精品| 欧美se综合| 怡红院亚洲怡春院av| 国产精品欧美激在线| 美女黄色一级A视频| 国产男女无套视频免费观看| 日韩免费看在线黄色片| 丰满人妻一区二区三区色-百度| 亚洲久久东京热一二三四五区视频| 熟啊v色欧美热| 精品久久久九九九孕妇| 五月天婷婷基地| av片在线观看免费播放| 色色香蕉| 国产欧美精选自拍一区| 国产AAAAAABBBBB| 欧美色999| 人妻少妇精品| 人妻精品一区二区| 精品十八在线观看| 激情视频图片| 999熟女精品| 日日日色色色色色| 亚洲图片 激情小说| 大香蕉啪啪啪啪在线| 久久国产精品,久久国产| 2001天天操| 欧美精品人妻视频| 欧美不卡在线美女| 日韩草久视频| 综合色图,成人综合网| 亚洲天堂电影精品一区| 色色色综合网| 99久热| 后入美女国产| 欧美大香蕉在线观看| 人妻一区二区三区| 日日干日日操五月天伦理视频| 欧美人妻二区三区| 欧美激情视频一区二区三区不卡| 丝袜制服字幕在线| 91+欧美| 伊人久久久日韩一区| 日本九九久久99| 东方亚洲在线操逼天堂| 亚洲se电影| 美欧色综合| 久久狠狠色噜噜狠狠狠狠97| 91福利网在线观看| wwwxxx日本爽|