日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

gradle下bug修正后问题仍存在解决思路

發(fā)布時(shí)間:2025/3/11 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gradle下bug修正后问题仍存在解决思路 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

    • 我的學(xué)習(xí)過程
    • 我的學(xué)習(xí)心路
    • 熱加載配置
    • bug問題總結(jié)

我的學(xué)習(xí)過程

前天寫的client-server聊天項(xiàng)目寫完后,今天進(jìn)行了調(diào)試。我用到的是out目錄下的server.class文件和client.class文件。
先后啟動(dòng)兩個(gè)命令行窗口來進(jìn)行測試的。
使用java server啟動(dòng)服務(wù)端窗口。
再使用java client啟動(dòng)客戶端窗口。

客戶端發(fā)送四次信息

ni hao zhong guo

客戶端發(fā)給服務(wù)端的信息正常情況下,服務(wù)端接收后屏幕打印一律顯示了str。

客戶端打印的四次信息

str str str str

我的學(xué)習(xí)心路

客戶端的發(fā)送的具體信息,全是str。為什么呢?

我的操作心路
首先是服務(wù)端顯示異常,所以定位到server.java的代碼。定位到問題代碼如下:

// 有bug的java代碼 System.out.println("str");

我的操作心路
這個(gè)bug簡單,就是不小心加了雙引號(hào),導(dǎo)致直接打印了字符串str。修正!我用的是gradle管理項(xiàng)目,進(jìn)行了clean、build、rebuild project后,繼續(xù)使用兩個(gè)命令行窗口進(jìn)行測試。

我的心里路程
問題沒有得到解決。我想想會(huì)是什么原因呢?明明已經(jīng)改過來了。該怎么解決呢?我或許可以嘗試到idea里打斷點(diǎn)進(jìn)行調(diào)試,看看是不是有其他代碼問題。

我的操作心路
說干就干,在idea里配置兩個(gè)tomcat試試,學(xué)習(xí)了tomcat的熱加載配置。

熱加載配置

找到tomcat的目錄下找到conf/server.xml文件,打開,
在host節(jié)點(diǎn)下增加Context節(jié)點(diǎn)。

<Host name="localhost"... ... <Context path="項(xiàng)目路徑" docBase="/【某目錄名】" debug="0" privileged="true" reloadable="true"/> ... </Host>

屬性概念:

debug=“0”
debug是設(shè)定debug level, 0表示提供最少的信息,9表示提供最多的信息。

privileged=“true”
privileged設(shè)置為true的時(shí)候,才允許Tomcat的Web應(yīng)用使用容器內(nèi)的Servlet。

reloadable=“true”
會(huì)讓修改生效,該選項(xiàng)適合調(diào)試。

我的心里路程
我發(fā)現(xiàn),上面參數(shù)里【某目錄名】是建在webapps目錄下,目錄里面需要放置項(xiàng)目編譯后的class文件和項(xiàng)目的jar包。但是同樣class文件在目錄中存在了2個(gè)地方。

一個(gè)是out/production/classes目錄下
另一個(gè)build/classes/java/main目錄下

我的心里路程
老師的課程用的是out目錄下的class文件,我也是使用out目錄下的,是什么原因?qū)е滦拚簧?#xff1f;為什么有2個(gè)地方的class?

我的操作心路
百度一下看看:推測出,由于每次使用的是out目錄下的class文件,但clean、build、rebuild project并沒有修正out文件下class文件。是每次都不起作用呢?還是一定時(shí)間間隔后起作用?有待考證*1

我的操作心路
使用tomcat熱加載后,問題得倒了解決。

我的心里路程
推測兩種可能:

  • reloadable="true"可以對(duì)out目錄下的class文件修正。
  • 或者熱加載使用的是build目錄下的class文件。
    有待考證*2
    標(biāo)記:學(xué)習(xí)下gradle的目錄結(jié)構(gòu)或源網(wǎng)站的說明。
  • 考證*1
    我的考證結(jié)果:有待考證*1處思考有誤。
    我的考證思路:
    在Server.java中添加打印語句,觀察兩處class文件是否添加該打印語句進(jìn)行來驗(yàn)證。

    兩種build驗(yàn)證:

  • idea上方導(dǎo)航欄build(clean project、build project、rebuild project)
  • idea窗口右側(cè)邊欄Gradle-Tasks下build(clean、build)
  • 第一種build下:針對(duì)的是out目錄下的class
    Server.java修改后,

  • 若未進(jìn)行clean project,則build project和rebuild project都未能修正out目錄下的Server.class。
  • 若先進(jìn)行了clean project,則build project和rebuild project都能修正out目錄下的Server.class。
  • 第二種build下:針對(duì)的是build/classes/java/main目錄下的class
    Server.java修改后,

  • clean直接會(huì)刪除build/classes/java/main整個(gè)目錄和Server.class文件。
  • 直接build就可以修正build/classes/java/main目錄下的Server.class文件。
  • 考證*2
    我的考證結(jié)果:有待考證*2處思考有誤。熱加載使用的是out目錄下的class文件。
    我的考證思路:
    利用兩種build的不同點(diǎn)使兩處的class文件具備不同的打印語句。觀察運(yùn)行后窗口的打印語句。

    out目錄下的Server.class:
    System.out.println("-------bad1----");

    build/classes/java/main目錄下的Server.class:
    System.out.println("-------bad2----");

    Server.java:
    System.out.println("-------good----");

    啟動(dòng)tomcat,運(yùn)行Server.java,窗口打印結(jié)果:

    -------good----

    out目錄下的Server.class內(nèi)打印語句發(fā)生變化:
    System.out.println("-------good----");

    out目錄下的class能修正,是否與reloadable="true"有關(guān)呢?
    我的心里路程
    把reloadable設(shè)置false試試。重復(fù)上面操作。
    結(jié)果:不影響out目錄下的class的修正。

    百度了解:這個(gè)屬性設(shè)為true,tomcat服務(wù)器在運(yùn)行狀態(tài)下會(huì)監(jiān)視在WEB-INF/classes和WEB-INF/lib目錄下class文件的改動(dòng),如果監(jiān)測到有class文件被更新的,服務(wù)器會(huì)自動(dòng)重新加載Web應(yīng)用。

    我的思考
    設(shè)為false時(shí),第一次啟動(dòng)tomcat也會(huì)調(diào)一次監(jiān)測嗎?或者說服務(wù)器重啟了會(huì)重新加載更新一次,重啟與這個(gè)屬性無關(guān)?
    設(shè)為true時(shí),啟動(dòng)tomcat,運(yùn)行Server.java,修改Server.java,保存重新編譯(修正了out目錄下的class)。Server.java并沒有重新加載。啊哦!想錯(cuò)了。監(jiān)視的是WEB-INF/classes和WEB-INF/lib目錄下class文件。與out目錄下的class無關(guān)。想錯(cuò)了,哈哈哈。

    bug問題總結(jié)

    我錯(cuò)在使用的是第二種的clean,針對(duì)的是build/classes/java/main目錄下的class。未使用第一種的clean project再build project,針對(duì)的是out目錄下的class。

    總結(jié)

    以上是生活随笔為你收集整理的gradle下bug修正后问题仍存在解决思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。