簡體   English   中英

如何知道Java應用程序使用的所有類/ jar文件

[英]How to know what all classes / jar files a Java application uses

我來自C / C ++,並且在Java中確實有工作經驗。 我現在正在轉向Java語言(因為我覺得我應該做這么長時間了)。 在C / C ++中,如果應用程序已鏈接到外部共享庫(.so,.a,.sl),則可以使用“ ld”命令了解此依賴性。

我的問題是,.jar服務器是否具有類似用途? 就像Java應用程序依賴於1.jar,2.jar等一樣,這些jar文件是否會永久地“鏈接”到Java應用程序(導致更大的文件,例如.a被c / c ++應用程序所喜歡,從而導致可執行文件更大)。或動態(類似於.so / .sl即時加載,而不是主c / c ++應用的一部分)。

另外,是否可以列出Java應用程序所依賴的所有jar文件?

在Java中,默認情況下,應用程序會導入java.lang。*包,該包是否駐留在jar文件中? 如果是這樣,哪個jar文件對應於該軟件包?

非常感謝!

VIPIN

事情是否硬連接到您的應用程序中? 當然不。 作為開發人員和部署人員,您有責任跟蹤應用程序需要哪些jar文件。

默認庫(在JDK API文檔中定義)包含在jar文件中,該jar文件是作為JVM安裝的一部分部署的,因此您不必運送這些庫。
同樣,對於Java EE,有一個標准集要求服務器可用,這是在Java EE API文檔中定義的,因此您也不需要附帶該標准集。
將這些類視為編寫C應用程序時操作系統附帶的動態庫。 您不運送那些,而是依靠它們在那里。 如果不是,則會收到錯誤消息,指出操作系統(對於Java是JVM)是​​錯誤的版本。
有一些工具可以從Java類提取有關導入的信息。 有了這些信息,可能可以將目錄保存滿jar文件,然后編寫軟件來找出需要的文件,但是在開始編寫時,您實際上應該保持跟蹤。

您可以檢查META-INF文件夾中的清單文件。 它應該包含應用程序依賴項的聲明。 一個例子是,jars庫要求是class-path:

manifest-Version: 1.0
Built-By: melt321
Build-Jdk: 1.6.0_35
Class-Path: dependency-jars/log4j-1.2.17.jar
Created-By: Apache Maven
Main-Class: com.example.org.Tester
Archiver-Version: Plexus Archiver

或者如果jar正在使用maven,則可以檢查pom.xml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM