Classpath resource within jar

classpath, jar, java, resources

Solution

Use `getResource` instead of `getSystemResource` to use a resource specific to a given classloader instead of the system. For example, try any of the following:

URL resource = getClass().getClassLoader().getResource("R.txt");
URL resource = Foo.class.getClassLoader().getResource("R.txt");
URL resource = getClass().getResource("/R.txt");
URL resource = Foo.class.getResource("/R.txt");

Note the leading slash when calling `Class.getResource` instead of `ClassLoader.getResource`; `Class.getResource` is relative to the package containing the class unless you have a leading slash, whereas `ClassLoader.getResource` is always absolute.

Problem

I have a project A, which contains some java files and a classpath resource R.txt. Within the project I use ClassLoader.getSystemResource("R.txt"); to retrieve R.txt. Then I have a project B which includes project A's jar-file. Now getSystemResource("R.txt") wont find the textfile (and yes, it's still in the root of the jar file). Even trying "/R.txt" as was suggested on some other site didn't work. Any ideas?

Original source