> However there is a change to the ClassLoader.getResourceXXX methods. Mark has 
> summarized the current state of affairs here:
> 
> http://mail.openjdk.java.net/pipermail/jpms-spec-experts/2015-October/000163.html
>  
> <http://mail.openjdk.java.net/pipermail/jpms-spec-experts/2015-October/000163.html>
From the above 
Resource encapsulation
___________________________
2015/9/28 10:02 -0700, peter.kriens at aqute.biz
:
> The javadoc for getResource* says: 
>
>       ‘This method does not find resources in named modules’.
>

There is a plethora of resource-lookup methods.  The current state of
affairs is:

  - A class in a named module can read its own resources via the
    Class::getResourceAsStream method, which returns an InputStream.  It
    can get a URL to one of its own resources via the Class::getResource
    method [1].  These methods will not locate resources in other named
    modules.

  - The ClassLoader::getResource* methods do not locate resources in any
    named modules.
_______________________
Although I was a little disappointed this wasn’t quite as easy as it used to 
be, my understanding from reading this is should not be possible at all to do a 
getResource against the runtime? If they are included in “named modules”?
Doesn’t URLClassLoader using the jrt:/ specification get around this? 

Michael Hall




> On Dec 5, 2015, at 11:23 AM, Alan Bateman <alan.bate...@oracle.com> wrote:
> 
> 
> 
> On 05/12/2015 17:08, Michael Hall wrote:
>> Curious,
>> I had code for checking to see where something was at…
>> 
>>      public static void main(String[] args) {
>>              try {
>> //             java.net.URL jrt = new java.net.URL("jrt:/java.base/");
>>                ClassLoader cl = new java.net.URLClassLoader(modules);
>>                System.out.println(cl.getResource(args[0]));
>>              }
>>              catch (Exception ex) { ex.printStackTrace(); }
>>      } 
>> 
>> This used to work with 
>> new java.net <http://java.net/>.URLClassLoader(new java.net 
>> <http://java.net/>.URL[0]);
>> Now with a jigsaw ea I get…
>> java -cp halfpipe.jar org.cmdline.cmds.Locator java/lang/String.class
>> null
>> 
>> To get it to work jigsaw for something in the base module I found it needed 
>> an actual URL like jrt above. It worked fine for class path outside the 
>> runtime. 
>> I then set up an url array with a separate jrt:/ url for each module - 
>> ‘modules' in listing above, entire current list of modules omitted for 
>> brevity.
>> Then it works…
>> java -cp .:../../HalfPipe/halfpipe.jar  Locator java/lang/String.class
>> jrt:/java.base/java/lang/String.class
>> 
>> I also tried this as a ClassLoader subclass. The way I think I used to do 
>> this lookup. It didn’t seem to work for modular runtime classes either.
>> 
>> I haven’t done much else ClassLoader related with jigsaw yet, and hope to do 
>> less since I won’t need to try and load classes from tools.jar.  Are there 
>> other things expected to work a little differently?  Does loading work the 
>> same and just loadResource is different?
>> 
> 
> The jrt URL scheme defined in JEP 220 is working and you should have no 
> issues connecting to resources in the run-time image with those URLs.
> 
> 
> 
> I'm sure the JSR will discuss that topic further in due course. For now, the 
> implementation in the jake forest and the EA builds is as per the summary in 
> that mail.
> 
> -Alan.
> 
> 

Reply via email to