簡體   English   中英

如何從classpath獲取一個jar文件?

[英]How to get a jar file from classpath?

我有一個依賴於一些jar的Web應用程序。 該jar位於WEB-INF/lib文件夾中。 在運行時,我需要將jar復制到另一個文件夾,然后解壓縮它。 有什么辦法嗎?

您可以使用ServletContext.getRealPath()獲取虛擬路徑的真實路徑。

例如,獲取Webapp的WEB-INF/lib文件夾:

File libFolder = new File(ServletContext.getRealPath("/"), "WEB-INF/lib");

要獲取特定的jar文件:

File jarFlie = new File(libFolder, "somejar.jar");

Jar文件是普通的zip文件。 您可以像提取其他任何zip文件一樣將其提取。 有關詳細信息,請參見ZipFileJarFile

我不確定您嘗試在哪種情況下執行此操作。 如果您在Spring應用程序或其他應用程序中,則可能與我在此處描述的內容有所不同。

如果您是在Servlet上下文中,則可以方便地使用Java ClassLoader,或者更精確地說,在您的情況下,您的運行時環境的類加載器很可能是諸如Tomcat或Glassfish之類的應用服務器來獲取流以讀取JAR文件例如

InputStream in = getServletContext().getResourceAsStream("/WEB-INF/lib/yourlib.jar");

您將獲得一個InputStream,可用於讀取文件。 然后,您可以使用Apache Commons FileUtils將Stream復制到另一個文件。

File outputFile = File.createTempFile("temp-file-name", ".jar");
FileUtils.copyInputStreamToFile(in, outputFile);

在上面的示例中,我將代碼寫入了臨時目錄。 我無法回答哪個應用程序服務器實際上將允許您寫入任意文件系統位置,而哪個不允許。 因此,我認為在每種環境中都應允許寫入臨時目錄。

對於您的最后一步。 實際提取JAR文件我想向您推薦這篇文章,它是如何從Java代碼提取JAR / ZIP文件的很好的解釋。

如何編寫一個Java程序來提取JAR文件並將其數據存儲在指定目錄(位置)中?

當然,您將需要調整此處給出的示例,以再次將文件寫入肯定可以實際寫入的位置。

暫無
暫無

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

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