public void initialise() { pathResolver = new Resolver(repository, log); // Add ant-types path project .getDependencySet() .addPath( new Path( "ant-types", "Dependencies added to this path are available to ant optional tasks.")); // Get dependency sets, applying profiles and overrides List sets = depthFirst(project.getDependencySet()); // O pass: aggregate overrides for (Iterator i = sets.iterator(); i.hasNext(); ) { DependencySet set = (DependencySet) i.next(); overrides.addAll(set.getOverrides()); } // 1st pass: Define targets, paths, imported URLs Map targets = new HashMap(); for (Iterator i = sets.iterator(); i.hasNext(); ) { DependencySet set = (DependencySet) i.next(); // Get targets for (Iterator j = set.getDependencies().iterator(); j.hasNext(); ) { Dependency dependency = (Dependency) j.next(); if (dependency instanceof PluginDependency) { resolveTargets(targets, (PluginDependency) dependency); } } // Get paths for (Iterator j = set.getPaths().values().iterator(); j.hasNext(); ) { addPath((Path) j.next()); } if (set.getImportURL() != null) { resolvedImports.add(set.getImportURL()); } // Find the unique names for all declared artifacts Set uniqueNames = new HashSet(); for (Iterator j = project.getArtifacts().iterator(); j.hasNext(); ) { Artifact artifact = (Artifact) j.next(); uniqueNames.add(artifact.getId().getName()); } // Create artifacts for any licenses referenced by files for (Iterator j = set.getLicenses().iterator(); j.hasNext(); ) { License license = (License) j.next(); if (license.getFile() != null) { Assert.isTrue( project.getArtifacts().size() != 0, license.getLocator(), "There are no artifacts defined for a license to be applied to."); Artifact artifact = (Artifact) project.getArtifacts().iterator().next(); RepoArtifactId id = artifact.getId(); // If no name is specified, default it to name of the artifact if it is unique, // otherwise use the default from the group String name = license.getId().getName(); String defaultName = RepoArtifactId.defaultName(id.getGroup()); if (name == null) { if (uniqueNames.size() == 1) { name = (String) uniqueNames.iterator().next(); } else { name = defaultName; } } Artifact licenseArtifact = new Artifact(id.getGroup(), name, "license", id.getVersion()); licenseArtifact.setDescription( "License for " + id.getGroup() + (name.equals(defaultName) ? "" : (":" + name))); project.addArtifact(licenseArtifact); license.setId(licenseArtifact.getId()); } } } // 2nd pass: Define default paths specs, add imported targets for (Iterator i = sets.iterator(); i.hasNext(); ) { DependencySet set = (DependencySet) i.next(); // Fill in path spec defaults now that the project paths have been defined addPathSpecDefaults(set); } // 3rd pass: Reverse order for build resources List reverse = new ArrayList(sets); Collections.reverse(reverse); for (Iterator i = reverse.iterator(); i.hasNext(); ) { DependencySet set = (DependencySet) i.next(); buildResources.putAll(set.getBuildResources()); // Parent overrides children } resolvedTargets = targets; corePath = resolveCorePath(); if ("true".equals(antProject.getProperty("quokka.project.overrideCore"))) { coreOverrides = getCoreOverrides(); } }
private void addTarget(Map resolved, Target target) { // System.out.println("Adding " + target.getName() + " from " + parents); if (target.getPrefix() != null) { target.setDefaultProperties(expandPrefix(target.getPrefix(), target.getDefaultProperties())); } Target existing = (Target) resolved.get(target.getName()); if (existing != null) { RepoArtifactId targetId = target.getPlugin().getArtifact().getId(); RepoArtifactId existingId = existing.getPlugin().getArtifact().getId(); Assert.isTrue( targetId.equals(existingId), target.getLocator(), "Multiple targets are defined with the name '" + target.getName() + "'. Declared in " + targetId + " and " + existingId); return; } resolved.put(target.getName(), target); registerTypes(target); registerProjectPaths(target); buildResources.putAll(target.getPlugin().getBuildResources()); // PluginDependency declares the target addDependentTargets(resolved, target); if (target.getImplementsPlugin() != null) { // PluginDependency implements the target declared in another plugin String[] implementsPlugin = parseImplements(target); RepoArtifactId declaringPluginId = fastFindMatchingDependency( target, new RepoArtifactId( implementsPlugin[0], implementsPlugin[1], "plugin", (Version) null)); Plugin declaringPlugin = getPluginInstance(declaringPluginId); String declaringTargetName = declaringPlugin.getNameSpace() + ":" + implementsPlugin[2]; // Get the declaring plugin and find the matching target Target declaringTarget = (Target) resolved.get(declaringTargetName); if (declaringTarget == null) { declaringTarget = declaringPlugin.getTarget(declaringTargetName); Assert.isTrue( declaringTarget != null, target.getLocator(), "'" + declaringTargetName + "' is not defined in '" + declaringPluginId.toShortString() + "'"); addTarget(resolved, declaringTarget); } Assert.isTrue( declaringTarget.isAbstract(), target.getLocator(), "Target is attempting to implement a non-abstract target: target=" + target.getName() + ", implements=" + declaringTarget.getName()); target.getPlugin().setDeclaringPlugin(declaringTarget.getPlugin()); if (!declaringTarget.isImplemented()) { declaringTarget.setImplemented(true); declaringTarget.clearDependencies(); } declaringTarget.addDependency(target.getName()); // Add the declaring targets dependencies to ensure the implementation is executed before them for (Iterator i = declaringTarget.getOriginalDependencies().iterator(); i.hasNext(); ) { String dependency = (String) i.next(); target.addDependency(dependency); } } }