ivymanager.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 241 行

JAVA
241
字号
/* * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * *   Free Software Foundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Scott Ferguson */package com.caucho.loader.ivy;import java.util.*;import java.util.logging.*;import com.caucho.config.*;import com.caucho.vfs.*;/** * Class loader which uses an ivy dependency */public class IvyManager {  private static final Logger log    = Logger.getLogger(IvyManager.class.getName());    private static final String SCHEMA = "com/caucho/loader/ivy/ivy.rnc";  private ArrayList<IvyCache> _cacheList = new ArrayList<IvyCache>();    private Path _ivyFile;  private HashMap<IvyModuleKey,String[]> _versionMap    = new HashMap<IvyModuleKey,String[]>();  private ArrayList<IvyModule> _moduleList = new ArrayList<IvyModule>();    private ArrayList<IvyDependency> _dependencyList    = new ArrayList<IvyDependency>();  private boolean _isModified;    private ArrayList<Path> _jarList = new ArrayList<Path>();  public IvyManager()  {  }  public IvyCache createCache()  {    IvyCache cache = new IvyCache(this);        _cacheList.add(cache);    return cache;  }  void init()  {    if (_cacheList.size() == 0) {      IvyCache cache = new IvyCache(this);      cache.init();            _cacheList.add(cache);    }  }  public void setIvyFile(Path ivyFile)  {    _ivyFile = ivyFile;  }  public IvyModule configureIvyFile(Path ivyFile)  {    IvyModule module = findIvyModule(ivyFile);    if (module != null)      return module;    module = new IvyModule(this);    module.setIvyPath(ivyFile);    Config config = new Config();    config.configure(module, ivyFile, SCHEMA);    _moduleList.add(module);    _isModified = true;    return module;  }  public IvyModule findIvyModule(Path ivyFile)  {    for (IvyModule module : _moduleList) {      if (ivyFile.equals(module.getIvyPath()))	return module;    }    return null;  }  public ArrayList<Path> resolve()  {    while (_isModified) {      _isModified = false;            ArrayList<IvyModule> list = new ArrayList<IvyModule>(_moduleList);          for (IvyModule module : list) {	for (IvyDependency depend : module.getDependencyList()) {	  resolve(depend);	}      }      ArrayList<IvyDependency> depList	= new ArrayList<IvyDependency>(_dependencyList);      for (IvyDependency dependency : depList) {	for (IvyCache cache : _cacheList) {	  Path path = dependency.resolve(cache);	  if (path != null && path.canRead()) {	    addJar(path);	    break;	  }	}      }    }    return _jarList;  }  void resolve(IvyDependency dependency)  {    dependency = mergeDependency(dependency);        Path path = null;    for (IvyCache cache : _cacheList) {      cache.resolveIvy(dependency);    }  }  private IvyDependency mergeDependency(IvyDependency dependency)  {    for (int i = 0; i < _dependencyList.size(); i++) {      IvyDependency dep = _dependencyList.get(i);      IvyDependency merge = dep.merge(dependency);      if (merge != null) {	_dependencyList.set(i, merge);	return merge;      }    }    IvyModuleKey key = new IvyModuleKey(dependency.getOrg(),					dependency.getName());    String []versions = getVersions(dependency);    dependency.setVersions(versions);        _isModified = true;    _dependencyList.add(dependency);    return dependency;  }  private String []getVersions(IvyDependency dependency)  {    ArrayList<String> versions = new ArrayList<String>();    for (IvyCache cache : _cacheList) {      cache.resolveVersions(versions, dependency);    }    String []versionArray = new String[versions.size()];    versions.toArray(versionArray);        return versionArray;  }  void addJar(Path path)  {    if (! _jarList.contains(path)) {      _jarList.add(path);    }  }    public String toString()  {    return getClass().getSimpleName() + "[]";  }  static class IvyModuleKey {    private String _org;    private String _name;    IvyModuleKey(String org, String name)    {      _org = org;      _name = name;    }    public int hashCode()    {      return _org.hashCode() * 6551 + _name.hashCode();    }    public boolean equals(Object o)    {      if (this == o)	return true;      else if (! (o instanceof IvyModuleKey))	return false;      IvyModuleKey key = (IvyModuleKey) o;      return _org.equals(key._org) && _name.equals(key._name);    }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?