title: Load jar file with URLCLassLoader
body: <p>I am trying to load a jar file as if it was run with "java -jar BungeeCord.jar", but I am trying to do this from within another jar. I can not use a process builder because I need get an instance of classes uses in the external jar file.</p>
  
  <p>I have created this:</p>
  
  <pre><code>System.out.println("Loading jar: " + jar.toURI().toURL());
  
      child = new URLClassLoader(new URL[]{jar.toURI().toURL()}, BungeeServer.class.getClassLoader());
  
      Class&lt;?&gt; classToLoad = Class.forName("net.md_5.bungee.Bootstrap", true, child);
      final Method method = classToLoad.getDeclaredMethod("main", String[].class);
  
      new Thread(new Runnable(){
  
          public void run() {
              try {
                  method.invoke(null, (Object) new String[]{});
              } catch (Exception e) {
                  e.printStackTrace();
                  BungeeControl.shutdown();
              }
          }
  
      }).start();
  </code></pre>
  
  <p>This starts up the jar file, but it gets the following error about a dozen times on start which don't occur if I start the same file normally:</p>
  
  <pre><code>java.lang.NoClassDefFoundError: net/md_5/bungee/api/plugin/Plugin
      at java.lang.ClassLoader.defineClass1(Native Method)
      at java.lang.ClassLoader.defineClass(Unknown Source)
      at java.security.SecureClassLoader.defineClass(Unknown Source)
      at java.net.URLClassLoader.defineClass(Unknown Source)
      at java.net.URLClassLoader.access$100(Unknown Source)
      at java.net.URLClassLoader$1.run(Unknown Source)
      at java.net.URLClassLoader$1.run(Unknown Source)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.net.URLClassLoader.findClass(Unknown Source)
      at java.lang.ClassLoader.loadClass(Unknown Source)
      at net.md_5.bungee.api.plugin.PluginClassloader.loadClass0(PluginClassloader.java:34)
      at net.md_5.bungee.api.plugin.PluginClassloader.loadClass(PluginClassloader.java:27)
      at java.lang.ClassLoader.loadClass(Unknown Source)
      at net.md_5.bungee.api.plugin.PluginManager.enablePlugin(PluginManager.java:304)
      at net.md_5.bungee.api.plugin.PluginManager.loadPlugins(PluginManager.java:212)
      at net.md_5.bungee.BungeeCord.start(BungeeCord.java:264)
      at net.md_5.bungee.BungeeCordLauncher.main(BungeeCordLauncher.java:55)
      at net.md_5.bungee.Bootstrap.main(Bootstrap.java:15)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      at java.lang.reflect.Method.invoke(Unknown Source)
      at com.moltrespvp.bungeecontrol.BungeeServer$1.run(BungeeServer.java:31)
      at java.lang.Thread.run(Unknown Source)
  Caused by: java.lang.ClassNotFoundException: net.md_5.bungee.api.plugin.Plugin
      at net.md_5.bungee.api.plugin.PluginClassloader.loadClass0(PluginClassloader.java:53)
      at net.md_5.bungee.api.plugin.PluginClassloader.loadClass(PluginClassloader.java:27)
      at java.lang.ClassLoader.loadClass(Unknown Source)
  </code></pre>
  
  <p>If needed, here is the manifest for Bungeecord:</p>
  
  <pre><code>Manifest-Version: 1.0
  Implementation-Version: git:BungeeCord-Bootstrap:1.12-SNAPSHOT:16d2615
   :1233
  Archiver-Version: Plexus Archiver
  Built-By: jenkins
  Created-By: Apache Maven 3.2.5
  Build-Jdk: 1.8.0_121
  Specification-Version: 20170514
  Main-Class: net.md_5.bungee.Bootstrap
  </code></pre>
  
  <p>How can I start this jar file as if I started it with a ProcessBuilder, but be able to access methods from the running instance.</p>
  
  <p>For example, I need to be able to run this for the running instance of BungeeCord <code>ProxyServer.getInstance()</code>?</p>