git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277107 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -31,6 +31,10 @@ import java.net.URL; | |||||
| * can share this datatype, it is *not* thread safe; you can only use it in one | * can share this datatype, it is *not* thread safe; you can only use it in one | ||||
| * thread at at time | * thread at at time | ||||
| * | * | ||||
| * Although it is biased towards HTTP, because the underlying <get> task | |||||
| * supports different protocols, one is actually able to use other protocols | |||||
| * such as ftp: or file: to retrieve content. | |||||
| * | |||||
| * @since Ant1.7 | * @since Ant1.7 | ||||
| */ | */ | ||||
| public abstract class HttpRepository extends Repository { | public abstract class HttpRepository extends Repository { | ||||
| @@ -87,6 +91,21 @@ public abstract class HttpRepository extends Repository { | |||||
| this.url = url; | this.url = url; | ||||
| } | } | ||||
| /** | |||||
| * set the base directory of the repository | |||||
| * This creates a URL of the <tt>file://</tt> type | |||||
| * and binds the URL of the repository to it. | |||||
| * @param basedir | |||||
| */ | |||||
| public void setBaseDir(File basedir) { | |||||
| try { | |||||
| URL url=basedir.toURL(); | |||||
| setUrl(url.toExternalForm()); | |||||
| } catch (MalformedURLException e) { | |||||
| throw new BuildException(e); | |||||
| } | |||||
| } | |||||
| public String getUsername() { | public String getUsername() { | ||||
| return username; | return username; | ||||
| } | } | ||||
| @@ -112,26 +131,7 @@ public abstract class HttpRepository extends Repository { | |||||
| public void setPassword(String password) { | public void setPassword(String password) { | ||||
| this.password = password; | this.password = password; | ||||
| } | } | ||||
| /* | |||||
| public String getRealm() { | |||||
| return realm; | |||||
| } | |||||
| */ | |||||
| /** | |||||
| * set the realm for authentication; empty string is equivalent to "any | |||||
| * realm" (the default) | |||||
| * | |||||
| * @param realm | |||||
| */ | |||||
| /* public void setRealm(String realm) { | |||||
| if (realm != null) { | |||||
| this.realm = realm; | |||||
| } else { | |||||
| this.realm = null; | |||||
| } | |||||
| }*/ | |||||
| public Libraries getOwner() { | public Libraries getOwner() { | ||||
| return owner; | return owner; | ||||
| @@ -78,6 +78,12 @@ public final class Libraries extends Task { | |||||
| */ | */ | ||||
| private boolean useTimestamp = false; | private boolean useTimestamp = false; | ||||
| /** | |||||
| * flag to indicate if the libraries should be stored | |||||
| * flat or in maven-style ($(project)/jars/) subdirectories. | |||||
| */ | |||||
| private boolean flatten = false; | |||||
| public static final String ERROR_ONE_REPOSITORY_ONLY = "Only one repository is allowed"; | public static final String ERROR_ONE_REPOSITORY_ONLY = "Only one repository is allowed"; | ||||
| public static final String ERROR_NO_DEST_DIR = "No destination directory"; | public static final String ERROR_NO_DEST_DIR = "No destination directory"; | ||||
| public static final String ERROR_NO_REPOSITORY = "No repository defined"; | public static final String ERROR_NO_REPOSITORY = "No repository defined"; | ||||
| @@ -290,6 +296,21 @@ public final class Libraries extends Task { | |||||
| this.useTimestamp = useTimestamp; | this.useTimestamp = useTimestamp; | ||||
| } | } | ||||
| public boolean isFlatten() { | |||||
| return flatten; | |||||
| } | |||||
| /** | |||||
| * Flatten flag. | |||||
| * Store downloaded libraries into a single directory if true, | |||||
| * store in project/jar subdirectores if false. | |||||
| * default: false | |||||
| * @param flatten | |||||
| */ | |||||
| public void setFlatten(boolean flatten) { | |||||
| this.flatten = flatten; | |||||
| } | |||||
| /** | /** | ||||
| * get the current policy list | * get the current policy list | ||||
| * @return | * @return | ||||
| @@ -326,11 +347,8 @@ public final class Libraries extends Task { | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| validate(); | validate(); | ||||
| if (isOffline()) { | |||||
| log("No retrieval, task is \"offline\""); | |||||
| } else { | |||||
| doExecute(); | |||||
| } | |||||
| //execute | |||||
| doExecute(); | |||||
| //validate the state | //validate the state | ||||
| verifyAllLibrariesPresent(); | verifyAllLibrariesPresent(); | ||||
| @@ -378,6 +396,11 @@ public final class Libraries extends Task { | |||||
| } | } | ||||
| } | } | ||||
| if (isOffline()) { | |||||
| log("No retrieval, task is \"offline\""); | |||||
| retrieve=false; | |||||
| } | |||||
| //see if we need to do a download | //see if we need to do a download | ||||
| if (!retrieve) { | if (!retrieve) { | ||||
| //if not, log it | //if not, log it | ||||
| @@ -393,7 +416,7 @@ public final class Libraries extends Task { | |||||
| } | } | ||||
| } | } | ||||
| //now reverse iterate through all processed properties. | |||||
| //now reverse iterate through all processed policies. | |||||
| for (int i = processedPolicies.size() - 1; i >= 0; i--) { | for (int i = processedPolicies.size() - 1; i >= 0; i--) { | ||||
| LibraryPolicy libraryPolicy = (LibraryPolicy) processedPolicies.get(i); | LibraryPolicy libraryPolicy = (LibraryPolicy) processedPolicies.get(i); | ||||
| //and call their post-processor | //and call their post-processor | ||||
| @@ -408,7 +431,7 @@ public final class Libraries extends Task { | |||||
| * @return number of failed retrievals. | * @return number of failed retrievals. | ||||
| */ | */ | ||||
| private int connectAndRetrieve(Repository repo, boolean useTimestamp) { | private int connectAndRetrieve(Repository repo, boolean useTimestamp) { | ||||
| //connect the repository | |||||
| //connect to the repository | |||||
| int failures = 0; | int failures = 0; | ||||
| repo.connect(this); | repo.connect(this); | ||||
| try { | try { | ||||
| @@ -470,7 +493,7 @@ public final class Libraries extends Task { | |||||
| Iterator it = libraries.iterator(); | Iterator it = libraries.iterator(); | ||||
| while (it.hasNext()) { | while (it.hasNext()) { | ||||
| Library library = (Library) it.next(); | Library library = (Library) it.next(); | ||||
| library.bind(destDir); | |||||
| library.bind(destDir, flatten); | |||||
| } | } | ||||
| } | } | ||||
| @@ -35,6 +35,8 @@ public class Library implements EnabledLibraryElement { | |||||
| */ | */ | ||||
| private boolean enabled = true; | private boolean enabled = true; | ||||
| private static FileUtils FILE_UTILS = FileUtils.newFileUtils(); | |||||
| /** | /** | ||||
| * turn policy on/off | * turn policy on/off | ||||
| * | * | ||||
| @@ -241,18 +243,21 @@ public class Library implements EnabledLibraryElement { | |||||
| * calculate the destination file of a library; set {@link #libraryFile} | * calculate the destination file of a library; set {@link #libraryFile} | ||||
| * to the File thereof. | * to the File thereof. | ||||
| * | * | ||||
| * @param baseDir dir that | |||||
| * @param baseDir dir that is used as the base for the operations | |||||
| * | * | ||||
| * @param flatten flag to indicate whether the directory path is 'flat' or not. | |||||
| * @throws BuildException if invalid | * @throws BuildException if invalid | ||||
| */ | */ | ||||
| public void bind(File baseDir) { | |||||
| public void bind(File baseDir, boolean flatten) { | |||||
| validate(); | validate(); | ||||
| FileUtils fileUtils = FileUtils.newFileUtils(); | |||||
| if (destinationName == null) { | if (destinationName == null) { | ||||
| destinationName = getMavenPath('/'); | |||||
| if(flatten) { | |||||
| destinationName = getNormalFilename(); | |||||
| } else { | |||||
| destinationName = getMavenPath('/'); | |||||
| } | |||||
| } | } | ||||
| libraryFile = fileUtils.resolveFile(baseDir, destinationName); | |||||
| libraryFile = FILE_UTILS.resolveFile(baseDir, destinationName); | |||||
| if (libraryFile.isDirectory()) { | if (libraryFile.isDirectory()) { | ||||
| throw new BuildException(ERROR_FILE_IS_A_DIR | throw new BuildException(ERROR_FILE_IS_A_DIR | ||||
| + libraryFile); | + libraryFile); | ||||
| @@ -56,6 +56,7 @@ public class MavenRepository extends HttpRepository { | |||||
| setUrl(MAVEN_URL); | setUrl(MAVEN_URL); | ||||
| } | } | ||||
| /** | /** | ||||
| * set this to check the MD5 signatures. SECURITY IS NOT YET FUNCTIONAL | * set this to check the MD5 signatures. SECURITY IS NOT YET FUNCTIONAL | ||||
| * @param checkMD5 | * @param checkMD5 | ||||
| @@ -204,4 +204,7 @@ public class LibrariesTest extends BuildFileTest { | |||||
| execIfOnline("testNoSuffix"); | execIfOnline("testNoSuffix"); | ||||
| } | } | ||||
| public void testFlatten() { | |||||
| execIfOnline("testFlatten"); | |||||
| } | |||||
| } | } | ||||