/** * Returns a set of properties for the project. The precedence is: quokka.properties * quokka.properties of inherited projects plugin.properties No expansion or ordering of * properties is done */ public AnnotatedProperties getProperties() { AnnotatedProperties resolvedProperties = new AnnotatedProperties(); // Add the global defaults resolvedProperties.put("quokka.project.targetDir", "${basedir}/target"); resolvedProperties.put("quokka.project.sourceDir", "${basedir}/src"); resolvedProperties.put("quokka.project.resourcesDir", "${basedir}/resources"); // Add artifact related properties if (project.getArtifacts().size() > 0) { // Add properties common to all (group & version) RepoArtifactId artifactId = ((Artifact) getProject().getArtifacts().iterator().next()).getId(); resolvedProperties.put("quokka.project.artifact.group", artifactId.getGroup()); resolvedProperties.put("quokka.project.artifact.version", artifactId.getVersion().toString()); // Build up a list of names by type Map namesByType = new HashMap(); for (Iterator i = project.getArtifacts().iterator(); i.hasNext(); ) { Artifact artifact = (Artifact) i.next(); artifactId = artifact.getId(); List names = (List) namesByType.get(artifactId.getType()); if (names == null) { names = new ArrayList(); namesByType.put(artifactId.getType(), names); } names.add(artifactId.getName()); } // Output the names for (Iterator i = namesByType.entrySet().iterator(); i.hasNext(); ) { Map.Entry entry = (Map.Entry) i.next(); List names = (List) entry.getValue(); resolvedProperties.put( "quokka.project.artifact.name[" + entry.getKey() + "]", Strings.join(names.iterator(), ",")); } } // Put the plugin properties in first. Order is not important as plugin properties should be // unique to their plugin for (Iterator i = resolvedTargets.values().iterator(); i.hasNext(); ) { Target target = (Target) i.next(); AnnotatedProperties targetProperties = target.getDefaultProperties(); resolvedProperties.putAll( applyProfiles(targetProperties, project.getActiveProfiles().getElements())); } // Put in any properties defined in dependency sets (processed in reverse to ensure high levels // override low levels) resolveProperties(resolvedProperties, project.getDependencySet()); resolvedProperties.putAll( applyProfiles(project.getProperties(), project.getActiveProfiles().getElements())); // Put the project paths as properties for (Iterator i = resolvedPaths.entrySet().iterator(); i.hasNext(); ) { Map.Entry entry = (Map.Entry) i.next(); resolvedProperties.put( "quokka.project.path." + entry.getKey(), toAntPath(getProjectPath((String) entry.getKey(), false, true)).toString()); } return resolvedProperties; }
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); } } }