日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

运行时vs编译时类路径

發(fā)布時(shí)間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 运行时vs编译时类路径 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這確實(shí)應(yīng)該是一個(gè)簡單的區(qū)別,但是我一直在回答有關(guān)Stackoverflow的許多類似問題,并且經(jīng)常有人誤解此事。

那么,什么是類路徑? 應(yīng)用程序所需的一組所有類(以及帶有類的jar)的集合。 但是有兩個(gè)或?qū)嶋H上三個(gè)不同的類路徑:

  • 編譯時(shí)的類路徑。 包含您在IDE中添加的類(假設(shè)您使用IDE)以編譯代碼。 換句話說,這是傳遞給“ javac”的類路徑(盡管您可能正在使用其他編譯器)。
  • 運(yùn)行時(shí)類路徑。 包含運(yùn)行應(yīng)用程序時(shí)使用的類。 那就是傳遞給“ java”可執(zhí)行文件的類路徑。 對于Web應(yīng)用程序,這是您的/ lib文件夾,以及應(yīng)用程序服務(wù)器/ Servlet容器提供的任何其他jar
  • 測試類路徑–這也是一種運(yùn)行時(shí)類路徑,但是在運(yùn)行測試時(shí)使用。 測試不在您的應(yīng)用程序服務(wù)器/ servlet容器中運(yùn)行,因此它們的類路徑有些不同

Maven定義了依賴范圍,這對于解釋不同類型的類路徑之間的區(qū)別非常有用。 閱讀每個(gè)范圍的簡短說明 。

許多人認(rèn)為,如果他們在存在給定的jar文件的情況下成功編譯了該應(yīng)用程序,則意味著該應(yīng)用程序?qū)⒄_\(yùn)行。 但這并不需要-您需要與用于編譯應(yīng)用程序的jar相同的jar才能出現(xiàn)在運(yùn)行時(shí)類路徑中。 好吧,不一定所有的人,也不一定只有他們。 一些例子:

  • 您可以使用編譯時(shí)類路徑上的給定庫來編譯代碼,但是忘記將其添加到運(yùn)行時(shí)類路徑中。 JVM拋出NoClasDefFoundError,這意味著缺少一個(gè)類,該類在編譯代碼時(shí)存在。 此錯(cuò)誤是一個(gè)清楚的信號,表明您在運(yùn)行時(shí)類路徑上缺少編譯時(shí)類路徑上的jar文件。 反過來,您依賴的jar也有可能取決于您在任何地方都沒有的jar。 這就是為什么(必須)聲明庫的依賴關(guān)系的原因,以便您知道要在運(yùn)行時(shí)類路徑上放置哪些jar
  • 容器(Servlet容器,應(yīng)用程序服務(wù)器)具有一些內(nèi)置庫。 通常,您不能覆蓋內(nèi)置的依賴項(xiàng),即使可以,它也需要其他配置。 因此,例如,您使用提供了servlet-api.jar的Tomcat。 您可以使用編譯時(shí)類路徑上的servlet-api.jar來編譯應(yīng)用程序,以便可以在類中使用HttpServletRequest,但不要將其包含在WEB-INF / lib文件夾中,因?yàn)閠omcat會將其自己的jar放入運(yùn)行時(shí)類路徑。 如果您重復(fù)依賴項(xiàng),則可能會得到奇怪的結(jié)果,因?yàn)轭惣虞d器會感到困惑。
  • 您正在使用的框架(例如spring-mvc)依賴于另一個(gè)庫進(jìn)行JSON序列化(通常是Jackson)。 實(shí)際上,您在編譯時(shí)的類路徑上不需要Jackson,因?yàn)槟鷽]有引用它的任何類,甚至沒有引用它們的spring類。 但是spring內(nèi)部需要Jackson,因此jackson jar必須位于WEB-INF / lib(運(yùn)行時(shí)類路徑)中,才能進(jìn)行JSON序列化。

當(dāng)您考慮編譯時(shí)常量和版本不匹配時(shí),情況可能會更加復(fù)雜,但是一般的要點(diǎn)是:您用于編譯和運(yùn)行應(yīng)用程序的類路徑是不同的,您應(yīng)該意識到這一點(diǎn)。

參考: Bozho的技術(shù)博客博客中的JCG合作伙伴 Bozhidar Bozhanov的 運(yùn)行時(shí)類路徑與編譯時(shí)類路徑 。


翻譯自: https://www.javacodegeeks.com/2012/04/runtime-vs-compile-time-classpath.html

總結(jié)

以上是生活随笔為你收集整理的运行时vs编译时类路径的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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