繁体   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