Note that there are some explanatory texts on larger screens.

plurals
  1. POUsing javax.tools.ToolProvider from a custom classloader?
    text
    copied!<p>It seems to be impossible to use <code>javax.tools.ToolProvider</code> from a custom classloader as required by Ant or Webstart: <a href="http://bugs.sun.com/view_bug.do?bug_id=6548428" rel="noreferrer">http://bugs.sun.com/view_bug.do?bug_id=6548428</a></p> <p><code>javax.tools.ToolProvider.getSystemJavaCompiler()</code> loads <code>javax.tools.JavaCompiler</code> into a URLClassLoader whose parent is the system classloader. The API does not seem to allow users to specify a parent classloader.</p> <p><strong>How can one use <code>javax.tools.JavaCompiler</code> from a custom classloader?</strong></p> <p>For example:</p> <ul> <li>Ant loads <code>MyParserTask</code></li> <li><code>MyParserTask</code> parses Java source-code</li> <li><code>MyParserTask</code> is loaded by <code>AntClassLoader</code> that delegates to the system classloader</li> <li><code>javax.tools.JavaCompiler</code> is loaded by <code>URLClassLoader</code> thast delegates to the system classloader</li> </ul> <p>At a later point, <code>MyParserTask</code> invokes:</p> <pre><code>javax.tools.CompilationTask task = compiler.getTask(...); com.sun.source.util.JavacTask javacTask = (com.sun.source.util.JavacTask) task; javacTask.parse().next().accept(visitor, unused); // parsing happens here </code></pre> <ul> <li>Seeing how the two classes reside on separate classloaders, there doesn't seem to be a way for <code>MyParserTask</code> to interact with <code>JavacTask</code> without getting <code>ClassCastException</code> errors.</li> </ul> <p>Any ideas?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload