src/main/java/net/matrix/app/repository/ResourceRepository.java
public Resource getResource(final ResourceSelection selection) {
		if (LOG.isTraceEnabled()) {
			LOG.trace("定位资源：{}", selection);
		}
		String catalog = selection.getCatalog();
		String version = selection.getVersion();
		String name = selection.getName();

		String path = catalog;
		if (StringUtils.isNotBlank(version)) {
			path = path + '/' + version;
		}
		while (true) {
			try {
				Resource resource = root.createRelative(path + '/' + name);
				if (resource.exists()) {
					if (LOG.isTraceEnabled()) {
						LOG.trace("定位资源到：{}", resource);
					}
					return resource;
				}
			} catch (IOException e) {
				LOG.warn(root.toString() + '/' + path + '/' + name + " 解析失败", e);
				return null;
			}
			if (path.length() <= catalog.length()) {
				break;
			}
			path = path.substring(0, path.lastIndexOf('/'));
		}
		if (LOG.isDebugEnabled()) {
			LOG.debug("未找到资源：{}", selection);
		}
		return null;
	}
public Resource getResource(final ResourceSelection selection) {
		if (LOG.isTraceEnabled()) {
			LOG.trace("定位资源：{}", selection);
		}
		String catalog = selection.getCatalog();
		String version = selection.getVersion();
		String name = selection.getName();

		String path = catalog;
		if (StringUtils.isNotBlank(version)) {
			path = path + '/' + version;
		}
		while (true) {
			try {
				Resource resource = root.createRelative(path + '/' + name);
				if (resource.exists()) {
					if (LOG.isTraceEnabled()) {
						LOG.trace("定位资源到：{}", resource);
					}
					return resource;
				}
			} catch (IOException e) {
				LOG.warn(root.toString() + '/' + path + '/' + name + " 解析失败", e);
				return null;
			}
			if (path.length() <= catalog.length()) {
				break;
			}
			path = path.substring(0, path.lastIndexOf('/'));
		}
		if (LOG.isDebugEnabled()) {
			LOG.debug("未找到资源：{}", selection);
		}
		return null;
	}
定位资源。

@param selection
资源仓库选择
@return 资源