在外部jar中查找不在我的类路径中的文件

时间:2017-07-25 14:24:39

标签: java scala

我正在运行一些测试,我需要获取一个文件的路径,该文件位于我在项目中作为依赖项的jar库中。

这个jar不是我运行的类路径的一部分。

如果我尝试类似

的话
val path =  getClass.getResource("h2-1.3.161.jar").getPath

在我的测试中它不起作用。

任何想法如何在jar中找到一个文件而不是你的类路径的这个jar部分?

问候。

使用astrograph解决方案我设法得到这条路线

java -cp //file:/D:/Users/nb38tv/workspace/f2e-core/f2e-mock/f2e-test-framework/target/f2e-test-framework-1.8.3-SNAPSHOT.jar!/h2/sakila-h2-master/h2-1.3.161.jar -ifExists -tcp -web -tcpAllowOthers

但是java抱怨因为找不到jar。

如果我从路径中移除!,则会收到此错误

Unrecognized option: -ifExists
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

有什么想法吗?

此致

2 个答案:

答案 0 :(得分:1)

该文件是.class文件吗? 你可以在测试中打开文件吗? 你可以从那个jar文件中实例化一个类吗?

要访问类的位置,可以使用以下方法:     的System.out.println(this.getClass()getProtectionDomain()getCodeSource()的getLocation()toURI()的getPath()。。。);

答案 1 :(得分:1)

这取决于你的意思"发现"文件。

如果您的意思是"检测类文件是否存在",那么您可以使用Java Zip文件处理例程。在代码中,将Jar文件作为Zip文件打开。

如果您的意思是"使用类文件"在你的程序中,由于某种原因你不能把它放在你的类文件上(也许它在启动时不存在于该位置)然后你需要使用一个额外的类加载器来查找文件之后的文件存在。为此,我建议您在URLClassLoader中重复使用,即使您的文件是磁盘的本地文件,也只需使用file:/// URL。