private ChainResolver createOuterChain( ChainResolver userResolverChain, ClientModuleResolver clientModuleResolver) { ChainResolver clientModuleChain = new ChainResolver(); clientModuleChain.setName(CLIENT_MODULE_CHAIN_NAME); clientModuleChain.setReturnFirst(true); clientModuleChain.add(clientModuleResolver); clientModuleChain.add(userResolverChain); return clientModuleChain; }
private static GrailsRepoResolver findCentralRepoResolver(ChainResolver chainResolver) { final List resolvers = chainResolver.getResolvers(); for (Object resolver : resolvers) { if (resolver instanceof GrailsRepoResolver) { final GrailsRepoResolver grailsRepoResolver = (GrailsRepoResolver) resolver; final String resolverName = grailsRepoResolver.getName(); if (resolverName != null && resolverName.equals("grailsCentral")) { return grailsRepoResolver; } } } return null; }
private ChainResolver createUserResolverChain( List<DependencyResolver> classpathResolvers, RepositoryResolver buildResolver) { ChainResolver chainResolver = new ChainResolver(); chainResolver.setName(CHAIN_RESOLVER_NAME); chainResolver.add(buildResolver); // todo Figure out why Ivy thinks this is necessary. The IBiblio resolver has already this // pattern which should be good enough. By doing this we let Maven semantics seep into our whole // system. chainResolver.setChangingPattern(".*-SNAPSHOT"); chainResolver.setChangingMatcher(PatternMatcher.REGEXP); chainResolver.setReturnFirst(true); for (Object classpathResolver : classpathResolvers) { chainResolver.add((DependencyResolver) classpathResolver); } return chainResolver; }
DependencyResolver parseRepository(Map repoDescriptor, List<Map<String, String>> modules) throws Oops { String repName = ((Map) repoDescriptor).keySet().iterator().next().toString().trim(); Map options = (Map) ((Map) repoDescriptor).values().iterator().next(); String type = get(options, "type", String.class); if (type == null) { throw new Oops("Repository type need to be specified -> " + repName + ": " + options); } DependencyResolver resolver = null; if (type.equalsIgnoreCase("iBiblio")) { IBiblioResolver iBiblioResolver = new IBiblioResolver(); iBiblioResolver.setName(repName); if (options.containsKey("root")) { iBiblioResolver.setRoot(get(options, "root", String.class)); } iBiblioResolver.setM2compatible(get(options, "m2compatible", boolean.class, true)); iBiblioResolver.getRepository().addTransferListener(logger); resolver = iBiblioResolver; } if (type.equalsIgnoreCase("local")) { FileSystemResolver fileSystemResolver = new FileSystemResolver(); fileSystemResolver.setName(repName); fileSystemResolver.setLocal(true); if (get(options, "descriptor", String.class) != null) { fileSystemResolver.addIvyPattern(get(options, "descriptor", String.class)); } if (get(options, "artifact", String.class) != null) { fileSystemResolver.addArtifactPattern(get(options, "artifact", String.class)); } resolver = fileSystemResolver; } if (type.equalsIgnoreCase("http")) { URLResolver urlResolver = new URLResolver(); urlResolver.setName(repName); if (get(options, "descriptor", String.class) != null) { urlResolver.addIvyPattern(get(options, "descriptor", String.class)); } if (get(options, "artifact", String.class) != null) { urlResolver.addArtifactPattern(get(options, "artifact", String.class)); } urlResolver.getRepository().addTransferListener(logger); resolver = urlResolver; } if (type.equalsIgnoreCase("chain")) { ChainResolver chainResolver = new ChainResolver(); chainResolver.setName(repName); chainResolver.setReturnFirst(true); for (Object o : get(options, "using", List.class, new ArrayList())) { chainResolver.add(parseRepository((Map) o, modules)); } resolver = chainResolver; } if (resolver == null) { throw new Oops("Unknown repository type -> " + type); } List contains = get(options, "contains", List.class); if (contains != null) { for (Object o : contains) { String v = o.toString().trim(); String module = null; String organisation = null; String revision = null; Matcher m = Pattern.compile("([^\\s]+)\\s*[-][>]\\s*([^\\s]+)\\s+([^\\s]+)").matcher(v); if (m.matches()) { organisation = m.group(1); module = m.group(2); revision = m.group(3).replace("$version", System.getProperty("play.version")); } else { m = Pattern.compile("(([^\\s]+))\\s+([^\\s]+)").matcher(v); if (m.matches()) { organisation = m.group(1); module = m.group(2); revision = m.group(3).replace("$version", System.getProperty("play.version")); } else { m = Pattern.compile("([^\\s]+)\\s*[-][>]\\s*([^\\s]+)").matcher(v); if (m.matches()) { organisation = m.group(1); module = m.group(2); } else { m = Pattern.compile("([^\\s]+)").matcher(v); if (m.matches()) { organisation = m.group(1); } else { throw new Oops("Unknown depedency format -> " + o); } } } } Map<String, String> attributes = new HashMap<String, String>(); attributes.put("organisation", organisation); if (module != null) { attributes.put("module", module); } if (revision != null) { attributes.put("revision", revision); } attributes.put("resolver", repName); modules.add(attributes); } } return resolver; }