欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MAVEN3.9.x中301問(wèn)題及解決方法

 更新時(shí)間:2025年01月02日 11:37:33   作者:FIN技術(shù)鋪  
本文主要介紹了使用MAVEN3.9.x中301問(wèn)題及解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

本文主要是針對(duì)“構(gòu)建加速”需求交付過(guò)程中,針對(duì)maven depoy “301”響應(yīng)碼的現(xiàn)象分析、原因查找、解決方案、技術(shù)改造及驗(yàn)證的過(guò)程。改造之后,支持用戶(hù)基于mvnd的構(gòu)建方式,提升代碼構(gòu)建速度。

01、背景

為了提升maven客戶(hù)端的構(gòu)建速度,經(jīng)過(guò)調(diào)研,了解到mvnd存在以下技術(shù)特性:

  • GraalVM的使用,mvnd使用GraalVM替代了傳統(tǒng)的JVM,使得啟動(dòng)速度更快,占用的內(nèi)存更少。GraalVM是一個(gè)高性能的運(yùn)行時(shí),它能夠快速啟動(dòng),并且具有較低的內(nèi)存占用。這意味著mvnd在啟動(dòng)和運(yùn)行時(shí)的性能都優(yōu)于使用傳統(tǒng)JVM的mvn。
  • 緩存機(jī)制,mvnd對(duì)于Maven插件的緩存機(jī)制也有所改進(jìn)。在mvn構(gòu)建過(guò)程中,每次構(gòu)建都需要重新加載和編譯所有的Maven插件。而在mvnd中,這些插件被緩存在多個(gè)構(gòu)建中,只有當(dāng)插件的版本發(fā)生變化時(shí),才會(huì)重新加載和編譯。

基于以上優(yōu)點(diǎn),為支持mvnd功能,實(shí)現(xiàn)加速構(gòu)建能力,用戶(hù)需要將maven版本從3.6.x版本升級(jí)到3.9.x版本,用戶(hù)升級(jí)之后在提交構(gòu)建二進(jìn)制制品過(guò)程當(dāng)中發(fā)現(xiàn)maven 3.9.x版本的兼容性問(wèn)題。后續(xù)就兼容性問(wèn)題進(jìn)行識(shí)別改造,完成需求交付。

02、現(xiàn)象

基于maven3.6.x版本執(zhí)行deploy動(dòng)作,所構(gòu)建制品可以正常發(fā)布到nexus倉(cāng)庫(kù)。        

基于maven3.9.x版本提交所構(gòu)建制品失敗,收到nexus服務(wù)“301”返回碼。

03、分析原因

Figure 1 DEPLOY請(qǐng)求示意

用戶(hù)在本地執(zhí)行“mvn deploy” 命令之后,本地開(kāi)始編譯構(gòu)建制品,構(gòu)建完成之后開(kāi)始交付所構(gòu)建制品部署到nexus服務(wù),在部署到nexus之前經(jīng)由nginx進(jìn)行代理,之后上傳到nexus倉(cāng)庫(kù)。

Nginx.conf 配置片段

用戶(hù)本地pom.xml配置片段

早期版本根據(jù)護(hù)網(wǎng)安全需求,需要把應(yīng)用的原始請(qǐng)求資源路徑屏蔽掉,在nginx.conf層面進(jìn)行轉(zhuǎn)發(fā)配置,針對(duì)用戶(hù)在pomxml當(dāng)中配置的屏蔽原始路徑之后的倉(cāng)庫(kù)地址進(jìn)行重定向。

針對(duì)maven3.6.x版本的交互過(guò)程進(jìn)行分析

  • 在maven3.6.x版本的場(chǎng)景下,執(zhí)行DEPLOY,觀察到第一次請(qǐng)求打到nginx之后,nginx響應(yīng)301永久重定向,并且在響應(yīng)頭location字段返回新的URL地址;
  • Maven3.6.x 拿到301重定向,根據(jù)location的地址,重新發(fā)起請(qǐng)求新的URL;
  • 后續(xù)交互過(guò)程以相同方式完成交互,直至deploy完成。

針對(duì)maven3.9.x版本的交互過(guò)程進(jìn)行分析

  • 在maven3.9.x場(chǎng)景下,執(zhí)行deploy命令,請(qǐng)求到達(dá)nginx之后,給出相同的301響應(yīng),并且在響應(yīng)頭的location當(dāng)中指定重定向之后的URL;
  • Maven在拿到重定向響應(yīng)之后,忽略301,直接開(kāi)啟下一個(gè)步驟的請(qǐng)求;
  • 在下一個(gè)步驟的交互里面,nginx濤聲依舊……,然后就是我們?cè)赾md上面看到的最終的失敗的執(zhí)行結(jié)果。

04、解決方案及驗(yàn)證

根據(jù)上面現(xiàn)象分析,經(jīng)過(guò)驗(yàn)證發(fā)現(xiàn)是maven 3.9版本不處理301重定向,根據(jù)這個(gè)特性,針對(duì)nginx進(jìn)行改造:

