protected void downloadEagerResources() {

      synchronized (this) {
         if (eager_resources_started_flag) return;
      }

      //update the flag
      synchronized (this) {
         eager_resources_started_flag = true;
      }

      List<CacheResource> eagerResources = new ArrayList<CacheResource>();
      for (ClassPathEntry entry : classPath) {

         //check os of classpath Entry
         //skip this jar if it is not for this OS
         if (entry.getOs() != null && !entry.getOs().equals(NativeLibDesc.currentOS())) {
            logger.info("skipping non-os classpath entry: " + entry.getResourceURL());
            continue;
         }

         if (entry.getDownloadType() == ClassPathEntry.EAGER && (entry.isJar() || entry.isZip())) {
            eagerEntries.put(entry.getResourceURL(), entry);
            eagerResources.add(new CacheResource(entry.getResourceURL(), entry.getCachePolicy()));
         } else {
            lazyEntries.put(entry.getResourceURL(), entry);
         }
      }

      //Download the resources
      CacheManager cm = Boot.getCacheManager();
      cm.downloadResources(this.getExecutableDesc(), eagerResources, cm.getDefaultListener(), true);

      //Update downloaded status and initialize the jars
      Collection<ClassPathEntry> entries = eagerEntries.values();
      for (ClassPathEntry entry : entries) {
         entry.downloaded_flag = true;
         entry.initializeJar();
      }

      unPackNatives();
   }