////
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
   distributed with this work for additional information
   regarding copyright ownership.  The ASF licenses this file
   to you 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

     https://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.
////

Sets a variable (by name and value), or set of variables (from file or URL) in Ivy.

Variables are case sensitive.

Contrary to Ant properties, Ivy variables are mutable. But a problem with this is that you do not control when
variables are substituted, and usually it is done as soon as possible. So changing the value of a variable will
have no effect if it has already been substituted. Consequently, *using this task is NOT recommended*.

See link:../reference{outfilesuffix}[reference] page for details about Ivy variables.

== Attributes

[options="header",cols="15%,50%,35%"]
|=======
|Attribute|Description|Required
|name|the name of the variable to set|No
|value|the value of the variable to set|Yes when using the name attribute
|file|the filename of the property file to load as Ivy variables
.2+.^|One of these, when *not* using the name attribute
|url|the URL from which to read Ivy variables
|prefix|Prefix to apply to variables. A dot (`.`) is appended to the prefix if not specified.|No
|settingsRef|A reference to Ivy settings that must be used by this task (*__since 2.0__*)|No, defaults to `ivy.instance`.
|=======
