package aQute.bnd.ant; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; import org.apache.tools.ant.BuildException; import aQute.bnd.osgi.eclipse.EclipseClasspath; public class EclipseTask extends BaseTask { private String prefix = "project."; private List<File> prebuild = new ArrayList<File>(); private File workspaceLocation; private String separator = ","; private File projectLocation; @Override public void execute() throws BuildException { try { if (projectLocation == null) projectLocation = getProject().getBaseDir(); if (workspaceLocation == null) workspaceLocation = projectLocation.getParentFile(); EclipseClasspath eclipse = new EclipseClasspath(this, workspaceLocation, projectLocation); if (report()) throw new BuildException("Errors during Eclipse Path inspection"); addProperty(prefix + "classpath", join(eclipse.getClasspath(), separator)); addProperty(prefix + "bootclasspath", join(eclipse.getBootclasspath(), separator)); if (!eclipse.getSourcepath().isEmpty()) addProperty(prefix + "sourcepath", join(eclipse.getSourcepath(), separator)); addProperty(prefix + "output", eclipse.getOutput().getAbsolutePath()); /** * The prebuild is an attribute that is prepended to the dependency * path derived from the Eclipse project */ List<File> dependents = new ArrayList<File>(); addCareful(dependents, prebuild); addCareful(dependents, eclipse.getDependents()); if (dependents.size() > 0) { addProperty(prefix + "buildpath", join(dependents, separator)); } } catch (Exception e) { throw new BuildException("Error during parsing Eclipse .classpath files", e); } } private void addCareful(List<File> result, Collection<File> projects) { for (Iterator<File> i = projects.iterator(); i.hasNext();) { File d = i.next(); if (!result.contains(d)) result.add(d); } } protected void addProperty(String n, String v) { if (v != null) getProject().setProperty(n, v); } public void setPrefix(String prefix) { this.prefix = prefix; } public void setPrebuild(String prebuild) { StringTokenizer st = new StringTokenizer(prebuild, " ,"); while (st.hasMoreTokens()) { this.prebuild.add(getFile(getProject().getBaseDir().getParentFile(), st.nextToken())); } } public void setSeparator(String separator) { this.separator = separator; } public void setProjectLocation(File projectLocation) { this.projectLocation = projectLocation; } public void setWorkspaceLocation(File workspaceLocation) { this.workspaceLocation = workspaceLocation; } }