亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MAVEN3.9.x中301問題及解決方法

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

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

01、背景

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

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

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

02、現(xiàn)象

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

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

03、分析原因

Figure 1 DEPLOY請求示意

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

Nginx.conf 配置片段

用戶本地pom.xml配置片段

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

針對maven3.6.x版本的交互過程進行分析

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

針對maven3.9.x版本的交互過程進行分析

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

04、解決方案及驗證

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

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;
    }
}

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

05、結(jié)語

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    SpringBoot集成MaxCompute的示例代碼

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

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

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

    SpringCloud通用請求字段攔截處理方法

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

    SWT JFace Bookmark 制作

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

    Java使用Arrays.asList報UnsupportedOperationException的解決

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

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

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

最新評論