我正在运行一些测试,我需要获取一个文件的路径,该文件位于我在项目中作为依赖项的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.
有什么想法吗?
此致
答案 0 :(得分:1)
该文件是.class文件吗? 你可以在测试中打开文件吗? 你可以从那个jar文件中实例化一个类吗?
要访问类的位置,可以使用以下方法: 的System.out.println(this.getClass()getProtectionDomain()getCodeSource()的getLocation()toURI()的getPath()。。。);
答案 1 :(得分:1)
这取决于你的意思"发现"文件。
如果您的意思是"检测类文件是否存在",那么您可以使用Java Zip文件处理例程。在代码中,将Jar文件作为Zip文件打开。
如果您的意思是"使用类文件"在你的程序中,由于某种原因你不能把它放在你的类文件上(也许它在启动时不存在于该位置)然后你需要使用一个额外的类加载器来查找文件之后的文件存在。为此,我建议您在URLClassLoader中重复使用,即使您的文件是磁盘的本地文件,也只需使用file:///
URL。