色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(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 的同學照著復現(xiàn)。1. 手工配 Java 環(huán)境這件事真正耗時的從來不是裝 JDK先把問題拆開看。很多人對配 Java 環(huán)境的理解就是下載安裝包、下一步下一步、驗證一下版本號。這個理解沒錯但它只覆蓋了整條鏈路的第一步。剩下幾步才是返工的主要來源而且這幾步有個共同特征它們不會立刻報錯而是延遲到某個不確定的時刻才炸所以你很難把故障和當初那次配置動作聯(lián)系起來。1.1 讓配置反復返工的五類隱性成本我把過去幾年遇到的返工場景歸了個類大概能覆蓋八成以上返工類型表面現(xiàn)象真實原因變量作用域錯位當前終端正常新開終端失效寫進了當前會話而不是持久化配置文件路徑優(yōu)先級沖突版本號顯示的不是剛裝的那個舊 JDK 的 bin 目錄排在 PATH 更前面用戶級與系統(tǒng)級混寫換個登錄賬戶就找不到 JDK只寫了用戶變量腳本卻按系統(tǒng)變量讀變量引用被固化改 JAVA_HOME 后 PATH 完全不跟著變寫入時把變量展開成了字面量缺少完整工具鏈能跑 java 不能跑 javac裝的是運行環(huán)境而非完整開發(fā)包這五類里面前三類是寫錯地方第四類是寫壞格式第五類是選錯包。它們都不會在寫入的那一刻給你任何提示全部要靠后續(xù)驗證才能暴露。所以自動化工具的價值不在于省掉復制粘貼路徑這幾秒鐘而在于把驗證做成流程的一部分讓錯誤在當場暴露而不是三天后在構(gòu)建機上暴露。1.2 一次典型的交接事故復盤說個具體的。某團隊要給新加入的幾位開發(fā)者準備統(tǒng)一環(huán)境負責人寫了一份圖文文檔步驟一共十一張截圖。前兩位照著做沒問題第三位卡在構(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)點是零依賴、體積小、隨便改缺點是兩個平臺兩份代碼邏輯容易分叉而且腳本本身的可讀性和錯誤處理能力有限尤其是需要做備份—寫入—驗證—回滾這種帶事務感的事情時腳本會寫得很勉強。安裝器方案。打成平臺原生的安裝包雙擊下一步。優(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啟動器兩個啟動器只負責找到 java 并轉(zhuǎn)發(fā)參數(shù)不含任何業(yè)務邏輯。這么選有三個理由。第一這套東西的目標用戶一定裝了某個版本的 Java否則他不需要這個工具所以用 Java 寫不構(gòu)成額外的依賴負擔。第二環(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導致里面原本的%SystemRoot%這類變量引用永久變成字面量再也展開不了。這個坑一旦踩中修復起來非常麻煩因為原有內(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 有了這對標記重跑工具時就可以按正則把舊段落整段替換掉而不是每次都往后追加一堆重復的 export。這是保證冪等的核心手段比檢查 PATH 里有沒有包含某字符串可靠得多。3.3 Linuxprofile.d 與 alternatives 的分工Linux 的服務端場景多需要區(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 負責讓java、javac這些命令正確profile.d負責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)]有編譯器工具應該直接拒絕并給出明確提示而不是先配上再說。順便說一句解析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é)要拿捏粒度。按變量粒度回滾——只恢復 JAVA_HOME 和 PATH——比整文件恢復更合理。因為 PATH 是共享資源用戶在你這段時間里可能還裝了別的東西整文件覆蓋會把他剛裝的工具一起干掉。我的做法是寫入前把兩個變量的原始值序列化到備份文件回滾時讀出來逐個恢復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é)果必須一樣非冪等的工具是災難。用戶重跑一次PATH 后面多一段重復的 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 上做忽略大小寫的比較。這一步不做用戶重跑十次就會得到十段重復內(nèi)容因為每次都沒找到。5.2 多版本符號鏈接比寫死路徑優(yōu)雅太多開發(fā)中同時存在多個 JDK 版本是常態(tài)。兩種模型我都試過。寫死模型每次切版本就重寫 JAVA_HOME 為某個具體路徑。簡單直接但缺點是你永遠無法從環(huán)境變量看出當前用的是哪個版本只能靠java -version現(xiàn)查而且構(gòu)建腳本里如果引用了具體路徑切完就斷。符號鏈接模型所有版本解壓到jdk/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)境需要點手段最土但最有效的辦法是任務管理器里結(jié)束該 IDE 進程重開問題消失。根因IDE 是從它啟動時那一刻的父進程環(huán)境繼承變量的。如果 IDE 在配環(huán)境之前就已經(jīng)開著它拿到的是舊快照之后無論你怎么改系統(tǒng)變量它都不會刷新。更隱蔽的情況是Windows 上資源管理器本身也有環(huán)境快照某些從資源管理器啟動的程序會繼承這份舊快照導致重開 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ù)往后找導致實際命中的是第三條。工具里的處理診斷功能輸出所有命中項并標注每一項的來源系統(tǒng)級還是用戶級。同時在寫入階段只要發(fā)現(xiàn)任何指向 JDK 的段殘留在 PATH 中不管位置在哪一律清理掉只保留工具自己插入的那一條。這個策略比較強硬所以我加了確認提示讓用戶知道要刪什么。6.3 中文路徑與字符集帶來的連鎖反應現(xiàn)象路徑里有中文字符時某些構(gòu)建工具報錯或者工具自身的腳本執(zhí)行失敗。根因有兩層。第一層是腳本文件本身的編碼。Windows 的批處理默認按系統(tǒng)編碼解析如果文件存成不帶 BOM 的 UTF-8里面的中文注釋會讓解析錯位。第二層是子進程輸出的編碼Java 在 Windows 上默認按系統(tǒng)編碼讀子進程輸出流遇到非 ASCII 會亂碼導致版本號解析失敗。處理方式一是把工具的所有腳本文件統(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í)行過程做成有日志的每一步都輸出到日志文件。一旦被攔截用戶拿著日志能看出停在哪一步而不是面對一個沒有任何輸出的黑窗口反復重試。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)。工具每次運行都應該把當前狀態(tài)完整讀一遍再決策而不是基于上次運行留下的記錄做增量。用戶在這中間可能手工改過文件、裝過別的工具、換過 shell任何緩存都可能過期。第四CLASSPATH 能不設(shè)就別設(shè)。我一開始把CLASSPATH也納入了自動配置范圍設(shè)成.;%JAVA_HOME%\lib之類。后來發(fā)現(xiàn)這個做法在只寫.的場景下會覆蓋構(gòu)建工具自己的類路徑計算邏輯引發(fā)莫名其妙的問題?,F(xiàn)在我默認不碰 CLASSPATH只在用戶顯式要求時才寫并且在文檔里注明風險。第五給回滾留一條不用命令行的路。工具出問題時用戶可能連終端都打不開所以我在備份文件旁邊同時放一份純文本的手工恢復說明里面就三行打開哪個設(shè)置界面、把哪個變量改回什么值、刪掉哪個段落。這份說明救過我自己一次。最后說個可以繼續(xù)往下做的方向?,F(xiàn)在這個工具的版本探測是基于本地已有安裝包的如果再加上檢查某個版本是否已下載、沒有就按需獲取并校驗完整性的能力就能覆蓋從裸機到可開發(fā)的完整鏈路。不過這會引入網(wǎng)絡依賴和校驗邏輯復雜度上一個臺階我暫時沒做等到手工確認版本來源的環(huán)節(jié)真的成為瓶頸了再說。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚州Av天美传媒| 91美腿丝袜在线观看| 33044男人的天堂深夜备| 日本在线不卡123| 久久性爱精品一区| av爱爱爱| juliaann欧美丝袜办公室| 久久夜色一区二区| 色婷婷亚洲婷婷| 狠狠操夜夜| 欧美色干| 国产白丝网站| 99热欧美| 欧美中日韩XXXX| 97超级色碰碰| 人人妻天天做天天爽| 日日干夜夜欢| 小草精彩毛片| 成人一区二区三区四区| 美女大乳久久久久久久女人18| 婷婷丁香成人| 中文字幕 码 自拍 视频 区| 综合一区中亚洲国产成人综合精品 | 亚洲日韩一区电影| 亚洲熟女av日韩熟女| 免费αⅴ在线观看| 在线综合 亚洲 欧美中文字幕| 久久黄黄黄| 风月影院男女十八禁| 欧美美女在线高潮999| 精品超碰国产| 午夜免费视频1000| 色五月婷婷五月天| 密臀在线免费观看| 强上我不卡卡| 黑人在线91| 密臀在线视频| 久久香蕉国产线看观看亚洲女人 | 久操 高清| 日日天天久久啊啊aaa| 色九九九九久| 久久神马影院| 九九热只有精品| 日韩欧美三级| 97 色综合| 777超碰| 欧美92| 亚欧洲日韩国产精品| 亚洲在线综合| 中文字幕丰满人妻日本| 成人免费看吃奶视频网站| 免费av高清无码| 大香蕉黄色一级片免费看| 岛国激情视频软件| 五月婷婷五月天| 蜜桃视频精品一区二区| 观看视频图片一区二区三区| 加勒比99999| 欧美v日韩v亚洲v最新在线| 男女啪啪网站免费视频| 天天视频综合在线观看视频| 色色九区| 人人摸.人人色| 插穴性爱视频在线观看| 伊人久久婷婷| 中亚黄色三级大片| 91bbbbbb| 国产精品第一区第一页| 97人人干| 欧美色图91p| 日本欧美不卡| 天天色,天天干,天天干| 大香蕉色十月| 素颜老阿姨乱情色| 综合久久97| 日韩欧美中文| 欧美少妇第一页| 青青草一区二区三区四| 国内精品嫩模A∨私拍小视频| 九九综合久久中文字幕| 97色论| 欲香欲色综合天天伊人| 午夜超爽| 亚洲一区二区三区麻豆传媒| 久草在线| 日韩欧美国产高清视频| 欧美婷婷久久| 一本色道无码DVD中文字幕| 日本三级网页| 男人的天堂激情| 国产91丝袜 在线播放| 人人摸人人添人人操| 丝袜美腿欧美| 亚洲第一男人天堂| 青椒国产97在线熟女| 又黄又爽在线观看视频| 婷婷8月天青娱乐| 日本国产亚洲一区在线观看| 超碰调教97| 密臀国产在线| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 日日狠狠久久偷偷色综合免费| 久久精品视频28| 国产一二三福利视频网| 日韩精品国产精品五码一区二区| 亚洲国产亚洲天堂| 国产亚洲精品美女久久久久久2021| 99欧美| 97久久天天综合色天天综合色电影| 大学生美女口爆| 色综合色欲色综合色综合色综合| 东京热不卡视频| av在线免费一区二区| 日少妇亚洲版| 亚洲欧美高清无码| 小骚逼被操的爽不爽| AV乱伦专区| 中文字幕版| 欧美翘臀视频网站一区二区三区| 五月婷婷久久综合| 99热在线只有精品| 天天看少妇| 亚洲婷婷丁香在线| 女人妻一区| 亚洲 欧美 色图| 亚洲五月婷| 蜜桃精品一区二区三区久在线| 欧美日产国产在线成人第一区| 麻豆成人AV| 毛片电影一区二区三区| 欧美性高潮在线| 亚洲日本加勒比在线| 国产成人亚洲精品无| 亚洲另类久操网| 久久精品国产Aⅴ| 91蜜臀熟女| 天天澡天天爽日日AV| 美女啊啊啊啊啊啊啊| 尤物av网站免费在线播放| 青青草国产亚洲精品久久| 日韩成人性日韩成人性爱视频在线免费观看 | 日韩啪啪网| 亚洲日本大香蕉1| 中文字幕亚洲在线一区 | 一本道综合色图| 91老熟妇| 欧美在线亚洲| 91黑丝少妇| 亚洲AV无码AV吞精久久久久| 偷拍综合网| 日韩欧美资源| 激情第四色| 欧美精品宗合| 小草av不卡亚洲二区| 黄片www.| 欧美国产日韩高清在线| 在线有码中文字幕| 亚洲色电影在线| 五月天综合网| av九九| 亚洲 小说 欧美 激情 另类| 日本不卡免费二区| 国产白嫩精品久久| 99视频自拍| 成人国产视频在线观看| 中文久久久| 色香在线| 久久婷婷国产一区二区色| 中国少妇XXXX做受| 96久久久| 密臀国产在线| 久久中文字幕在线观看| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 色臀AV| 欧美日韩大陆黑人少妇99| 操人无码| 国产一区在线免费播放| 91影库| 国产精品久久久久久久久久久久| 91网站18+| 人妻夜夜爽天天爽麻豆三区网站 | 搞中出视频在线观看| 岛国视频免费在线观看| 欧州一区二区三区四区| 91大香蕉伊人| 国产精品一区二区麻豆| 少妇专区一二三四五| 亚洲天堂人妻一区二区| 日韩性爱网址| 天天看天天在线精品| 酒色综合网| 我爱操| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 日韩人妻大香蕉| 在线无码操| 国产精品爱欲| 免费黄色片。| 精品国产91内射久久| 久久性爱视频免费看| 久久久久久九| 色香综合| 色爱亚洲| 神马麻豆福利院| 人妻激情视频| 97精品人妻一二三四| 亚洲情色综合网| 亚洲欧美激情小说| 蜜臀中文无码午夜| 91老熟妇| 青青操网| 免费少妇一区二区| 亚洲精品尤物yw在线影院| 亚洲国产一级黄色视频| 久综合国内精品自在自线| 欧美国产精品久久九九| 欧美日韩插逼视频| 国产精品ⅴ无码大片在线看.| 欧美激情综合| 欧美呦呦性爱| 亚洲精美粉嫩嫩泬在线观看| 天天躁日日躁xxxxx| 99老司机精品视频在线观看| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 欧美日韩不卡a片| 午夜操逼不卡| 97在线精品| 特污免视频| 天天摸天天碰天天添青青| 九九九久久久久| 性交一区二区在线播放| 色九久| 操碰97| 精品人妻一区二区视频| 激情五月丁香五月| 曰本精品久久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 中文AV制服乱伦| 欧美1区二区三区公司| 性久久| 91丨九色丨大屁股| 久久爽爽精品| 亚洲97精品| www.91人妻.com| 国产精品免费美女视频| 中文字幕在线观看第二页| 日韩欧美资源| 97亚洲欧美| 伊人久久大香线蕉无码| 日韩草久视频| 青青伊人加勒比海| 97天天| 国产精品嫩草影院免费| 天天影视网综合少妇| 超碰98综合网| 碰碰97| 国产精品一二三在线看| 天天综合精品| 正宗无毛一线天嫩逼| 少妇一级无码精品| 麻豆这里只有精品| 婷婷15月天青娱乐| 国产AAAAAABBBBB| 国模少妇一区二区三区| 欧美72网页| 天天日天天干少妇日| 福利伊人玖玖国产| 亚洲和欧美裸体美女双飞视频| 夜夜嗨一区| 亚洲精品三区在线观看| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 美国黄片aaa| 91狠狠综合久久久| 天天影视网色欲色香| 四虎午夜影院| 高清不卡国产| 美女视频尤物网在线看| 国产又大又粗又长视频在线| 91老熟女| 午夜精品久久久久久久男人的天堂 | 国产精品自在自拍视频| 黑人综合色| 97精品熟女少妇一区| 美女人妻色网站| 91综合网在线| 97视频在线观看播放与子乱对白在线……| 欧美偷| 大香蕉乱伦视频网| 97超碰色色| 大香蕉丝袜一级片| 亚洲激情在线| 国产在线76页| 久久久555| 亚洲欧洲综合视频在线| 精品人妻一区二区三区四区| 120分钟婬片免费看| 校园春色综合香蕉| 六月天婷婷| 久久黄人人爽视频| 精品无码一区二区| 先锋色眉乱伦资源| 99少妇| 丁香婷婷久久 | 99综合免费视频| 欲综合网| 伊人综合色网| 岛国在线国产| 日本一久是| 亚洲精品美女久久久久久久久| 欧美精品系列| 久久伊人网视频一区二区三区| 美日韩男女操屄视频| 97自拍一区| 亚洲二区精品在线观看| JuliaAnnXXX888| 男人的天堂2010| 久久狠狠色噜噜狠狠狠狠97| 热久久无毒不卡| 狠狠干综合| 国产激情视频一区区三区| 宅男午夜在线视频| 操逼网免费无码视频| 91热| 裸体1区| 久草视频分类在线| 大香蕉视频一二三区| 韩日精品福利视频一区不卡在线免 | 99热这里是精品| 中文字幕后石码三区四区| 欧美日韩电影一区二区| 婷婷五月天成人| 18禁在线视频| 日本在线伊人啪啪| 96久久久精品| 亚洲熟妇乱女区二区三区| 91丨豆花丨熟女| 黑人性暴力毛片| 丝袜天堂| 国产熟女少妇一区| 丝袜熟女一区二区三区| 97欧美视频| 中文无线日韩一区| 天天综和| 熟女精品一区二区三区| 亚洲精品xxx| 国产精品福利视频| 男人成人黄色视频在线观看免费下载| 五月久久HDAV| 欧美亚性天堂| 欧美特大黄一级片片免费| 精品91日日夜夜超清资源| 国产偷拍网站| 欧美热图99| 嗯~啊~快点 死我视频免费看网站| 人妻啊啊人妻啊| 欧美日韩国产中文精品字幕自在自线| 国产高清成人免费视频| 91国产丝袜白虎| 欧美国产一区二区三区麻豆传媒| 国产一区二区三区中文字幕| 色噜噜婷婷| 久久一级无码精品毛片6| 免费精品无码一级毛片牛牛影视 | 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 欧美高潮在线| 超碰超碰欧美| 嗯嗯啊啊视频在线看| 亚洲精品无码少妇久久| 麻花传媒免费网站在线观看| 久久一区二区高清免费| 欧美性生活免费网| 第四色奇米影视777| 激情综合网亚洲| 国产精品一区二区三| 久久噜噜噜精品国产亚洲综合| 又摸又舔在线观看网站| 久久久∴| 麻豆精品三区视频| 亚洲做性| 亚洲毛片久久| 搡老女人老熟女91| 亚洲伊人成综合成人网| 精品欧美老熟女一二区| 无码人妻精品一区二区三区99不卡| 97超碰久久| 免费AV中文网在线观看| 亚洲图片激情综合另类| 亚洲女毛多水多21P| 艹比视频国产精品| 99色色网| 亚洲射综合网| 国产十八禁视频| 人妻少妇久久中文| 色与欲影视天天看综合网| 日本久久久久久久久久| 992视频一区| 精品久久久久久久| 久久亚洲中文字幕视频| 精品九九国产无码| 伊人女女资源在线观看| 五月丁香| 日韩熟女精品无码专区一区二区 | 一起草高清无码| 国产精品久久久久久亚洲色欲| 国产无吗在线播放| 亚洲欧综合另类无码一区| 97任你吞精| 95人妻爽爽人人做人人澡| 日本熟妇熟色97一本在线观看| 欧美午夜精品久久久久久超碰| 欧美欲色| 午夜操操操| 91色狼| 综合久久久久久久综合网| 亚洲最大的综合性av| 久久思思热| 色女综合| 操一对老熟妇爽上天视频| 翔田千里AV无码秘 三区| 7777奇米影视久久| 天天摸,夜夜摸| 欧美 牲| 人妻91少妇| 中文字幕一区二区日韩网| 国产久久久久久久久一区二区| 天天透伊人| 国产精品午夜福利视频| 亚洲国产97| 国产一区二区精品久久99| 天天日美女的B| 久久这里只| 色色福利| 欧美另类自拍 | 屁股久久久久久久久| 91bbb| 欧美十八禁网站| 人妻在线中出视频| 久草午夜| 久热无码| 蜜桃久久一区| 可以在线观看AV的网站| 青青草精品| 夜夜躁狠狠躁日日躁av| 国产成人无码高清| 亚洲少妇激情一区二区三区| 国产美女销魂在线观看不卡| 99热色这里只有精品| 久久久久久少妇| 国产丝袜欧美在线视频| 日韩97视频!在线| 亚洲激情在线| 婷婷综合激情| 综合亚州欧美| 婷婷丁香在线| 超碰碰97资源站| 多乙久久久久久| 亚洲国产精品久久久男人的天堂| 一级乱伦网站| 日本不卡三级网在线播放| 亚洲成成熟女人综合一区二区| 欧美东京热精品A∨| 玖玖资源中文字幕制服丝袜| 午夜福利1区2区3区| 一区二区偷拍拍视频| 亚洲自拍小说| 丁香五月偷拍| 久久无码精品| 中文字幕二区日韩天堂| 少妇久久久久久| 黑操B| 成人性交免费视频| 综合色图亚洲欧美| yaouchengrenav| 三上制服丝AV| 上海一级黄片| 久草毛片| 色婷五月天| 欧美日韩传媒| 亚洲人妻熟妇三十三区| 一级性爱啪啪视频| 操死我了啊啊啊| 欧美午夜一区二区三区| 性生活性生大爱77AV国产| 91精品国产麻豆国产自产在| 天天干人人乐| 久草久热| 欧美午夜视频免费观看| 激情四射婷婷六月天| 另类一区| 99re98| 日本丝袜美腿人妻九九| 在线观看亚洲专区| 久久啊啊啊| 成人无码专区精品视频| 国产三级多多影院2022国产AA一级毛片无码| 国产精品久久久999| 久久久久久精品免费看A级| 欧美亚洲韩国视频十五区| 另类天堂| 偷拍亚洲熟女视频播放| 天天日天天干天天摸天天操| 五月天黄色av| 国产一级黄色片在线观看| 欧美激情1区| 蜜桃久久久久久久| 精品区国产区一区二区三区| 中文字幕久久婷婷丁香五月天| 亚洲和欧美裸体美女双飞视频| 精品久久人妻成人网| 少妇久久久| 蜜桃狠狠色伊人亚洲综合 | 老熟乱一区二区三区四区| 国产最新AV| av网页一区二区三区| 超碰97丝袜| 日日日大屁股骚女人精品| 色五月婷婷在线| 十八禁av无码免费网站APP| 超碰欧美COM| 熟女欧美日韩综合婷婷| 久久久无码国精品无码三区三区| 中文字幕精品一区欧美| 91爱网| 亚州图片第一页| 欧美日韩黄色片一区二区三区四区人与兽做爱 | 国产精品乱码久久| 亚洲精品黑丝| 884t在线| 夜夜操夜夜爽夜夜高潮| 九九久久精品| 日韩欧美经典在线观看| 日本熟女中文字幕一区| 无码不卡八戒| 激情五月天中文字幕色| 九九九成人| 亚洲精品久久一区二区三区蜜桃臀| 99久久久无码| 欧美极品女人的天堂| 97啪啪| 偷拍自拍在线视频观看| 精品国产一区二区三区香蕉欧美| 乱伦熟妇一区二区| 中国人高清www色视频免费| 神马久久免费电影观看| 无码人妻系列少妇| 97国产色图 | 看免费的黄片| 国产v片在线免费观看| 蜜臀视频网站| 69一区二区三区 | 亚洲免费人妻在| 伊人网综合在线视频| 成人免费看吃奶视频网站| 日本αv| 亚洲日韩精品久久久久一区壹牛 | 亚洲.欧美.丝袜.中文.综合| 国产精品秘 福利姬在线观看| 99久久久er直播网址| 大香蕉强奸乱伦| 日韩人妻制服丝袜av| 在线观看高清AV| 99老司机精品视频在线观看| 国产东北女人在线视频| 精品亚洲国产成人精品| 亚洲午夜福利在线影院| www色日本| 五月丁香啪啪网| 欧美亚洲日韩人妻在线观看| 日韩在线视频1234| 大香蕉国产中文自拍| 色制服丝袜夫妻av一区| 亚洲区限制级 99| 九九九成人| 啊啊啊无码| 日韩免费中文字幕视频| 强奸乱伦大香蕉| 探花一区在线| 天美精品av| 中文久久一区| 日韩97视频| 91成人精品| 欧美欧美啪啪视频| 国产AV毛片| 久久9视频| 啊a一区在线| 亚洲成人妻日韩在线| 超碰 欧美| 色激情综合网站| 午夜精品五区| 99热成人| 91久久国产综合精品| 四虎精品永久在线观看| 成人国产视频在线观看| 神马午夜久久久| 青青草中日韩在线| 草伊人高潮喷水超碰| 女优视频第10页| 91中文精品日韩欧美在线| 试看60秒| 亚洲色综合| 深夜国产一区二区三区在线看| 丁香婷婷啪啪| 撸撸成人在线视频| 色97干| 免费黄色片。| 欧美亚州手机在线| 人人爽夜夜玩视频| 亚洲码在线中文在线观看| 夜夜影视四色| 97超碰无码网| 久久精品一区二区| 日韩精品在线观看网站| 乱老熟女一区二区三区| 性色亚洲| 久久久激情| 国产久久一区二区| 日本成a人v网站在线观看| 久久‘黄片视频| 九九久久国产精品| 亚洲天天综合| 亚洲色啪| 国产九九九九九九| 亚州免费啪啪视频| 色五月第四色| 欧美国产精品久久九九| 亚洲国产精品久久久久久久久久| 久久久久久九九九九九九| 26UUU欧美日本| 一区二区激情国产熟女 | 国产精品毛片| 九色精品视频导航1| 有码人妻系列| 思思热一热婷婷热一热| 久久久三区二区一区| 中文字幕亚洲热播人妻| 97天天操天天干| 亚洲精品国产精品成人| 女人天堂AV五区在线| 亚洲欧美清纯| 丁香五月激情五月| 精品一级| 欧美色五月| 日韩精品啪啪啪| 婷婷丁香五月激情啪啪| 午夜亚洲| 婷婷综合视频| 亚洲在线91| 婷婷五月天激情网| 97欧美日韩| 精品国产乱码久久久久久久久1| 欧美综合1性辶| 99热这里都是精品| 啊啊啊想要| 99re6久热只有精品6在线直播 | 日韩国产中文字幕| 青青青草原| 啪啪一区| 亚洲开心网| 亚洲人在线| 岛国片在线播放| 日韩图区| 国产欧美日韩在线不卡第一页| 97精品视频在线播放| 欧美99热| 欧美激情一区| 青青草白白色| 久久久成人国产精品无码| 亚洲精品乱码久久久久久蜜桃麻豆| 色999五月色| 亚洲高清自拍| 久久综合女优| 乱伦系列一区二区| 超碰在线一区二区三区| 日韩精品熟妇| 丰满人妻大屁一区二区| 久夜视频| 99色骚| 五月婷婷久久综合| 欧美色www亚洲国产阿娇要播| 九九九影院| 国产男女无套视频免费观看| 一区二区三| 色天堂综合| 婷婷香蕉| 都市久久精品激情亚洲| 亚洲天堂一二| 婷婷激情一区二区三区俺也去| 久久精品高清AV| 天天日夜干| 日韩av色图| 久久久A∨| 国产亚洲精品无码三区| 日韩日韩日韩-国产乱码精品一区二区| 日本欧美韩国日产片片在线看免| 国产成年女人免费视频播放a| 黄页网站成人免费| 神马午夜久久久| 久久丁香五月婷婷| 啪啪啪东京| 高清无码91| 伊人aaa| 婷婷香蕉欧美在线一区二区三区| 日韩欧美tv一区二区在线观看| 国产精品一区二区三| 精品人妻一区春色| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 无码操逼天堂| 人妻美腿丝袜制服诱惑综合天堂-| 亚洲色图日韩精品| PMv在线观看| 亚洲人妻日日日| 我中文字幕6区 | 精品人妻一区二区三区四区不卡在| 很很很很操| 91 国产丝袜在线放观看| 色五月网址| 日韩性爱免费视频在线网站| 国产精品黑人一区二区三区| 欧美性性性| 人妻精品一区一区三区蜜桃91| 人妻 制服 日韩 中文 在线| 欧美专区第一页| 色久综合| 人妻AV在线| 日韩一级片在线看| 国产精品久久久久久片| 国产野战露脸在线播放| 国产精品嫩草影院午夜两性| 97精品网| 色欧美亚洲| 亚洲色阁| 日韩精品一区二区人人人| 久久激情视频| 941超碰| 校园春色欧美| 啊啊啊啊啊舒服| 国产精品久久久久久9999| 欧美大片天天看| 欧美夜色| 亚洲天堂美臀在线| 欧美最大综合网| 风月影院男女十八禁| 国产精品国产| 天天天操天天天爱| 亚洲97网站| 亚洲,欧美,综合网| 久艹免费| 亚州男人天堂| 久久精品一区二区三区四区五区| 欧美综合天天| 欧美性爽xyxOOOO| 老熟女乱伦一区| 亚洲熟女精品| 欧美日韩性爱无码| 99碰碰| 97干日韩| 九热大香蕉| 国产精品国产| 亚洲高清91| 欧美狠狠干| 国产无码高清操逼视频| 午夜影美女日鸡鸡天天视频国产 | 国产国产亚洲一二三久久| 欧美少妇高潮| 精品人妻免费观看| 日韩欧美tv一区二区在线观看| 欧美东京热精品A∨| 婷婷五月天影院| 伊人久久青青草| 久久久久久久久久黄色网| 97网址97| 久久东京热久久| 午夜亚洲WWW湿好大| 国产精品蜜乳AV| 午夜精品久久久久久久男人的天堂| 精品网站9999| 国产99999久久精品| 精品人妻丰满熟妇一区二区三| 无码国产精品96久久久久孕妇| 囯戸精品高潮呻吟旡码| 啊视频在线| 中文字幕av久久爽Av| 加勒比av官网在线| 凹凸精品熟女在线观看| 国产成人手机视频激情| 无码又爽又硬又激情免费视频| 欧美亚洲一区二区久久久婷精品大包诱| 91丝袜在线视频| 欧美亚洲91| 免费伦费视频在线观看| 91N欧美| 欧美人人天天网| 秋霞色色影院| 熟妇操花| 久久久久久久久久久久久久久久9| 强乱老妇中文字幕| 国产绿奴视频在线观看| 啊…啊…操我用力操我| 国产风韵犹存熟妇三区| 岛国黄片网站| 欧美激情综合| 国产热av| 2019精品国产无码成人| 精品久久久久久亚洲| 亚洲偷拍欧美激情| 日本人妻中文字幕| 国产免费一区二区三区最新不卡 | 亚洲午夜福利在线影院| 国产一区麻豆免费观看| 欧美色图91| 一个人免费HD91视频| 在线视频五十市| 久久久久九九九| 大香蕉人妻| 黄站在线免费观看| 国产一区二区精品久久99| 97综合在线观看| 超碰97护士| 久久九九99| 久久久78| 色综合尤物| 性九九九九九九| 人人妻人射| 啊啊啊啊啊好大好舒服想要| 国产强奸乱伦欧美| 天天日日舔舔| 国产深喉视频一区二区| 屌逼传媒| 日韩精品人妻一区二区| 国产成人网| 成人一二三区| 亚洲色欲天天人妻无码系列专区| 夜夜 中文视频rt| 亚洲一级性爱视频免费看| 操操操操网黑人| 午夜福利1区2区3区| 97色论| 日韩欧美操逼xxx| 久久精品72| 久久这里只精品免费福利| 欧美最婬乱婬爆婬性视频 | 在线女人91| 97色碰| 国产精品乱人伊人网| 久久精品久| 亚洲城人男人的天堂| 色哟哟AⅤ| 五月天久久婷婷亚洲 | 淫色网综合| 中文AV制服乱伦| 亚洲区限制级| 日韩成人性爱AV| 亚洲天在线| 超碰免费人人| 欧美黑人熟妇精品91| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 日本欧美一区二区三区免费| 成人精品欧洲亚洲| 天天操天天舔| 91美女小视频| 97中文字幕色| xxx0国产在线播放| 九九超碰综合网| 五月天婷婷综合网| 久久精品国产精品一区| 粉嫩久久久久| 久精品无码av一区二免费国产在线观看| 亚州,欧美在线| 女人的久久久| 再深点灬舒服灬太大了添视频| 中亚黄色三级大片| 99色色| 一区操逼| 久久久久久人体| 丰满少妇一区二区三区专区| 免费一级黄色录像影片| 四虎影视国产精品| 久久久不能久久久久| 国产女人与拘做受视频免费| 清纯唯美综合亚洲| 人妻在线臀日韩| 91强奸乱轮| 懂色aV一区二区天美传媒| 熟女AV一区| 水野优香在线观看| 波多野42部无码喷潮在线观看| 国产深喉| 高跟伊人julia ann| 97人人射| 美中日韩无码| 秋霞Av理论一级在线| 久艹99| 97高清啪啪| 色五月婷婷久久| 强奸乱伦大香蕉| 91久久青青草原精品| 天天天操天天天爱| 91新在线欧美| 99只有精品| 日韩国产乱子伦App| 测评在线观看AV| 蜜臀久久99精品久久久久电影| 亚洲精品欧洲精品| 97超碰美国| 日本肉体xxxx裸交| 26uuu性物| 一级性爱网| 丝袜AV一区二区三区| 国产诱惑| 精品一久久久| 人妻天天爽夜夜爽精品2| 婷婷综合网站| 秋霞免费AV| 密乳AV免费观看| 免费人成毛片乱码| 天天影视亚洲| 亚洲精品熟妇1区2区3区。| 日韩精品三级片长长久久| 极品白嫩福利在线| 志村玲子视频一区二区| 美女黄频a美女大全免费皮| 亚瑟国产精品久久无码| 亚洲欧美国产va在线播放频| 美女啊啊啊啊啊啊| 日本三级精品| 激情文学亚洲| 999熟女精品| 欧美色综合图片| 和协影院中文字幕三区| 岛国人妻少妇av在线观看| 99热99re超碰精品| 欧美久久九九| 97AV爱| 亚殴在线| 国产suv精品一区二区四区999| 91黑丝露脚| 97超碰国产亚洲精品资源| 婷婷五月天小说| 色情成人五月天| 男人天堂2019亚洲| 综合网欧美在线| 超碰79人人乐| 黄色二级片网站| 蜜臀AV成人精品蜜臀AV久久| 亚洲妇色| 男人天堂综合| 操淫穴亚洲五月丁香| 国产成人精品一区| 疯操AV| 超碰碰97资源站| 91精品国产91综合久久蜜臀| 乱伦熟女论坛| 亚州免费啪啪视频| 日韩色| 99色天堂| 野狼激情网| 国产传媒美日韩av| 青青伊人久久| 大白逼三四级| 91熟女丨91老女人| 欧美片第一页| AV网站高清无码在线观看| 久久久麻豆精品| 天天做天天爽| 天天日日本| 超碰97欧美日韩| 67914在线兔费成人视频| 91美女小视频| 亚洲密乳AV| 人人考人人摸人人干| 青青草视频这里只有精品| 淫色网综合| 日韩一级二级三级免费看完整版国语版| 蜜臀无码一区二区| 天天噜| 亚洲成人日韩小说| 五月婷婷六月丁香| 宗合情欲网| 久久久性少妇| 黑人免费福利视频| 亚洲第一无码播放立川理惠| 素人播放一区| 九9热伊人| 九九九九9999| 国产一在线观看| 天天日夜夜| 国产成人天堂| 97干97色| 伊人久久大香大香线蕉中文| 日韩99999色| 亚洲第一页综合在线| 亚洲无码偷拍| 激情四射五月天| 东北女人| 亚洲色图亚洲| 怡红院一区二区熟女人妻| 亚洲情色1区| 91 偷| 又大又长又粗又爽又黄| 人妻激情另类| 丰满欧美放荡少妇在线| 92性色国产午夜福利在线661| 韩国黄色片精品久久久 | 精品国产Av无码久久久亚洲| 一区二区娱乐网站| 亚洲色91C| 日产操逼| 婷婷五月天补不补| 欧美日本视频一区| 波多野42部无码喷潮在线观看| 欧美拳交在线播放| 日日躁天天躁狠狠躁| 蜜乳AV一区| 麻豆性爱视频在线播放| 性天堂| www.婷婷| 日韩内| 日本中文字幕在线电影| 亚洲高清少妇| 国产二区视频在线观看电影| 老女人日韩美91| 亚洲全色网| 五月丁香六月婷| 老熟女综合网| 国产动漫操逼视频| 久久中久文96| 久久精品国产亚洲AV无码电影| 人人澡人人弄| 26UUU欧美激情一区二区| 78p欧美| 香蕉国产精品麻豆亚洲欧美日韩| 亚洲人成色9999精品久久 | 一区二区三区精品视频| 亚洲男人天堂2013| 亚洲一曲日韩精品| 色九九九综合| AAAAAAAAA黄片| 亚州熟妇精品| 日韩Va亚洲va欧美Ⅴa久久| 伊人991| 久久五十路熟女人妻| 欲香欲色天天天综合和网| 五十路六十路素人熟女| 九九九久久久久| 美国一区二区三区视频| 日韩中文字幕宗合在线| 囯产操逼片| 亚洲中字慕不卡| 五月综合色| 中文字幕三四区| 欧美综合色站| 久久无码成人| 青青草中日韩在线| 色婷婷色99国产综合精品| 97网色| ,国产乱人伦精品一区二区三区| 中文乱码字字幕在线第5页| 尤物av网站| 97在线精品观看视频| 超碰视97中文| 久99| 亚洲欧美日韩免费观看| 在线97在线| 婷婷激情五月天小说网| 啊啊啊水好多| 亚洲美女精品| 亚洲成人日韩小说| 4tube欧美女厕所| 麻豆久久视频在线地址| 操逼无码操逼| 丝袜狂射91| 天综合网| 国产一区二区a毛片| 日本一卡二区在线| 人人澡人人爽人人精品| 啪啪AV导航| 久操国产在线| 久久色一区二区| 久久久精品国产亚洲AV无码| 啊啊啊好多水| 欧美成人国产精品| 亚洲欧美精品一区天堂久久 | 丰满人妻-区二区三区免费| 一级性爱视频免费观看 | 久热影视| 91在线观看,天天综合| 色老汉色| 欧美精品日韩一区二区| 乱伦熟女专区| 欧美色图另类图片| 超碰1024久久| 天天干少妇| 在线欧美69V免费观看视频| 麻豆成人AV| 啊啊啊啊啊好舒服视频| 精品久久青青草| 国产人妻天天干精品| AAAA级日本片免费视频 | 亚洲综合激情五月久久| 午夜乱轮操逼视频免费看| 色色97爱| 国产一区二区精品在线视频| 亚洲欧洲小说图片视频| 国产 三级自拍| 人妻偷拍一区二区三区| 亚洲视频精选| 久久久久久裸体| 久操 高清| 亚洲情色第一页| 人成午夜免费大片| 国产一区自拍欧美日韩| 亚洲在线a| 天天摸天天操视频| 久久精品中文| 屌妞视频久久久久久久 | 91在线秘 男同| 国产精品扒开腿做爽爽爽视频| 国产熟女高潮一区二区三区| 亚洲自拍欧美国产首页网曝| 天美传媒一二三区永久网站| 日日碰狠狠添天天爽超| ..日韩av毛片精品久久久| 尤物av网站免费在线播放| 久草看看看| 尤物视频新赏网鲜网色诱网| 九九九精品一区二区无码| 91色综合激情| 欧美色图亚洲色图成人在在线| 99热这里只有精品99| 国产树林里野战在线看| 人人人人插| 久久久久久日韩| 黄色大片免费在线| 白丝被操91| 亚洲精品国语在线播放| 七月婷婷综合| 欧美一区二区情色| 91色女| 99国内精品| 欧美有码激情视频一区二区三区| 日韩操人| 免费一级视频特黄色大片| 免费一级毛片在线视频观看| 亚洲乱码国产乱码精网站| 日韩精品在线观看观看| 一级特黄aaa大片在线观看成人一级片在线观看| 超碰成人人人爽人人爽| 91精品老女人| 亚洲中文字幕精品一区| 操逼网站网站| 婷婷伊人五月| 日韩一区二区精彩视频| 自拍偷拍第26| 青青免费在线视频一区| 99这里只有精品国产| 777AV电影| 婷婷激情五月天小说网| 欧亚免费视频| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 青娱乐国产剧情av一区| 国产婷婷综合在线观看|