called antfile - build.xml: read ~/.ant.properties if exist, it will allow override of local properties ( you don't have to type -Dfoo=bar each time you run ant ) - changed dist.dir to ant.dist.dir ( to allow users to set the destinations per project in ant.properties ) git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@267612 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -20,13 +20,17 @@ | |||||
| <property name="build.dir" value="build"/> | <property name="build.dir" value="build"/> | ||||
| <property name="build.classes" value="build/classes"/> | <property name="build.classes" value="build/classes"/> | ||||
| <property name="build.javadocs" value="build/javadocs"/> | <property name="build.javadocs" value="build/javadocs"/> | ||||
| <property name="dist.dir" value="dist"/> | |||||
| <property name="ant.dist.dir" value="dist"/> | |||||
| <property name="classpath" value="lib/xml.jar"/> | <property name="classpath" value="lib/xml.jar"/> | ||||
| <property name="packages" value="org.apache.tools.*"/> | <property name="packages" value="org.apache.tools.*"/> | ||||
| <property name="manifest" value="src/etc/manifest"/> | <property name="manifest" value="src/etc/manifest"/> | ||||
| <property name="build.compiler" value="classic"/> | <property name="build.compiler" value="classic"/> | ||||
| <!-- Give user a chance to override without editing this file | |||||
| (and without typing -D each time it compiles it --> | |||||
| <property file="${user.home}/.ant.properties" /> | |||||
| </target> | </target> | ||||
| <!-- =================================================================== --> | <!-- =================================================================== --> | ||||
| @@ -93,41 +97,41 @@ | |||||
| <!-- Creates the distribution --> | <!-- Creates the distribution --> | ||||
| <!-- =================================================================== --> | <!-- =================================================================== --> | ||||
| <target name="dist" depends="jar,javadocs"> | <target name="dist" depends="jar,javadocs"> | ||||
| <mkdir dir="${dist.dir}"/> | |||||
| <mkdir dir="${dist.dir}/bin"/> | |||||
| <mkdir dir="${dist.dir}/lib"/> | |||||
| <mkdir dir="${dist.dir}/docs"/> | |||||
| <mkdir dir="${dist.dir}/docs/api"/> | |||||
| <mkdir dir="${dist.dir}/src"/> | |||||
| <copydir src="${src.dir}" dest="${dist.dir}/src"/> | |||||
| <copydir src="${lib.dir}" dest="${dist.dir}/lib"/> | |||||
| <copyfile src="build.xml" dest="${dist.dir}/lib/build.xml"/> | |||||
| <copydir src="src/bin" dest="${dist.dir}/bin"/> | |||||
| <copydir src="${docs.dir}" dest="${dist.dir}/docs"/> | |||||
| <copydir src="${build.javadocs}" dest="${dist.dir}/docs/api"/> | |||||
| <chmod perm="+x" src="${dist.dir}/bin/ant"/> | |||||
| <chmod perm="+x" src="${dist.dir}/bin/antRun"/> | |||||
| <copyfile src="README" dest="${dist.dir}/README"/> | |||||
| <copyfile src="TODO" dest="${dist.dir}/TODO"/> | |||||
| <copyfile src="LICENSE" dest="${dist.dir}/LICENSE"/> | |||||
| <mkdir dir="${ant.dist.dir}"/> | |||||
| <mkdir dir="${ant.dist.dir}/bin"/> | |||||
| <mkdir dir="${ant.dist.dir}/lib"/> | |||||
| <mkdir dir="${ant.dist.dir}/docs"/> | |||||
| <mkdir dir="${ant.dist.dir}/docs/api"/> | |||||
| <mkdir dir="${ant.dist.dir}/src"/> | |||||
| <copydir src="${src.dir}" dest="${ant.dist.dir}/src"/> | |||||
| <copydir src="${lib.dir}" dest="${ant.dist.dir}/lib"/> | |||||
| <copyfile src="build.xml" dest="${ant.dist.dir}/lib/build.xml"/> | |||||
| <copydir src="src/bin" dest="${ant.dist.dir}/bin"/> | |||||
| <copydir src="${docs.dir}" dest="${ant.dist.dir}/docs"/> | |||||
| <copydir src="${build.javadocs}" dest="${ant.dist.dir}/docs/api"/> | |||||
| <chmod perm="+x" src="${ant.dist.dir}/bin/ant"/> | |||||
| <chmod perm="+x" src="${ant.dist.dir}/bin/antRun"/> | |||||
| <copyfile src="README" dest="${ant.dist.dir}/README"/> | |||||
| <copyfile src="TODO" dest="${ant.dist.dir}/TODO"/> | |||||
| <copyfile src="LICENSE" dest="${ant.dist.dir}/LICENSE"/> | |||||
| </target> | </target> | ||||
| <!-- =================================================================== --> | <!-- =================================================================== --> | ||||
| <!-- Packages the distribution with ZIP --> | <!-- Packages the distribution with ZIP --> | ||||
| <!-- =================================================================== --> | <!-- =================================================================== --> | ||||
| <target name="dist-zip" depends="dist"> | <target name="dist-zip" depends="dist"> | ||||
| <zip zipfile="${Name}-${version}.zip" basedir="${dist.dir}" includes="**"/> | |||||
| <zip zipfile="${Name}-${version}.zip" basedir="${ant.dist.dir}" includes="**"/> | |||||
| </target> | </target> | ||||
| <!-- =================================================================== --> | <!-- =================================================================== --> | ||||
| <!-- Packages the distribution with TAR-GZIP --> | <!-- Packages the distribution with TAR-GZIP --> | ||||
| <!-- =================================================================== --> | <!-- =================================================================== --> | ||||
| <target name="dist-tgz" depends="dist"> | <target name="dist-tgz" depends="dist"> | ||||
| <tar tarfile="${Name}-${version}.tar" basedir="${dist.dir}" includes="**"/> | |||||
| <tar tarfile="${Name}-${version}.tar" basedir="${ant.dist.dir}" includes="**"/> | |||||
| <gzip zipfile="${Name}-${version}.tar.gz" src="${Name}-${version}.tar"/> | <gzip zipfile="${Name}-${version}.tar.gz" src="${Name}-${version}.tar"/> | ||||
| </target> | </target> | ||||
| @@ -136,7 +140,7 @@ | |||||
| <!-- =================================================================== --> | <!-- =================================================================== --> | ||||
| <target name="clean" depends="init"> | <target name="clean" depends="init"> | ||||
| <deltree dir="${build.dir}"/> | <deltree dir="${build.dir}"/> | ||||
| <deltree dir="${dist.dir}"/> | |||||
| <deltree dir="${ant.dist.dir}"/> | |||||
| </target> | </target> | ||||
| <!-- =================================================================== --> | <!-- =================================================================== --> | ||||
| @@ -179,7 +179,7 @@ public class Project { | |||||
| } | } | ||||
| public void setUserProperty(String name, String value) { | public void setUserProperty(String name, String value) { | ||||
| log("Setting project property: " + name + " -> " + | |||||
| log("Setting ro project property: " + name + " -> " + | |||||
| value, MSG_VERBOSE); | value, MSG_VERBOSE); | ||||
| userProperties.put(name, value); | userProperties.put(name, value); | ||||
| properties.put(name, value); | properties.put(name, value); | ||||
| @@ -61,6 +61,20 @@ import java.util.*; | |||||
| /** | /** | ||||
| * Call Ant in a sub-project | * Call Ant in a sub-project | ||||
| * | * | ||||
| * <pre> | |||||
| * <target name="foo" depends="init"> | |||||
| * <ant antfile="build.xml" target="bar" > | |||||
| * <property name="property1" value="aaaaa" /> | |||||
| * <property name="foo" value="baz" /> | |||||
| * </ant> | |||||
| * </target> | |||||
| * | |||||
| * <target name="bar" depends="init"> | |||||
| * <echo message="prop is ${property1} ${foo}" /> | |||||
| * </target> | |||||
| * </pre> | |||||
| * | |||||
| * | |||||
| * @author costin@dnt.ro | * @author costin@dnt.ro | ||||
| */ | */ | ||||
| public class Ant extends Task { | public class Ant extends Task { | ||||
| @@ -69,11 +83,11 @@ public class Ant extends Task { | |||||
| private String antFile = null; | private String antFile = null; | ||||
| private String target = null; | private String target = null; | ||||
| /** | |||||
| * Do the execution. | |||||
| */ | |||||
| public void execute() throws BuildException { | |||||
| Project p1 = new Project(project.getOutput(), project.getOutputLevel()); | |||||
| Vector properties=new Vector(); | |||||
| Project p1; | |||||
| public void init() { | |||||
| p1 = new Project(project.getOutput(), project.getOutputLevel()); | |||||
| // set user-define properties | // set user-define properties | ||||
| Hashtable prop1 = project.getProperties(); | Hashtable prop1 = project.getProperties(); | ||||
| @@ -81,12 +95,29 @@ public class Ant extends Task { | |||||
| while (e.hasMoreElements()) { | while (e.hasMoreElements()) { | ||||
| String arg = (String) e.nextElement(); | String arg = (String) e.nextElement(); | ||||
| String value = (String) prop1.get(arg); | String value = (String) prop1.get(arg); | ||||
| p1.setUserProperty(arg, value); | |||||
| p1.setProperty(arg, value); | |||||
| } | } | ||||
| } | |||||
| /** | |||||
| * Do the execution. | |||||
| */ | |||||
| public void execute() throws BuildException { | |||||
| if( antFile==null) throw new BuildException( "ant required antFile property "); | |||||
| p1.setBasedir(dir); | |||||
| if( dir==null) dir="."; | |||||
| p1.setBasedir(dir); | |||||
| p1.setUserProperty("basedir" , dir); | p1.setUserProperty("basedir" , dir); | ||||
| if (antFile == null) antFile = dir + "/build.xml"; | |||||
| // Override with local-defined properties | |||||
| Enumeration e = properties.elements(); | |||||
| while (e.hasMoreElements()) { | |||||
| Property p=(Property) e.nextElement(); | |||||
| // System.out.println("Setting " + p.getName()+ " " + p.getValue()); | |||||
| p.init(); | |||||
| } | |||||
| if (antFile == null) antFile = dir + "/build.xml"; | |||||
| ProjectHelper.configureProject(p1, new File(antFile)); | ProjectHelper.configureProject(p1, new File(antFile)); | ||||
| if (target == null) { | if (target == null) { | ||||
| @@ -107,4 +138,12 @@ public class Ant extends Task { | |||||
| public void setTarget(String s) { | public void setTarget(String s) { | ||||
| this.target = s; | this.target = s; | ||||
| } | } | ||||
| // XXX replace with createProperty!! | |||||
| public Task addProperty() { | |||||
| Property p=(Property)p1.createTask("property"); | |||||
| p.setUserProperty(true); | |||||
| properties.addElement( p ); | |||||
| return p; | |||||
| } | |||||
| } | } | ||||
| @@ -65,19 +65,29 @@ import java.util.*; | |||||
| */ | */ | ||||
| public class Property extends Task { | public class Property extends Task { | ||||
| private String name; | |||||
| private String value; | |||||
| private String file; | |||||
| private String resource; | |||||
| String name; | |||||
| String value; | |||||
| String file; | |||||
| String resource; | |||||
| boolean userProperty=false; // set read-only properties | |||||
| public void setName(String name) { | public void setName(String name) { | ||||
| this.name = name; | this.name = name; | ||||
| } | } | ||||
| public String getName() { | |||||
| return name; | |||||
| } | |||||
| public void setValue(String value) { | public void setValue(String value) { | ||||
| this.value = value; | this.value = value; | ||||
| } | } | ||||
| public String getValue() { | |||||
| return value; | |||||
| } | |||||
| public void setFile(String file) { | public void setFile(String file) { | ||||
| this.file = file; | this.file = file; | ||||
| } | } | ||||
| @@ -90,7 +100,10 @@ public class Property extends Task { | |||||
| try { | try { | ||||
| if ((name != null) && (value != null)) { | if ((name != null) && (value != null)) { | ||||
| String v = ProjectHelper.replaceProperties(value, project.getProperties()); | String v = ProjectHelper.replaceProperties(value, project.getProperties()); | ||||
| project.setProperty(name, v); | |||||
| if( userProperty ) | |||||
| project.setUserProperty(name, v); | |||||
| else | |||||
| project.setProperty(name, v); | |||||
| } | } | ||||
| if (file != null) loadFile(file); | if (file != null) loadFile(file); | ||||
| @@ -135,7 +148,14 @@ public class Property extends Task { | |||||
| String name = (String) e.nextElement(); | String name = (String) e.nextElement(); | ||||
| String value = (String) props.getProperty(name); | String value = (String) props.getProperty(name); | ||||
| String v = ProjectHelper.replaceProperties(value, project.getProperties()); | String v = ProjectHelper.replaceProperties(value, project.getProperties()); | ||||
| project.setProperty(name, v); | |||||
| if( userProperty ) | |||||
| project.setUserProperty(name, v); | |||||
| else | |||||
| project.setProperty(name, v); | |||||
| } | } | ||||
| } | } | ||||
| public void setUserProperty( boolean userP ) { | |||||
| userProperty=userP; | |||||
| } | |||||
| } | } | ||||