upstream nexus_server {
        server xxx.xxx.xxx.xxx:xxx max_fails=3 fail_timeout=900s weight=10;
    }
server {
        listen       80;
        server_name  test.repo.htsc;
        access_log  /var/log/nginx/access.log  ;
        error_log  /var/log/nginx/access.log  ;
    location /
    {
          # 摘除/nexus或/nexus/content 
       rewrite ^/nexus/content/(.*)$ /$1 last; 
       rewrite ^/nexus/(.*)$ /$1 last; 
       # 將repositories替換為repository 
       rewrite ^/(.*)repositories(.*)$ /$1repository$2 last;     
……
        expires -1;
    }
}

針對(duì)nginx.conf進(jìn)行改造,將rewrite 中permannet 永久重定向調(diào)整為last,在重寫(xiě)URI之后再次進(jìn)入locate過(guò)濾,直至proxy_pass,將原來(lái)依賴(lài)客戶(hù)端處理301的邏輯調(diào)整為nginx自身完成URI轉(zhuǎn)換和請(qǐng)求處理,改造之后既減少網(wǎng)絡(luò)IO,每個(gè)請(qǐng)求省了一次交互,又提升了用戶(hù)的使用體驗(yàn),提升了deploy的效率。

05、結(jié)語(yǔ)

本次改造針對(duì)若干主要的用戶(hù)使用deploy的存量和增量場(chǎng)景進(jìn)行兼容,實(shí)現(xiàn)mvnd命令的支持,從IO角度的來(lái)說(shuō),相比于改造前,省去了重定向請(qǐng)求的網(wǎng)絡(luò)開(kāi)銷(xiāo),客戶(hù)端請(qǐng)求次數(shù)減半;從構(gòu)建加速的角度來(lái)說(shuō),基于maven3.9.x mvnd方式構(gòu)建提升構(gòu)建速度提升10%-20%;有效實(shí)現(xiàn)構(gòu)建環(huán)節(jié)的加速增效。

到此這篇關(guān)于MAVEN3.9.x中301問(wèn)題及解決方法的文章就介紹到這了,更多相關(guān)MAVEN3.9.x 301問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot web靜態(tài)資源配置詳解

    SpringBoot web靜態(tài)資源配置詳解

    這篇文章主要介紹了SpringBoot web靜態(tài)資源配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • SpringBoot整合ip2region獲取客戶(hù)端IP地理位置信息

    SpringBoot整合ip2region獲取客戶(hù)端IP地理位置信息

    在我們?nèi)粘EB開(kāi)發(fā)工作中,經(jīng)常會(huì)有需要獲取客戶(hù)端地理位置的需求,本文主要介紹了SpringBoot整合ip2region獲取客戶(hù)端IP地理位置信息,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • Java實(shí)現(xiàn)圖書(shū)館借閱系統(tǒng)

    Java實(shí)現(xiàn)圖書(shū)館借閱系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)圖書(shū)館借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java實(shí)現(xiàn)兩人五子棋游戲(五) 判斷是否有一方勝出

    Java實(shí)現(xiàn)兩人五子棋游戲(五) 判斷是否有一方勝出

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)兩人五子棋游戲,判斷是否有一方勝出,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • SpringBoot集成MaxCompute的示例代碼

    SpringBoot集成MaxCompute的示例代碼

    這篇文章主要介紹了SpringBoot集成MaxCompute的實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • 詳解SpringBoot工程的三種搭建方式

    詳解SpringBoot工程的三種搭建方式

    這篇文章主要介紹了詳解SpringBoot工程的三種搭建方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • SpringCloud通用請(qǐng)求字段攔截處理方法

    SpringCloud通用請(qǐng)求字段攔截處理方法

    這篇文章主要介紹了SpringCloud通用請(qǐng)求字段攔截處理,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SWT JFace Bookmark 制作

    SWT JFace Bookmark 制作

    SWT JFace Bookmark 制作
    2009-06-06
  • Java使用Arrays.asList報(bào)UnsupportedOperationException的解決

    Java使用Arrays.asList報(bào)UnsupportedOperationException的解決

    這篇文章主要介紹了Java使用Arrays.asList報(bào)UnsupportedOperationException的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java中CAS機(jī)制實(shí)現(xiàn)方法詳解

    Java中CAS機(jī)制實(shí)現(xiàn)方法詳解

    傳統(tǒng)的并發(fā)控制手段如synchronized和ReentrantLock雖有效防止資源競(jìng)爭(zhēng),卻可能引起性能開(kāi)銷(xiāo),相比之下,CAS(CompareAndSwap)提供一種輕量級(jí)的樂(lè)觀鎖策略,通過(guò)硬件級(jí)別的原子指令實(shí)現(xiàn)無(wú)鎖并發(fā),提高性能,需要的朋友可以參考下
    2024-09-09

最新評(píng)論