diff --git a/WHATSNEW b/WHATSNEW index f34b98cd1..1d2ea3e8f 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -24,6 +24,10 @@ Fixed bugs: * Updated documentation to fix spelling errors / broken links. Bugzilla Reports 53215, 53291, 53202 + * Unable to override system properties. It was not possible not to override + system properties from the command line (or from a property file). + Bugzilla Report 51792 + Other changes: -------------- diff --git a/src/main/org/apache/tools/ant/Main.java b/src/main/org/apache/tools/ant/Main.java index 63a3009dd..12fb5783c 100644 --- a/src/main/org/apache/tools/ant/Main.java +++ b/src/main/org/apache/tools/ant/Main.java @@ -36,6 +36,7 @@ import java.util.Vector; import org.apache.tools.ant.input.DefaultInputHandler; import org.apache.tools.ant.input.InputHandler; import org.apache.tools.ant.launch.AntMain; +import org.apache.tools.ant.property.GetProperty; import org.apache.tools.ant.property.ResolvePropertyMap; import org.apache.tools.ant.util.ClasspathUtils; import org.apache.tools.ant.util.FileUtils; @@ -147,6 +148,17 @@ public class Main implements AntMain { * proxy flag: default is false */ private boolean proxy = false; + + + private static final GetProperty NOPROPERTIES = new GetProperty(){ + @Override + public Object getProperty(String aName) { + // No existing property takes precedence + return null; + }}; + + + /** * Prints the message of the Throwable if it (the message) is not @@ -760,30 +772,7 @@ public class Main implements AntMain { } } - - - project.init(); - - // resolve properties - PropertyHelper propertyHelper - = (PropertyHelper) PropertyHelper.getPropertyHelper(project); - HashMap props = new HashMap(definedProps); - new ResolvePropertyMap(project, propertyHelper, - propertyHelper.getExpanders()) - .resolveAllProperties(props, null, false); - - // set user-define properties - for (Iterator e = props.entrySet().iterator(); e.hasNext(); ) { - Map.Entry ent = (Map.Entry) e.next(); - String arg = (String) ent.getKey(); - Object value = ent.getValue(); - project.setUserProperty(arg, String.valueOf(value)); - } - - project.setUserProperty(MagicNames.ANT_FILE, - buildFile.getAbsolutePath()); - project.setUserProperty(MagicNames.ANT_FILE_TYPE, - MagicNames.ANT_FILE_TYPE_FILE); + setProperties(project); project.setKeepGoingMode(keepGoingMode); if (proxy) { @@ -849,6 +838,33 @@ public class Main implements AntMain { } } + private void setProperties(final Project project) { + + project.init(); + + // resolve properties + PropertyHelper propertyHelper = (PropertyHelper) PropertyHelper + .getPropertyHelper(project); + HashMap props = new HashMap(definedProps); + + ResolvePropertyMap resolver = new ResolvePropertyMap(project, + NOPROPERTIES, propertyHelper.getExpanders()); + resolver.resolveAllProperties(props, null, false); + + // set user-define properties + for (Iterator e = props.entrySet().iterator(); e.hasNext(); ) { + Map.Entry ent = (Map.Entry) e.next(); + String arg = (String) ent.getKey(); + Object value = ent.getValue(); + project.setUserProperty(arg, String.valueOf(value)); + } + + project.setUserProperty(MagicNames.ANT_FILE, + buildFile.getAbsolutePath()); + project.setUserProperty(MagicNames.ANT_FILE_TYPE, + MagicNames.ANT_FILE_TYPE_FILE); + } + /** * Adds the listeners specified in the command line arguments, * along with the default listener, to the specified project.