Пример #1
0
    private void parseIvyDescriptorFiles(
        BuildListener listener, PrintStream logger, EnvVars envVars)
        throws IOException, InterruptedException {
      logger.println("Parsing Ivy Descriptor Files");

      List<IvyModuleInfo> ivyDescriptors;
      try {
        IvyXmlParser parser =
            new IvyXmlParser(listener, project, settings, getModuleRoot().getRemote());
        if (getModuleRoot().getChannel() instanceof Channel)
          ((Channel) getModuleRoot().getChannel()).preloadJar(parser, Ivy.class);
        ivyDescriptors = getModuleRoot().act(parser);
      } catch (IOException e) {
        if (e.getCause() instanceof AbortException) throw (AbortException) e.getCause();
        throw e;
      } catch (Throwable e) {
        throw new IOException("Unable to parse ivy descriptors", e);
      }

      // update the module list
      Map<ModuleName, IvyModule> modules = project.modules;
      synchronized (modules) {
        Map<ModuleName, IvyModule> old = new HashMap<ModuleName, IvyModule>(modules);
        List<IvyModule> sortedModules = new ArrayList<IvyModule>();

        modules.clear();
        for (IvyModuleInfo ivyDescriptor : ivyDescriptors) {
          IvyModule mm = old.get(ivyDescriptor.name);
          if (mm != null) { // found an existing matching module
            if (debug) logger.println("Reconfiguring " + mm);
            mm.reconfigure(ivyDescriptor);
            modules.put(ivyDescriptor.name, mm);
          } else { // this looks like a new module
            logger.println(
                Messages.IvyModuleSetBuild_DiscoveredModule(
                    ivyDescriptor.name, ivyDescriptor.displayName));
            mm = new IvyModule(project, ivyDescriptor, getNumber());
            modules.put(mm.getModuleName(), mm);
          }
          sortedModules.add(mm);
          mm.save();
        }

        // at this point the list contains all the live modules
        project.sortedActiveModules = sortedModules;

        // remaining modules are no longer active.
        old.keySet().removeAll(modules.keySet());
        for (IvyModule om : old.values()) {
          if (debug) logger.println("Disabling " + om);
          om.makeDisabled(true);
        }
        modules.putAll(old);
      }

      // we might have added new modules
      Hudson.getInstance().rebuildDependencyGraph();

      // module builds must start with this build's number
      for (IvyModule m : modules.values()) m.updateNextBuildNumber(getNumber());
    }