diff options
Diffstat (limited to 'anttasks/src/com/android/ant/ComputeProjectClasspathTask.java')
-rw-r--r-- | anttasks/src/com/android/ant/ComputeProjectClasspathTask.java | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/anttasks/src/com/android/ant/ComputeProjectClasspathTask.java b/anttasks/src/com/android/ant/ComputeProjectClasspathTask.java new file mode 100644 index 0000000..4a89ec2 --- /dev/null +++ b/anttasks/src/com/android/ant/ComputeProjectClasspathTask.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ant; + +import com.android.ant.DependencyHelper.LibraryProcessorFor3rdPartyJars; +import com.android.sdklib.SdkConstants; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.Path.PathElement; + +import java.io.File; +import java.util.List; + +public class ComputeProjectClasspathTask extends Task { + + private String mProjectLocation; + private String mProjectClassPathOut; + + public void setProjectLocation(String projectLocation) { + mProjectLocation = projectLocation; + } + + public void setProjectClassPathOut(String projectClassPathOut) { + mProjectClassPathOut = projectClassPathOut; + } + + @Override + public void execute() throws BuildException { + if (mProjectLocation == null) { + throw new BuildException("Missing attribute projectLocation"); + } + if (mProjectClassPathOut == null) { + throw new BuildException("Missing attribute projectClassPathOut"); + } + + DependencyHelper helper = new DependencyHelper(new File(mProjectLocation), + false /*verbose*/); + + LibraryProcessorFor3rdPartyJars processor = new LibraryProcessorFor3rdPartyJars(); + + helper.processLibraries(processor); + List<File> jars = processor.getJars(); + + // add the project's own content of libs/*.jar + File libsFolder = new File(mProjectLocation, SdkConstants.FD_NATIVE_LIBS); + File[] jarFiles = libsFolder.listFiles(processor.getFilter()); + if (jarFiles != null) { + for (File jarFile : jarFiles) { + jars.add(jarFile); + } + } + + jars = helper.sanitizePaths(jars); + + Project antProject = getProject(); + + System.out.println("Resolved classpath:"); + + // create a path with all the jars and the project's output as well. + Path path = new Path(antProject); + for (File jar : jars) { + PathElement element = path.createPathElement(); + String p = jar.getAbsolutePath(); + element.setPath(p); + System.out.println(p); + } + + File bin = new File(mProjectLocation, + helper.getOutDir() + File.separator + "classes"); + PathElement element = path.createPathElement(); + String p = bin.getAbsolutePath(); + element.setPath(p); + System.out.println(p); + + antProject.addReference(mProjectClassPathOut, path); + } +} |