Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从类路径获取jar文件?_Java_Classpath - Fatal编程技术网

Java 如何从类路径获取jar文件?

Java 如何从类路径获取jar文件?,java,classpath,Java,Classpath,我有一个依赖于某个jar的web应用程序。jar位于WEB-INF/lib文件夹中。在运行时,我需要将jar复制到另一个文件夹,然后将其解压缩。有什么方法可以做到这一点吗?您可以使用它来获取虚拟路径的真实路径 例如,要获取webapp的WEB-INF/lib文件夹: File libFolder = new File(ServletContext.getRealPath("/"), "WEB-INF/lib"); 要获取特定的jar文件,请执行以下操作: File jarFlie = new

我有一个依赖于某个jar的web应用程序。jar位于
WEB-INF/lib
文件夹中。在运行时,我需要将jar复制到另一个文件夹,然后将其解压缩。有什么方法可以做到这一点吗?

您可以使用它来获取虚拟路径的真实路径

例如,要获取webapp的
WEB-INF/lib
文件夹:

File libFolder = new File(ServletContext.getRealPath("/"), "WEB-INF/lib");
要获取特定的jar文件,请执行以下操作:

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

Jar文件是普通的zip文件。您可以像提取任何其他zip文件一样提取它。有关详细信息,请参阅和。

我不确定您是在什么环境下尝试这样做的。如果您使用的是Spring应用程序或其他应用程序,那么它可能与我在这里描述的有所不同

如果您在Servlet的上下文中,您可以简化Java类加载器,或者更准确地说,您的运行时环境中的类加载器,在您的情况下,很可能是应用程序服务器(如Tomcat或Glassfish)获取流来读取JAR文件,例如

InputStream in = getServletContext().getResourceAsStream("/WEB-INF/lib/yourlib.jar");
您将获得一个可用于读取文件的InputStream。然后,您可以使用ApacheCommonsFileUtils将流复制到另一个文件

File outputFile = File.createTempFile("temp-file-name", ".jar");
FileUtils.copyInputStreamToFile(in, outputFile);
在上面的示例中,我将代码写入临时目录。我无法回答哪个应用程序服务器实际允许您写入任意文件系统位置,哪个不允许。因此,我假设在每个环境中都应该允许写入临时目录

为了你的最后一步。实际上,我想让您参考这篇文章,这篇文章很好地解释了如何从Java代码中提取JAR/ZIP文件


当然,您需要修改这里给出的示例,以便再次将文件写入到您确实可以写入的位置。

不仅仅是将jar放在类路径中,不。为什么要这样做?将jar添加为“添加类文件夹”,然后您就不需要显式提取它。