ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jaiki...@apache.org
Subject [18/29] ant-ivy git commit: Initial auto-converted .adoc files from xooki2asciidoc convertor
Date Mon, 19 Jun 2017 01:59:01 GMT
http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/dependencies.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/dependencies.adoc b/asciidoc/ivyfile/dependencies.adoc
new file mode 100644
index 0000000..33bc609
--- /dev/null
+++ b/asciidoc/ivyfile/dependencies.adoc
@@ -0,0 +1,52 @@
+
+*Tag:* dependencies *Parent:* link:../ivyfile.html[ivy-module]
+
+Container for dependency elements, used to describe the dependencies of this module. 
+If this container is not present, it is assumed that the module has no dependency at all.
+
+This container provides for two similar behaviors.  An overview is given here.  (See link:../ivyfile/configurations.html[configurations doc page] for more details about these behaviors).
+
+*__since 1.1__*
+[source]
+----
+defaultconf
+----
+
+Defines the conf attribute to use when no conf is defined for a dependency in this ivy file. It is only used when no conf mapping is defined, and has no influence in other cases.
+
+*__since 1.3__*
+[source]
+----
+defaultconfmapping
+----
+
+Influences the way that a conf mapping with no mapped conf is interpreted.
+
+In Ivy 2.1.0 and earlier, if both defaultconf and defaultconfmapping are defined, it's the defaultconfmapping that is used. Since Ivy 2.2.0, these attributes can be used together.
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|defaultconf|the default configuration to use when none is specified in a dependency. *__since 1.1__*</em>|No, defaults to *->*
+|defaultconfmapping|the default configuration mapping to use in this ivy file. *__since 1.3__*</em>|No, defaults to no default conf mapping
+|=======
+
+
+== Child elements
+
+
+Note: as specified by the ivy.xsd, the children elements are ordered; must come first the `link:../ivyfile/dependency.html[dependency]` elements, then the `link:../ivyfile/exclude.html[exclude]` elements, then the `link:../ivyfile/override.html[override]` elements, and then the `link:../ivyfile/conflict.html[conflict]` elements.
+
+
+[options="header"]
+|=======
+|Element|Description|Cardinality
+|link:../ivyfile/dependency.html[dependency]|declares a dependency for this module|0..n
+|link:../ivyfile/exclude.html[exclude]|excludes artifacts, modules or whole organizations from the set of dependencies of this module *__since 2.0__*|0..n
+|link:../ivyfile/override.html[override]|specify an override mediation rule, overriding the revision and/or branch requested for a transitive dependency *__since 2.0__*|0..n
+|link:../ivyfile/conflict.html[conflict]|specify a a conflict manager for one or several dependencies *__since 2.0__*|0..n
+|=======

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/dependency-artifact-conf.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/dependency-artifact-conf.adoc b/asciidoc/ivyfile/dependency-artifact-conf.adoc
new file mode 100644
index 0000000..e757e30
--- /dev/null
+++ b/asciidoc/ivyfile/dependency-artifact-conf.adoc
@@ -0,0 +1,17 @@
+
+*Tag:* conf *Parent:* link:../ivyfile/dependency-artifact.html[artifact]
+
+Specify a configuration in which the enclosing artifact specification should be included.
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|name|the name of the master configuration in which the enclosing artifact should be included|Yes
+|=======
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/dependency-artifact.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/dependency-artifact.adoc b/asciidoc/ivyfile/dependency-artifact.adoc
new file mode 100644
index 0000000..6b56350
--- /dev/null
+++ b/asciidoc/ivyfile/dependency-artifact.adoc
@@ -0,0 +1,100 @@
+
+*Tag:* artifact *Parent:* link:../ivyfile/dependency.html[dependency]
+
+This feature gives you more control on a dependency for which you do not control its ivy file. 
+It enables to specify the artifacts required, if the dependency has no ivy file. 
+
+Indeed, when a module has no ivy file, it is assumed that it publishes exactly one artifact having the same name as the module itself. But when this module publishes more artifacts, or simply does not respect the name rule, and if you cannot deliver an ivy file for it (because you do not control the repository, for instance - think about maven ibiblio repository, to give no name), then this feature let you specify the artifacts names you want to get.
+
+Each artifact specification can be given in the context of particular master configurations. By default, if no configuration is specified, artifacts specification apply to all master configurations. But you can specify that a specification applies only to one or several master configurations, using either inline or nested conf specification. In this case, do not forget that if you do not specify any specification for a particular configuration, then no specification will apply for this configuration and it will be resolved not taking into account any specification.
+
+For instance, imagine you have A, B & C master configurations. If you specify art1 in A & B and art2 in A, then C will not be specified at all, and will thus assume the default artifact. To prevent this, you have to specify a configuration mapping for the dependency, mapping only A & B to some or all dependency configurations.
+
+Example:
+
+[source]
+----
+
+<dependency org="yourorg" name="yourmodule9" rev="9.1" conf="A,B->default">
+  <artifact name="art1" type="jar" conf="A,B"/>
+  <artifact name="art2" type="jar" conf="A"/>
+</dependency>	
+
+----
+
+*__since 1.4__* It's possible to indicate the url at which the artifact can be found. This is not mandatory, and even not recommended with an enterprise repository. Note that Ivy will always look at the location where the artifact should be and only use the url if it cannot be found at the standard location in the repository.
+
+*__since 1.4__* This tag supports link:../concept.html#extra[extra attributes].
+
+*__since 2.0__* This feature can also be used for modules having their own module descriptor, but which doesn't declare an artifact you know that is published. Note that in this case artifacts declared to be published by the dependency will be ignored, so do not forget to include all artifacts you want.
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|name|the name of an artifact of the dependency module|Yes
+|type|the type of the artifact of the dependency module|Yes
+|ext|the extension of the artifact of the dependency module|No, defaults to type
+|conf|comma separated list of the master configurations in which this artifact should be included.
+    '*' wildcard can be used to designate all configurations of this module|No, defaults to '*', unless nested conf are specified
+|url|an url where this artifact can be found if it isn't present at the standard location in the repository *__since 1.4__*|No, defaults to no url
+|=======
+
+
+== Child elements
+
+
+[options="header"]
+|=======
+|Element|Description|Cardinality
+|link:../ivyfile/dependency-artifact-conf.html[conf]|configuration in which the artifact should be included|0..n
+|=======
+
+
+== Examples
+
+
+[source]
+----
+
+<dependency org="foo" name="bar" rev="1.0">
+  <artifact name="baz" type="jar"/>
+</dependency>
+
+----
+
+Declares a dependency on module bar which only publish one artifact: baz.jar.
+
+
+'''
+
+
+[source]
+----
+
+<dependency org="foo" name="bar" rev="1.0">
+  <artifact name="baz" type="jar" url="http://www.acme.com/repository/bar/baz-1.0-acme.jar"/>
+</dependency>
+
+----
+
+Same as above, except that if the artifact is not found at its standard location, Ivy will use http://www.acme.com/repository/bar/baz-1.0-acme.jar to download it.
+
+
+'''
+
+
+[source]
+----
+
+<dependency org="foo" name="bar" rev="1.0">
+  <include name="*"/>
+  <artifact name="baz" type="source" ext="jar"/>
+</dependency>
+
+----
+
+Declares a dependency on module bar for which all artifacts declared will be used (thanks to the include tag) plus an artifact baz of type source and ext jar (which is not declared in module bar module descriptor).
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/dependency-conf.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/dependency-conf.adoc b/asciidoc/ivyfile/dependency-conf.adoc
new file mode 100644
index 0000000..f4e5209
--- /dev/null
+++ b/asciidoc/ivyfile/dependency-conf.adoc
@@ -0,0 +1,33 @@
+
+*Tag:* conf *Parent:* link:../ivyfile/dependency.html[dependency]
+
+
+
+Describes a configuration mapping for a dependency. See also the inline configuration mapping
+in dependency element.
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|name|the name of the master configuration to map. 
+    	'*' wildcard can be used to designate all configurations of this module|Yes
+|mapped|a comma separated list of dependency configurations to which this
+    master configuration should be mapped|No, default to the same configuration as master one, unless nested mapped elements are specified
+|=======
+
+
+== Child elements
+
+
+[options="header"]
+|=======
+|Element|Description|Cardinality
+|link:../ivyfile/mapped.html[mapped]|map dependency configurations for this master configuration|0..n
+|=======
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/dependency-include-conf.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/dependency-include-conf.adoc b/asciidoc/ivyfile/dependency-include-conf.adoc
new file mode 100644
index 0000000..78f3dfc
--- /dev/null
+++ b/asciidoc/ivyfile/dependency-include-conf.adoc
@@ -0,0 +1,17 @@
+
+*Tag:* conf *Parent:* link:../ivyfile/dependency-include.html[include]
+
+Specify a configuration in which the enclosing artifact inclusion should be included.
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|name|the name of the master configuration in which the enclosing artifact should be included|Yes
+|=======
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/dependency-include.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/dependency-include.adoc b/asciidoc/ivyfile/dependency-include.adoc
new file mode 100644
index 0000000..cca23ca
--- /dev/null
+++ b/asciidoc/ivyfile/dependency-include.adoc
@@ -0,0 +1,46 @@
+
+*Tag:* include *Parent:* link:../ivyfile/dependency.html[dependency]
+
+This feature gives you more control on a dependency for which you do not control its ivy file. 
+It enables to restrict the artifacts required by including only the artifacts given here, even if configuration does not a good separation of published artifacts.
+
+Each artifact restriction can be given in the context of particular master configurations. By default, if no configuration is specified, artifacts restriction apply to all master configurations. But you can specify that a restriction applies only to one or several master configurations, using either inline or nested conf specification. In this case, do not forget that if you do not specify any restriction for a particular configuration, then no restriction will apply for this configuration and it will be resolved not taking into account any restriction.
+
+For instance, imagine you have A, B & C master configurations. If you restrict to art1 in A & B and art2 in A, then C will not be restricted at all, and will thus get all artifacts of all dependency configurations if you do not specify a configuration mapping. To prevent this, you have to specify a configuration mapping for the dependency, mapping only A & B to some or all dependency configurations.
+
+Example:
+
+[source]
+----
+
+<dependency org="yourorg" name="yourmodule9" rev="9.1" conf="A,B->default">
+  <include name="art1" type="jar" conf="A,B"/>
+  <include name="art2" type="jar" conf="A"/>
+</dependency>		
+
+----
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|name|the name of an artifact of the dependency module to add to the include list, or an expression matching this name (see matcher attribute below)|No, defaults to .*
+|type|the type of the artifact of the dependency module to add to the include list, or an expression matching this name (see matcher attribute below)|No, defaults to .*
+|ext|the extension of the artifact of the dependency module to add to the include list, or an expression matching this name (see matcher attribute below)|No, defaults to type
+|matcher|the link:../concept.html#matcher[matcher] to use to match the modules to include *__since 2.0__*|No, defaults to exactOrRegexp in pre 1.3 ivy files, and exact in 1.3 and superior
+|conf|comma separated list of the master configurations in which this artifact should be included.
+    '*' wildcard can be used to designate all configurations of this module|No, defaults to '*', unless nested conf are specified
+|=======
+
+
+== Child elements
+
+
+[options="header"]
+|=======
+|Element|Description|Cardinality
+|link:../ivyfile/dependency-include-conf.html[conf]|configuration in which the artifact should be included|0..n
+|=======

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/dependency.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/dependency.adoc b/asciidoc/ivyfile/dependency.adoc
new file mode 100644
index 0000000..63e921b
--- /dev/null
+++ b/asciidoc/ivyfile/dependency.adoc
@@ -0,0 +1,409 @@
+
+*Tag:* dependency *Parent:* link:dependencies.html[dependencies]
+
+Declares a dependency for this module. A dependency is described by the module on which the current module depends (identified by its name, organisation and revision), and a mapping of configurations.
+
+
+=== [[revision]]Fixed and dynamic revisions
+
+The revision can be given as a fixed one (1.5.2, for instance) or as a latest (or dynamic) one. Several possibilities for dynamic revisions are implemented in Ivy:
+
+
+* latest.integration +
+ selects the latest revision of the dependency module.
+
+* latest.[any status] *__since 1.4__* +
+ selects the latest revision of the dependency module with at least the specified status. 
+
+For instance latest.milestone will select the latest version being either a milestone or a release, and latest.release will only selects the latest release. Note that in order to find the latest revision with the appropriate status Ivy has to parse all the ivy files in your repository from the last one until it finds such a revision. Hence don't be surprised if the resolution slow down.
+See also link:../settings/statuses.html[statuses] to see how to configure module statuses.
+
+* end the revision with a + +
+ selects the latest sub-revision of the dependency module. For instance, 
+if the dependency module exists in revision 1.0.3, 1.0.7 and 1.1.2, "1.0.+" will select 1.0.7.
+
+* version ranges *__since 1.4__* +
+ mathematical notation for ranges can be used to match a range of version.   
+
+Examples:
+[1.0,2.0] matches all versions greater or equal to 1.0 and lower or equal to 2.0
+[1.0,2.0[ matches all versions greater or equal to 1.0 and lower than 2.0
+]1.0,2.0] matches all versions greater than 1.0 and lower or equal to 2.0
+]1.0,2.0[ matches all versions greater than 1.0 and lower than 2.0
+[1.0,) matches all versions greater or equal to 1.0
+]1.0,) matches all versions greater than 1.0
+(,2.0] matches all versions lower or equal to 2.0
+(,2.0[ matches all versions lower than 2.0 
+
+*__since 1.4__* If you don't find a way to expression your dependency version constraint among these, you can link:../settings/version-matchers.html[plug your own].
+The way to determine which revision is the "latest" between two is configurable through the use of pluggable LatestStrategy. See link:../reference.html[ivy main concepts] for details about this.
+
+
+=== [[revision-constraint]]Revision constraint
+
+*__since 2.0__* The dependency tag supports two revision attributes: rev, corresponding to the default required dependency revision, and revConstraint, corresponding to a dynamic revision constraint applied on this dependency. 
+
+Depending on the link:../use/resolve.html[resolve mode] used, the actual revision used during dependency resolution may vary. These revisions usually differ only for modules published in a repository. When link:../use/deliver.html[deliver] is used, dynamic version constraints are replaced by a stic version constraint, to help build reproducibility. However, the information of the original version constraint is not lost, but rather put in the revConstraint attribute. This both ensure better metadata in the repository while still allowing easier build reproducibility. 
+
+
+=== Configurations mapping
+
+This mapping indicates which configurations of the dependency are required in which configurations of the current module, also called master configurations.
+
+There are several ways to declare this mapping of configurations, choose depending more on preference than on possibilities. Try to avoid mixing usage in a single dependency element: do not use both nested and inline mapping declaration.
+
+The first way to declare this mapping is called the inline mapping. It is maybe the less natural at first, but it's powerful and concise. Inline mapping can take several forms.
+
+
+
+* Specify one configuration name +
+ This means that in this master configuration the same dependency configuration is needed (except if a defaultconfmapping has been specified in this ivy file, see link:../ivyfile/configurations.html[configurations] for details, or table below for examples).
+For instance, if the current module has defined a configuration named 'runtime', and the dependency too, then having an inline mapping configuration set to 'runtime' means that in the runtime master configuration the runtime dependency configuration is required.
+
+The link:../ivyfile/configurations.html#defaultconfmapping[examples on the dependency on the configurations page] explain how ivy interprets the conf attribute according to how link:../ivyfile/configurations.html[defaultconfmapping] and link:../ivyfile/configurations.html[defaultconf] is set.
+
+
+
+* Specify a configuration mapping using the '->' operator separating a comma separated list of master configurations (left operand) of a comma separated list of dependency configurations (right operand). +
+A good way to remember which side is for the master configuration (i.e. the configuration of the module defining the dependency) and which side is for the dependency configuration is to read the '->' as 'depends on'.
+
+In this case, all specified dependency configurations are required in all specified master configurations.
+For instance, 'A, B, C -> E, F' means that dependency configurations E & F are required in master configurations A, B and C.
+
+Note that you can use the wildcard '*' as a configuration name, meaning that all configurations (either master or dependency public ones depending on the side) are wanted. For instance, '* -> B, C' means that B & C dependency configurations are required in all master configurations.
+
+*__since 1.4__* you can use * wildcard followed by negated configurations to mean all but xxx. For instance, '*, !A, !B -> X' means that X dependency configuration is required in all master configurations except A and B.
+
+*__since 1.2__* '@' also has a special meaning as a right operand of the dependency mapping, it means map to self. This is particularly useful with '*', '*->@' meaning that all configurations of the module maps to their equivalent (same name) in the dependency.
+
+*__since 1.4__* '#' can be used as right side operand to mean 'this' configuration, and thus refers to the configuration being resolved. It is slightly similar to @, except that it takes into account the configuration being actually resolved in case of a configuration extending another one.
+
+Example:
+Let's foo be a module with two configurations, A and B, B extending A.
+Then a dependency declaring conf A-># will get A dep conf in its confs A (when resolving A, ivy will find interpret the # symbol as A) and B dep conf in its conf B (when resolving B, ivy will interpret the # symbol as B, even if this dependency is only required because of the A dependency).
+
+If you don't understand really how this works, do not use it :-)
+
+*__since 1.4__* '%' can be used as left side operand to mean 'all the other configurations'. This can be usefull when you only have a specific mapping for some configurations and a default mapping for all the others.
+
+Example:
+
+[source]
+----
+test->runtime;%->default
+----
+
+means that the 
+[source]
+----
+test
+----
+
+configuration is mapped to the 
+[source]
+----
+runtime
+----
+
+configuration, but all the other configurations are mapped to the 
+[source]
+----
+default
+----
+
+configuration.
+
+*__since 1.3__* a fallback mechanism can be used when you are not sure that the dependency will have the required conf. You can indicate to ivy that you want one configuration, but if it isn't present, use another one. 
+The syntax for specifying this adds the fallback conf between parenthesis right after the required conf. 
+For instance, 
+[source]
+----
+test->runtime(default)
+----
+
+means that in the test configuration of the module the 
+[source]
+----
+runtime
+----
+
+conf of the dependency is required, but if doesn't exist, it will use the 
+[source]
+----
+default
+----
+
+conf instead. If 
+[source]
+----
+default
+----
+
+conf doesn't exist then it will be considered as an error. Note that the 
+[source]
+----
+*
+----
+
+wildcard can be used as fallback conf.
+
+*__since 2.1__* It is also possible to define dependencies on configurations intersection. A configuration intersection is defined using a '+' sign to separate the configuration (eg 'A+B' means the intersection of configuration 'A' and 'B'). In that case only artifacts and dependencies defined in both configurations in the dependency will be part of the master configuration defining the dependency on the configuration intersection.
+
+Configuration intersections can also be used when specifying the confs to link:../use/resolve.html[resolve]. 
+
+Moreover, the mapping '*->@' is handled as a specific case with configuration intersections: it maps also the intersections. So if one resolve conf A+B in a module which defines a dependency with mapping *->@, the mapping *->@ is interpreted as A+B->A+B so the intersection of A and B will be resolved in the dependency.
+
+*__since 2.1__* you can refer to a group of configurations sharing the same value for an attribute as left side part of the dependency mapping. 
+
+The syntax is 
+
+[source]
+----
+*[att=value]
+----
+
+where _att_ is the name of the attribute shared by the configurations of the group, and _value_ is the value for this attribute that configurations must have to be part of the group. This is especially useful with extra attributes.
+
+For instance, if you have:
+
+[source]
+----
+
+<configurations>
+	<conf name="red" e:axis="color" />
+	<conf name="blue" e:axis="color" />
+		
+	<conf name="windows" e:axis="platform" />
+	<conf name="linux" e:axis="platform"/>
+</configurations>
+
+----
+
+Then you can do:
+
+[source]
+----
+
+<dependency org="acme" name="foo" rev="2.0" conf="*[axis=platform]->default"/>
+
+----
+
+To map the windows and linux configurations (the one which have the attribute axis equal to platform) to the default configuration of foo.
+
+*__since 1.4__* you can add simple conditions in the right side of the dependency mapping. This is done by adding a condition between '[' and ']'. If the condition evaluates to 
+[source]
+----
+true
+----
+
+, the mapping is performed. If the condition evaluates to 
+[source]
+----
+false
+----
+
+, the mapping will be ignored. For instance, 
+[source]
+----
+test->[org=A]runtime,[org=B]default
+----
+
+means that the 
+[source]
+----
+test
+----
+
+configuration will be mapped to the 
+[source]
+----
+runtime
+----
+
+conf for the dependencies of organisation 'A' and to the 
+[source]
+----
+default
+----
+
+conf for dependencies of organisation 'B'.
+
+
+* Specify a semi-column separated list of any of the previous specs. +
+ In this case, it is the union of the mapping which is kept. For instance, 'A -> B; * -> C' means that B conf is needed in A conf and C conf is need in all master conf... so both B & C dep conf are required in A master conf
+
+
+If you prefer more verbose mapping declaration, everything is also possible with sub elements mapping declaration. 
+
+
+=== Artifact restriction
+
+Moreover, the dependency element also supports an artifact restriction feature (since 0.6).
+See link:../ivyfile/dependency-artifact.html[dependency artifact] for details.
+
+
+=== Forcing revision
+
+Finally, the dependency element also supports an a force attribute (since 0.8), which gives an indication
+to conflicts manager to force the revision of a dependency to the one given here.
+See link:../ivyfile/conflicts.html[conflicts manager] for details. 
+
+*__since 1.4__* this tag supports link:../concept.html#extra[extra attributes]
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|org|the name of the organisation of the dependency.|No, defaults to the master module organisation
+|name|the module name of the dependency|Yes
+|branch|the branch of the dependency. *__since 1.4__*|No, defaults to the default branch setting for the dependency.
+|rev|the revision of the dependency. See link:#revision[above] for details.|Yes
+|revConstraint|the dynamic revision constraint originally used for this dependency. See link:#revision-constraint[above] for details.|No, defaults to the value of rev
+|force|a boolean to give an indication to conflict manager that this dependency 
+     should be forced to this revision (see link:../ivyfile/conflicts.html[conflicts manager])|No, defaults to false
+|conf|an inline mapping configuration spec (see above for details)|No, defaults to defaultconf attribute of dependencies element if neither conf attribute nor conf children element is given
+|transitive|true to resolve this dependency transitively, false otherwise (*__since 1.2__*)|No, defaults to true
+|changing|true if the dependency artifacts may change without revision change, false otherwise (*__since 1.2__*). See link:../concept.html#change[cache and change management] for details.|No, defaults to false
+|=======
+
+
+== Child elements
+
+
+[options="header"]
+|=======
+|Element|Description|Cardinality
+|link:../ivyfile/dependency-conf.html[conf]|defines configuration mapping has sub element|0..n
+|link:../ivyfile/dependency-artifact.html[artifact / include]|defines artifacts inclusion - use only if you do not control dependency ivy file|0..n
+|link:../ivyfile/artifact-exclude.html[exclude]|defines artifacts exclusion - use only if you do not control dependency ivy file|0..n
+|=======
+
+
+
+== Examples
+
+
+[source]
+----
+
+<dependency org="jayasoft" name="swtbinding" revision="0.2"/>
+
+----
+
+Declares a dependency on the module swtbinding from jayasoft in its revision 0.2. All the configuration of this dependency will be included in all configurations of the module in which the dependency is declared.
+
+'''
+
+
+[source]
+----
+
+<dependency org="jayasoft" name="swtbinding" branch="fix-103" revision="latest.integration"/>
+
+----
+
+Same as above except that it will take the latest revision on the branch 'fix-103' instead of revision '0.2'.
+
+'''
+
+
+[source]
+----
+
+<dependency name="mymodule" revision="latest.integration" conf="test->default"/>
+
+----
+
+Declares a dependency on the module 
+[source]
+----
+mymodule
+----
+
+from the same organisation as the module in which the dependency is declared. The latest available revision of this dependency will be used. This dependency will only be included in the test configuration of the module, and it's only the default configuration of the dependency which will be included.
+
+'''
+
+
+[source]
+----
+
+<dependency org="apache" name="commons-lang" revision="2.0" force="true" conf="default"/>
+
+----
+
+Declares a dependency on the module 
+[source]
+----
+commons-lang
+----
+
+from apache, in revision 2.0. The revision 2.0 will be used even if another dependency declares itself a dependency on another version of commons-lang. Moreover, if no defaultconfmapping is defined, only the 
+[source]
+----
+default
+----
+
+conf of commons-lang will be used in the 
+[source]
+----
+default
+----
+
+conf of the master module. If 
+[source]
+----
+*->runtime
+----
+
+was declared as defaultconfmapping, then the runtime conf of commons-lang would be included in the default conf of the master module. Note that whatever the defaultconfmapping is, the dependency only be included in the default conf of the master module. The defaultconfmapping only changes the required dependency confs.
+
+'''
+
+
+[source]
+----
+
+<dependency org="foo" name="bar" revision="3.0" transitive="false" conf="default->@;runtime,test->runtime"/>
+
+----
+
+Declares a dependency on the module 
+[source]
+----
+bar
+----
+
+from foo, in revision 3.0. The dependencies of bar will themselves not be included due to the setting of transitive. The default dependency conf will be included in the default master conf, and the runtime dependency conf will be included in both the runtime and test master conf.
+
+'''
+
+
+[source]
+----
+
+<dependency org="foo" name="bar" revision="3.0" changing="true" conf="compile->runtime(default)"/>
+
+----
+
+Declares a dependency on the module 
+[source]
+----
+bar
+----
+
+from foo, in revision 3.0. This revision is considered to be able to change (
+[source]
+----
+changing="true"
+----
+
+), so even if it is already in ivy cache, Ivy will check if a revision is a more recent last modified date is available on the repository. The runtime conf of bar is required in the compile conf of the master module, but if bar doesn't define a runtime conf, then the 
+[source]
+----
+default
+----
+
+conf will be used.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/description.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/description.adoc b/asciidoc/ivyfile/description.adoc
new file mode 100644
index 0000000..8a75753
--- /dev/null
+++ b/asciidoc/ivyfile/description.adoc
@@ -0,0 +1,22 @@
+
+*Tag:* description *Parent:* link:../ivyfile/info.html[info]
+
+
+
+Describes the current module. This tag is the only one which can contain free text,
+including html. It is used to describe the module itself, usually in a single short phrase
+(it is not meant to replace the module description on the corresponding web site), and then
+gives all information necessary to use the module, especially information about
+public configurations, how and when to use them.
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|homepage|the url of the homepage of the module|No, but it's recommended to indicate it.
+|=======
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/exclude.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/exclude.adoc b/asciidoc/ivyfile/exclude.adoc
new file mode 100644
index 0000000..4300f90
--- /dev/null
+++ b/asciidoc/ivyfile/exclude.adoc
@@ -0,0 +1,24 @@
+
+*Tag:* exclude *Parent:* link:../ivyfile/dependencies.html[dependencies]
+
+*__since 2.0__* This feature gives you more control on a dependency for which you do not control its ivy file. 
+It allows to exclude artifacts, modules or organizations from the list of dependencies for the whole module.
+
+It is very similar to the link:../ivyfile/artifact-exclude.html[dependency exclude] element, except that it applies to a whole module, which can be very useful when a lot of dependencies transitively bring a module you don't want.
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|org|the organization of the dependency module or artifact to exclude, or a regexp matching this organization|No, defaults to *
+|module|the name of the dependency module or the artifact to exclude, or a regexp matching this module name|No, defaults to *
+|artifact|the name of an artifact of the dependency module to add to the exclude list, or an expression matching this name (see matcher attribute below)|No, defaults to *
+|type|the type of the artifact of the dependency module to add to the exclude list, or a regexp matching this name|No, defaults to *
+|ext|the extension of the artifact of the dependency module to add to the exclude list, or an expression matching this name (see matcher attribute below)|No, defaults to type
+|matcher|the link:../concept.html#matcher[matcher] to use to match the modules to excludes|No, defaults to exactOrRegexp in pre 1.3 ivy files, and exact in 1.3 and superior
+|conf|comma separated list of the master configurations in which this artifact should be included.
+    '*' wildcard can be used to designate all configurations of this module|No, defaults to '*', unless nested conf are specified
+|=======

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/extends.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/extends.adoc b/asciidoc/ivyfile/extends.adoc
new file mode 100644
index 0000000..ad514e1
--- /dev/null
+++ b/asciidoc/ivyfile/extends.adoc
@@ -0,0 +1,40 @@
+
+*Tag:* extends *Parent:* link:../ivyfile/info.html[info]
+
+*__since 2.2__* Identifies an optional parent descriptor for this module.  For complicated projects composed of many modules that have common configurations or dependencies, inheritance allows modules to share this information.  Which parts of the parent descriptor are inherited can be controlled with the __extendType__ attribute.  Supported __extendType__ values are:
+
+[options="header",cols="15%,50%"]
+|=======
+|Value|Description
+|info|Attributes of the link:../ivyfile/info.html[info] element are inherited from the parent.  When an attribute appears in both child and parent, the child value is used.
+|description|The content of the link:../ivyfile/description.html[info/description] element is inherited from the parent.
+|configurations|link:../ivyfile/conf.html[Configurations] defined in the parent descriptor are added to any configurations defined in the child descriptor.
+|dependencies|link:../ivyfile/dependency.html[Dependencies] defined in the parent descriptor are added to any dependencies defined in the child descriptor.
+|licenses|link:../ivyfile/license.html[Licenses] defined in the parent descriptor are added to any licenses defined in the child descriptor.
+|all|info, description, configurations, licenses and dependencies from the parent descriptor are merged into the child descriptor.
+|=======
+
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|organisation|the organisation of the parent module|Yes
+|module|the name of the parent module|Yes
+|revision|the revision of the parent module.  Can be fixed, a dynamic value, or range of revisions; see link:../ivyfile/dependency.html[dependency] for information on specifying revisions.|Yes
+|extendType|which part(s) of the parent descriptor are inherited.  Valid values are __info__, __description__,
+__configurations__, __dependencies__, and __all__.|No, default is __all__
+|location|
+
+A local filesystem path that should be searched for the parent descriptor.  If the parent descriptor cannot be found at this location, it will be located using dependency resolvers like any normal dependency.
+
+
+
+This attribute is intended for development use.  For example, child module descriptors appear in a source control directory with the parent module descriptor at a higher level.  __location__ will then contain the relative path to the parent descriptor for use during development builds.
+
+|No, as long as the parent descriptor exists in an Ivy resolver
+|=======
+

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/include.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/include.adoc b/asciidoc/ivyfile/include.adoc
new file mode 100644
index 0000000..28471c5
--- /dev/null
+++ b/asciidoc/ivyfile/include.adoc
@@ -0,0 +1,57 @@
+
+*Tag:* include *Parent:* link:../ivyfile/configurations.html[configurations]
+
+Include configurations specified in another file. *__since 1.3__*
+
+The included file should have a configurations tag as root tag, which follow the same specification as the link:../ivyfile/configurations.html[configurations] tag of the ivy file. 
+
+This means that it can contain conf declarations, other file inclusion, and also a defaultconfmapping.
+
+When delivering an ivy file with such an inclusion, the included configuration file is inlined, i.e. ivy remove the dependency on the external file.
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|file|the file to include|Yes
+|=======
+
+
+== Examples
+
+
+[source]
+----
+
+<ivy-module version="1.0">
+  <info organisation="myorg"
+         module="mymodule"
+  />
+  <configurations>
+    <include file="path/to/included-configurations.xml"/>
+    <conf name="conf3"/>
+  </configurations>
+  <dependencies>
+    <dependency name="mymodule1" rev="1.0"/>
+    <dependency name="mymodule2" rev="2.0" conf="conf2,conf3->*"/>
+  </dependencies>
+</ivy-module>
+
+----
+
+with included-configurations.xml like this:
+
+[source]
+----
+
+<configurations defaultconfmapping="*->@">
+  <conf name="conf1" visibility="public"/>
+  <conf name="conf2" visibility="private"/>
+</configurations>
+
+----
+
+Defines 3 configurations, conf1, conf2 and conf3. mymodule1 is required in each configuration, with for each the same configuration (conf1 is needed in conf1, conf2 in conf2, and conf3 in conf3) due to the defaultconfmapping defined in the included file.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/info.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/info.adoc b/asciidoc/ivyfile/info.adoc
new file mode 100644
index 0000000..8744ccf
--- /dev/null
+++ b/asciidoc/ivyfile/info.adoc
@@ -0,0 +1,39 @@
+
+*Tag:* info *Parent:* link:../ivyfile.html[ivy-module]
+
+Gives identification and basic information about the module this ivy file describes.
+
+*__since 1.4__* This tag supports link:../concept.html#extra[extra attributes].
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|organisation|the name of the organisation that is the owner of this module.|Yes
+|module|the name of the module described by this ivy file.|Yes
+|branch|the branch of this module. *__since 1.4__*|No, defaults to the default branch setting, or nothing if no default branch is configured
+|revision|the revision of this module.|Yes in repository ivy files, no in ivy files to resolve
+|status|the status of this module. See link:../reference.html[terminology] section for details|No, default to 'integration'
+|publication|the date of publication of this module. It should be given in this format: yyyyMMddHHmmss|No, but it's a good practice to set it with delivered ivy files
+|=======
+
+
+== Child elements
+
+
+[options="header"]
+|=======
+|Element|Description|Cardinality
+|link:../ivyfile/extends.html[extends]|identifies a parent Ivy file from which this descriptor inherits content|0..n
+|link:../ivyfile/license.html[license]|contains information about the licenses of the described module|0..n
+|link:../ivyfile/ivyauthor.html[ivyauthor]|describes who has contributed to write the ivy file|0..n
+|link:../ivyfile/repository.html[repository]|describes on which public repositories this module can be found|0..n
+|link:../ivyfile/description.html[description]|describes how to use the module|0..1
+|=======
+
+After the description, you can also place your own tags in your own namespace.  This allow to provide some custom information about the module.
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/ivyauthor.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/ivyauthor.adoc b/asciidoc/ivyfile/ivyauthor.adoc
new file mode 100644
index 0000000..5314c98
--- /dev/null
+++ b/asciidoc/ivyfile/ivyauthor.adoc
@@ -0,0 +1,20 @@
+
+*Tag:* ivyauthor *Parent:* link:../ivyfile/info.html[info]
+
+
+
+Gives information about who has contributed to write this ivy file. It does NOT indicate who 
+is the author of the module itself.
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|name|the name of the author, as a person or a company.|Yes
+|url|an url pointing to where the author can bea reached.|No, but it's a good practice to indicate it
+|=======
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/license.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/license.adoc b/asciidoc/ivyfile/license.adoc
new file mode 100644
index 0000000..86b883a
--- /dev/null
+++ b/asciidoc/ivyfile/license.adoc
@@ -0,0 +1,19 @@
+
+*Tag:* license *Parent:* link:../ivyfile/info.html[info]
+
+
+
+Gives information about a license of the described module.
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|name|the name of the license. Try to respect spelling when using a classical license.|Yes
+|url|an url pointing to the license text.|No, but it's a good practice to indicate it
+|=======
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/manager.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/manager.adoc b/asciidoc/ivyfile/manager.adoc
new file mode 100644
index 0000000..0dab30e
--- /dev/null
+++ b/asciidoc/ivyfile/manager.adoc
@@ -0,0 +1,34 @@
+
+*Tag:* manager *Parent:* link:../ivyfile/conflicts.html[conflicts]
+
+
+
+*__(since 2.0)__* the conflicts section is deprecated.  Use the link:../ivyfile/conflict.html[conflict] instead.
+
+Specify a a conflict manager for one or several dependencies.
+
+The way to specify a conflict manager is by giving indication to which dependencies
+the conflict manager applies (by giving organisation and module names or name regexp), 
+and then specifying the conflict manager, either by giving its name or by
+specifying a fixed revision list, in which case a fixed conflicts manager is used.
+
+
+
+See link:../ivyfile/conflicts.html[Conflicts Manager] for details on conflicts manager in general.
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|org|the name, or an expression matching the name of organisation to which this conflict manager should apply (see matcher attribute below)|No, defaults to * (match all)
+|module|the name, or an expression matching the name of module to which this conflict manager should apply (see matcher attribute below)|No, defaults to * (match all)
+|name|the name of the conflict manager to use|Exactly one of two
+|rev|a comma separated list of revisions this conflict manager should select
+|matcher|the link:../concept.html#matcher[matcher] to use to match the modules for which the conflict manager should be used *__since 1.3__*|No, defaults to exactOrRegexp in pre 1.3 ivy files, and exact in 1.3 and superior
+|=======
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/mapped.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/mapped.adoc b/asciidoc/ivyfile/mapped.adoc
new file mode 100644
index 0000000..9dce4f9
--- /dev/null
+++ b/asciidoc/ivyfile/mapped.adoc
@@ -0,0 +1,20 @@
+
+*Tag:* mapped *Parent:* link:../ivyfile/dependency-conf.html[conf]
+
+
+
+Describes a mapped dependency configuration for a master configuration.
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|name|the name of the dependency configuration mapped. 
+    	'*' wildcard can be used to designate all configurations of this module|Yes
+|=======
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/override.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/override.adoc b/asciidoc/ivyfile/override.adoc
new file mode 100644
index 0000000..d2f3ae3
--- /dev/null
+++ b/asciidoc/ivyfile/override.adoc
@@ -0,0 +1,29 @@
+
+*Tag:* override *Parent:* link:../ivyfile/dependencies.html[dependencies]
+
+
+
+*__(since 2.0)__*
+
+Specify an override mediation rule, overriding the revision and/or branch requested for a transitive dependency.
+
+This can be useful when a direct dependency is bringing a transitive dependency for which you want to change the revision, without actually declaring a dependency on it (because the module doesn't actually depend on it) and without using conflict management for this purpose (maybe because there is no conflict at all, or because you want to by pass conflict management for this particular transitive dependency).
+
+Overriding is done before any else, in a phase called dependency descriptor mediation. The transitive dependency then behave exactly as if it were declared with the new value.
+
+Note that even though no attribute is required, it makes no sense to set no attributes at all. It would mean that overriding is triggered for all transitive dependencies, but doesn't override anything. Most of the time, at least org or module should be set to override only a subset of transitive dependencies, and at least branch or rev should be set to actually override something.
+
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|org|the name, or an expression matching the name of organisation to which overriding should be applied (see matcher attribute below)|No, defaults to * (match all)
+|module|the name, or an expression matching the name of module to which overriding should be applied (see matcher attribute below)|No, defaults to * (match all)
+|branch|the branch to set for all the overriden dependency descriptors|No, by default branch is not overriden
+|rev|the revision to set for all the overriden dependency descriptors|No, by default revision is not overriden
+|matcher|the link:../concept.html#matcher[matcher] to use to match the modules for which the conflict manager should be used|No, defaults to exact
+|=======
+

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/publications.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/publications.adoc b/asciidoc/ivyfile/publications.adoc
new file mode 100644
index 0000000..fdd510d
--- /dev/null
+++ b/asciidoc/ivyfile/publications.adoc
@@ -0,0 +1,34 @@
+
+*Tag:* publications *Parent:* link:../ivyfile.html[ivy-module]
+
+
+
+Container for artifact elements, used to describe the artifacts published by this module. 
+
+If this container is not present, it is assumed that the module has one artifact, with the same name as the module, and published in all module configurations.
+
+
+Thus if you have a module which publishes no artifacts (a sort of virtual module, made only to integrate several other modules as a whole), you have to include a publications element with no artifact sub element.
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|defaultconf|comma separated list of public configurations in which artifacts are published by default (when no specific configurations are set on the artifact element).
+    	'*' wildcard can be used to designate all public configurations of this module. *__since 2.0__*|No, defaults to '*'
+|=======
+
+
+== Child elements
+
+
+[options="header"]
+|=======
+|Element|Description|Cardinality
+|link:../ivyfile/artifact.html[artifact]|declares a published artifact for this module|0..n
+|=======
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/ivyfile/repository.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/ivyfile/repository.adoc b/asciidoc/ivyfile/repository.adoc
new file mode 100644
index 0000000..d4b788a
--- /dev/null
+++ b/asciidoc/ivyfile/repository.adoc
@@ -0,0 +1,23 @@
+
+*Tag:* repository *Parent:* link:../ivyfile/info.html[info]
+
+
+
+Gives information about a public repository where the module can be found. This information
+is given as an indication, repositories being able to be down over time.
+
+== Attributes
+
+
+[options="header",cols="15%,50%,35%"]
+|=======
+|Attribute|Description|Required
+|name|the name of the repository. Try to respect spelling for common repositories (ibiblio, ivyrep, ...)|Yes
+|url|an url pointing to the repository.|Yes
+|pattern|an ivy pattern to find modules on this repository|No, but it's recommended to indicate it.
+|ivys|true if ivy file can be found on this repository|No, defaults to false.
+|artifacts|true if module artifacts can be found on this repository|No, defaults to false.
+|=======
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/js/jquery.pack.js
----------------------------------------------------------------------
diff --git a/asciidoc/js/jquery.pack.js b/asciidoc/js/jquery.pack.js
new file mode 100644
index 0000000..f954b6b
--- /dev/null
+++ b/asciidoc/js/jquery.pack.js
@@ -0,0 +1 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7(1C 1w.6=="T"){1w.T=1w.T;B 6=u(a,c){7(1w==q)v 1p 6(a,c);a=a||17;7(6.1t(a))v 1p 6(17)[6.E.27?"27":"2O"](a);7(1C a=="23"){B m=/^[^<]*(<(.|\\s)+>)[^>]*$/.2Q(a);7(m)a=6.3k([m[1]]);J v 1p 6(c).2o(a)}v q.6r(a.1l==2y&&a||(a.3Y||a.I&&a!=1w&&!a.24&&a[0]!=T&&a[0].24)&&6.3M(a)||[a])};7(1C $!="T")6.2S$=$;B $=6;6.E=6.8p={3Y:"1.1.2",8q:u(){v q.I},I:0,2b:u(1T){v 1T==T?6.3M(q):q[1T]},2r:u(a){B L=6(a);L.6p=q;v L},6r:u(a){q.I=0;[].1g.14(q,a);v q},K:u(E,1E){v 6.K(q,E,1E)},2h:u(1c){B 4c=-1;q.K(u(i){7(q==1c)4c=i});v 4c},1I:u(1Y,O,C){B 1c=1Y;7(1Y.1l==3t)7(O==T)v q.I&&6[C||"1I"](q[0],1Y)||T;J{1c={};1c[1Y]=O}v q.K(u(2h){P(B H 1x 1c)6.1I(C?q.1q:q,H,6.H(q,1c[H],C,2h,H))})},1m:u(1Y,O)
 {v q.1I(1Y,O,"30")},2L:u(e){7(1C e=="23")v q.3u().3r(17.8t(e));B t="";6.K(e||q,u(){6.K(q.2I,u(){7(q.24!=8)t+=q.24!=1?q.60:6.E.2L([q])})});v t},2K:u(){B a=6.3k(1A);v q.K(u(){B b=a[0].3l(U);q.11.2X(b,q);22(b.1b)b=b.1b;b.4C(q)})},3r:u(){v q.3j(1A,U,1,u(a){q.4C(a)})},5i:u(){v q.3j(1A,U,-1,u(a){q.2X(a,q.1b)})},5j:u(){v q.3j(1A,12,1,u(a){q.11.2X(a,q)})},5t:u(){v q.3j(1A,12,-1,u(a){q.11.2X(a,q.2e)})},4g:u(){v q.6p||6([])},2o:u(t){v q.2r(6.31(q,u(a){v 6.2o(t,a)}),t)},4Y:u(4N){v q.2r(6.31(q,u(a){B a=a.3l(4N!=T?4N:U);a.$1H=16;v a}))},1D:u(t){v q.2r(6.1t(t)&&6.2q(q,u(2z,2h){v t.14(2z,[2h])})||6.3z(t,q))},2g:u(t){v q.2r(t.1l==3t&&6.3z(t,q,U)||6.2q(q,u(a){v(t.1l==2y||t.3Y)?6.3y(a,t)<0:a!=t}))},1M:u(t){v q.2r(6.2k(q.2b(),t.1l==3t?6(t).2b():t.I!=T&&(!t.1f||t.1f=="8v")?t:[t]))},4l:u(1s){v 1s?6.1D(1s,q).r.I>0:12},1a:u(1a){v 1a==T?(q.I?q[0].O:16):q.1I("O",1a)},4U:u(1a){v 1a==T?(q.I?q[0].2t:16):q.3u().3r(1a)},3j:u(1E,1P,3Z,E){B 4Y=q.I>1;B a=6.3k(1E);7(3Z<0)a.8w();v q.K(u(){B 1c=q;7(1P&&6.1f(q,"1P")&&6
 .1f(a[0],"3m"))1c=q.5J("20")[0]||q.4C(17.6n("20"));6.K(a,u(){E.14(1c,[4Y?q.3l(U):q])})})}};6.1z=6.E.1z=u(){B 1O=1A[0],a=1;7(1A.I==1){1O=q;a=0}B H;22(H=1A[a++])P(B i 1x H)1O[i]=H[i];v 1O};6.1z({8x:u(){7(6.2S$)$=6.2S$;v 6},1t:u(E){v!!E&&1C E!="23"&&!E.1f&&1C E[0]=="T"&&/u/i.1n(E+"")},4B:u(D){v D.66&&D.5I&&!D.5I.64},1f:u(D,Y){v D.1f&&D.1f.3K()==Y.3K()},K:u(1c,E,1E){7(1c.I==T)P(B i 1x 1c)E.14(1c[i],1E||[i,1c[i]]);J P(B i=0,6q=1c.I;i<6q;i++)7(E.14(1c[i],1E||[i,1c[i]])===12)3O;v 1c},H:u(D,O,C,2h,H){7(6.1t(O))O=O.3n(D,[2h]);B 6s=/z-?2h|7P-?8A|1d|58|8B-?28/i;v O&&O.1l==3Q&&C=="30"&&!6s.1n(H)?O+"4S":O},19:{1M:u(D,c){6.K(c.3o(/\\s+/),u(i,Q){7(!6.19.2V(D.19,Q))D.19+=(D.19?" ":"")+Q})},2f:u(D,c){D.19=c?6.2q(D.19.3o(/\\s+/),u(Q){v!6.19.2V(c,Q)}).6t(" "):""},2V:u(t,c){t=t.19||t;c=c.1R(/([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:])/g,"\\\\$1");v t&&1p 4v("(^|\\\\s)"+c+"(\\\\s|$)").1n(t)}},4d:u(e,o,f){P(B i 1x o){e.1q["1N"+i]=e.1q[i];e.1q[i]=o[i]}f.14(e,[]);P(B i 1x o)e.1q[i]=e.1q[
 "1N"+i]},1m:u(e,p){7(p=="28"||p=="3V"){B 1N={},46,3P,d=["7d","8C","8D","8E"];6.K(d,u(){1N["8F"+q]=0;1N["8G"+q+"8H"]=0});6.4d(e,1N,u(){7(6.1m(e,"1h")!="1Z"){46=e.8I;3P=e.8J}J{e=6(e.3l(U)).2o(":4j").5l("2Z").4g().1m({4n:"1G",45:"8K",1h:"2D",7I:"0",8M:"0"}).5z(e.11)[0];B 3d=6.1m(e.11,"45");7(3d==""||3d=="4b")e.11.1q.45="6x";46=e.6y;3P=e.6z;7(3d==""||3d=="4b")e.11.1q.45="4b";e.11.33(e)}});v p=="28"?46:3P}v 6.30(e,p)},30:u(D,H,53){B L;7(H=="1d"&&6.W.1j)v 6.1I(D.1q,"1d");7(H=="4h"||H=="2v")H=6.W.1j?"3T":"2v";7(!53&&D.1q[H])L=D.1q[H];J 7(17.44&&17.44.4W){7(H=="2v"||H=="3T")H="4h";H=H.1R(/([A-Z])/g,"-$1").4m();B Q=17.44.4W(D,16);7(Q)L=Q.55(H);J 7(H=="1h")L="1Z";J 6.4d(D,{1h:"2D"},u(){B c=17.44.4W(q,"");L=c&&c.55(H)||""})}J 7(D.51){B 56=H.1R(/\\-(\\w)/g,u(m,c){v c.3K()});L=D.51[H]||D.51[56]}v L},3k:u(a){B r=[];6.K(a,u(i,1r){7(!1r)v;7(1r.1l==3Q)1r=1r.6C();7(1C 1r=="23"){B s=6.35(1r),1V=17.6n("1V"),2i=[];B 2K=!s.18("<1u")&&[1,"<42>","</42>"]||(!s.18("<6D")||!s.18("<20")||!s.18("<6E"))&&[1,"<1P
 >","</1P>"]||!s.18("<3m")&&[2,"<1P><20>","</20></1P>"]||(!s.18("<6F")||!s.18("<6G"))&&[3,"<1P><20><3m>","</3m></20></1P>"]||[0,"",""];1V.2t=2K[1]+s+2K[2];22(2K[0]--)1V=1V.1b;7(6.W.1j){7(!s.18("<1P")&&s.18("<20")<0)2i=1V.1b&&1V.1b.2I;J 7(2K[1]=="<1P>"&&s.18("<20")<0)2i=1V.2I;P(B n=2i.I-1;n>=0;--n)7(6.1f(2i[n],"20")&&!2i[n].2I.I)2i[n].11.33(2i[n])}1r=[];P(B i=0,l=1V.2I.I;i<l;i++)1r.1g(1V.2I[i])}7(1r.I===0&&!6.1f(1r,"3w"))v;7(1r[0]==T||6.1f(1r,"3w"))r.1g(1r);J r=6.2k(r,1r)});v r},1I:u(D,Y,O){B 2j=6.4B(D)?{}:{"P":"6J","6L":"19","4h":6.W.1j?"3T":"2v",2v:6.W.1j?"3T":"2v",2t:"2t",19:"19",O:"O",2W:"2W",2Z:"2Z",89:"6N",2Y:"2Y"};7(Y=="1d"&&6.W.1j&&O!=T){D.58=1;v D.1D=D.1D.1R(/4i\\([^\\)]*\\)/6O,"")+(O==1?"":"4i(1d="+O*6g+")")}J 7(Y=="1d"&&6.W.1j)v D.1D?4T(D.1D.6P(/4i\\(1d=(.*)\\)/)[1])/6g:1;7(Y=="1d"&&6.W.3h&&O==1)O=0.6R;7(2j[Y]){7(O!=T)D[2j[Y]]=O;v D[2j[Y]]}J 7(O==T&&6.W.1j&&6.1f(D,"3w")&&(Y=="81"||Y=="80"))v D.6T(Y).60;J 7(D.66){7(O!=T)D.6V(Y,O);7(6.W.1j&&/5E|3e/.1n(Y)&&!6.4B(D))v D.36(Y,2)
 ;v D.36(Y)}J{Y=Y.1R(/-([a-z])/6W,u(z,b){v b.3K()});7(O!=T)D[Y]=O;v D[Y]}},35:u(t){v t.1R(/^\\s+|\\s+$/g,"")},3M:u(a){B r=[];7(a.1l!=2y)P(B i=0,2R=a.I;i<2R;i++)r.1g(a[i]);J r=a.3N(0);v r},3y:u(b,a){P(B i=0,2R=a.I;i<2R;i++)7(a[i]==b)v i;v-1},2k:u(2u,3H){B r=[].3N.3n(2u,0);P(B i=0,5b=3H.I;i<5b;i++)7(6.3y(3H[i],r)==-1)2u.1g(3H[i]);v 2u},2q:u(1U,E,4k){7(1C E=="23")E=1p 4w("a","i","v "+E);B 1i=[];P(B i=0,2z=1U.I;i<2z;i++)7(!4k&&E(1U[i],i)||4k&&!E(1U[i],i))1i.1g(1U[i]);v 1i},31:u(1U,E){7(1C E=="23")E=1p 4w("a","v "+E);B 1i=[],r=[];P(B i=0,2z=1U.I;i<2z;i++){B 1a=E(1U[i],i);7(1a!==16&&1a!=T){7(1a.1l!=2y)1a=[1a];1i=1i.6Z(1a)}}B r=1i.I?[1i[0]]:[];5f:P(B i=1,5e=1i.I;i<5e;i++){P(B j=0;j<i;j++)7(1i[i]==r[j])5F 5f;r.1g(1i[i])}v r}});1p u(){B b=7L.71.4m();6.W={2N:/5D/.1n(b),3f:/3f/.1n(b),1j:/1j/.1n(b)&&!/3f/.1n(b),3h:/3h/.1n(b)&&!/(72|5D)/.1n(b)};6.7H=!6.W.1j||17.74=="75"};6.K({5u:"a.11",4z:"6.4z(a)",76:"6.2a(a,2,\'2e\')",7D:"6.2a(a,2,\'5s\')",78:"6.2B(a.11.1b,a)",79:"6.2B(a.1b)"},u(i,n){6.E[i]=u(a
 ){B L=6.31(q,n);7(a&&1C a=="23")L=6.3z(a,L);v q.2r(L)}});6.K({5z:"3r",7b:"5i",2X:"5j",7e:"5t"},u(i,n){6.E[i]=u(){B a=1A;v q.K(u(){P(B j=0,2R=a.I;j<2R;j++)6(a[j])[n](q)})}});6.K({5l:u(1Y){6.1I(q,1Y,"");q.7g(1Y)},7h:u(c){6.19.1M(q,c)},7i:u(c){6.19.2f(q,c)},7k:u(c){6.19[6.19.2V(q,c)?"2f":"1M"](q,c)},2f:u(a){7(!a||6.1D(a,[q]).r.I)q.11.33(q)},3u:u(){22(q.1b)q.33(q.1b)}},u(i,n){6.E[i]=u(){v q.K(n,1A)}});6.K(["5q","5n","5p","5v"],u(i,n){6.E[n]=u(1T,E){v q.1D(":"+n+"("+1T+")",E)}});6.K(["28","3V"],u(i,n){6.E[n]=u(h){v h==T?(q.I?6.1m(q[0],n):16):q.1m(n,h.1l==3t?h:h+"4S")}});6.1z({1s:{"":"m[2]==\'*\'||6.1f(a,m[2])","#":"a.36(\'2J\')==m[2]",":":{5n:"i<m[3]-0",5p:"i>m[3]-0",2a:"m[3]-0==i",5q:"m[3]-0==i",2u:"i==0",2T:"i==r.I-1",5R:"i%2==0",5S:"i%2","2a-3s":"6.2a(a.11.1b,m[3],\'2e\',a)==a","2u-3s":"6.2a(a.11.1b,1,\'2e\')==a","2T-3s":"6.2a(a.11.7n,1,\'5s\')==a","7p-3s":"6.2B(a.11.1b).I==1",5u:"a.1b",3u:"!a.1b",5v:"6.E.2L.14([a]).18(m[3])>=0",3i:\'a.C!="1G"&&6.1m(a,"1h")!="1Z"&&6.1m(a,"4n")!="1G"\'
 ,1G:\'a.C=="1G"||6.1m(a,"1h")=="1Z"||6.1m(a,"4n")=="1G"\',7v:"!a.2W",2W:"a.2W",2Z:"a.2Z",2Y:"a.2Y||6.1I(a,\'2Y\')",2L:"a.C==\'2L\'",4j:"a.C==\'4j\'",5x:"a.C==\'5x\'",4G:"a.C==\'4G\'",5y:"a.C==\'5y\'",4R:"a.C==\'4R\'",5A:"a.C==\'5A\'",5B:"a.C==\'5B\'",3x:\'a.C=="3x"||6.1f(a,"3x")\',5C:"/5C|42|7A|3x/i.1n(a.1f)"},".":"6.19.2V(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.18(m[4])","$=":"z&&z.2U(z.I - m[4].I,m[4].I)==m[4]","*=":"z&&z.18(m[4])>=0","":"z",4u:u(m){v["",m[1],m[3],m[2],m[5]]},5P:"z=a[m[3]];7(!z||/5E|3e/.1n(m[3]))z=6.1I(a,m[3]);"},"[":"6.2o(m[2],a).I"},5M:[/^\\[ *(@)([a-2m-3C-]*) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/i,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([a-2m-3C-]*)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/i,/^([:.#]*)([a-2m-3C*-]*)/i],1Q:[/^(\\/?\\.\\.)/,"a.11",/^(>|\\/)/,"6.2B(a.1b)",/^(\\+)/,"6.2a(a,2,\'2e\')",/^(~)/,u(a){B s=6.2B(a.11.1b);v s.3N(6.3y(a,s)+1)}],3z:u(1s,1U,2g){B 1N,Q=[];22(1s&&1s!=1N){1N=1s;B f=6.1D(1s,1U,2g);1s=f.t.1R(/^\\s*,\\s*/,"");Q=2g
 ?1U=f.r:6.2k(Q,f.r)}v Q},2o:u(t,1B){7(1C t!="23")v[t];7(1B&&!1B.24)1B=16;1B=1B||17;7(!t.18("//")){1B=1B.4H;t=t.2U(2,t.I)}J 7(!t.18("/")){1B=1B.4H;t=t.2U(1,t.I);7(t.18("/")>=1)t=t.2U(t.18("/"),t.I)}B L=[1B],2c=[],2T=16;22(t&&2T!=t){B r=[];2T=t;t=6.35(t).1R(/^\\/\\//i,"");B 3B=12;B 1J=/^[\\/>]\\s*([a-2m-9*-]+)/i;B m=1J.2Q(t);7(m){6.K(L,u(){P(B c=q.1b;c;c=c.2e)7(c.24==1&&(6.1f(c,m[1])||m[1]=="*"))r.1g(c)});L=r;t=t.1R(1J,"");7(t.18(" ")==0)5F;3B=U}J{P(B i=0;i<6.1Q.I;i+=2){B 1J=6.1Q[i];B m=1J.2Q(t);7(m){r=L=6.31(L,6.1t(6.1Q[i+1])?6.1Q[i+1]:u(a){v 40(6.1Q[i+1])});t=6.35(t.1R(1J,""));3B=U;3O}}}7(t&&!3B){7(!t.18(",")){7(L[0]==1B)L.4L();6.2k(2c,L);r=L=[1B];t=" "+t.2U(1,t.I)}J{B 34=/^([a-2m-3C-]+)(#)([a-2m-9\\\\*2S-]*)/i;B m=34.2Q(t);7(m){m=[0,m[2],m[3],m[1]]}J{34=/^([#.]?)([a-2m-9\\\\*2S-]*)/i;m=34.2Q(t)}7(m[1]=="#"&&L[L.I-1].4X){B 2l=L[L.I-1].4X(m[2]);7(6.W.1j&&2l&&2l.2J!=m[2])2l=6(\'[@2J="\'+m[2]+\'"]\',L[L.I-1])[0];L=r=2l&&(!m[3]||6.1f(2l,m[3]))?[2l]:[]}J{7(m[1]==".")B 4r=1p 4v("(^|\\\\s)
 "+m[2]+"(\\\\s|$)");6.K(L,u(){B 3E=m[1]!=""||m[0]==""?"*":m[2];7(6.1f(q,"7J")&&3E=="*")3E="3g";6.2k(r,m[1]!=""&&L.I!=1?6.4x(q,[],m[1],m[2],4r):q.5J(3E))});7(m[1]=="."&&L.I==1)r=6.2q(r,u(e){v 4r.1n(e.19)});7(m[1]=="#"&&L.I==1){B 5K=r;r=[];6.K(5K,u(){7(q.36("2J")==m[2]){r=[q];v 12}})}L=r}t=t.1R(34,"")}}7(t){B 1a=6.1D(t,r);L=r=1a.r;t=6.35(1a.t)}}7(L&&L[0]==1B)L.4L();6.2k(2c,L);v 2c},1D:u(t,r,2g){22(t&&/^[a-z[({<*:.#]/i.1n(t)){B p=6.5M,m;6.K(p,u(i,1J){m=1J.2Q(t);7(m){t=t.7M(m[0].I);7(6.1s[m[1]].4u)m=6.1s[m[1]].4u(m);v 12}});7(m[1]==":"&&m[2]=="2g")r=6.1D(m[3],r,U).r;J 7(m[1]=="."){B 1J=1p 4v("(^|\\\\s)"+m[2]+"(\\\\s|$)");r=6.2q(r,u(e){v 1J.1n(e.19||"")},2g)}J{B f=6.1s[m[1]];7(1C f!="23")f=6.1s[m[1]][m[2]];40("f = u(a,i){"+(6.1s[m[1]].5P||"")+"v "+f+"}");r=6.2q(r,f,2g)}}v{r:r,t:t}},4x:u(o,r,1Q,Y,1J){P(B s=o.1b;s;s=s.2e)7(s.24==1){B 1M=U;7(1Q==".")1M=s.19&&1J.1n(s.19);J 7(1Q=="#")1M=s.36("2J")==Y;7(1M)r.1g(s);7(1Q=="#"&&r.I)3O;7(s.1b)6.4x(s,r,1Q,Y,1J)}v r},4z:u(D){B 4A=[];B Q=D.11;22(Q&&Q
 !=17){4A.1g(Q);Q=Q.11}v 4A},2a:u(Q,1i,3Z,D){1i=1i||1;B 1T=0;P(;Q;Q=Q[3Z]){7(Q.24==1)1T++;7(1T==1i||1i=="5R"&&1T%2==0&&1T>1&&Q==D||1i=="5S"&&1T%2==1&&Q==D)v Q}},2B:u(n,D){B r=[];P(;n;n=n.2e){7(n.24==1&&(!D||n!=D))r.1g(n)}v r}});6.G={1M:u(S,C,1o,F){7(6.W.1j&&S.3L!=T)S=1w;7(F)1o.F=F;7(!1o.2A)1o.2A=q.2A++;7(!S.$1H)S.$1H={};B 38=S.$1H[C];7(!38){38=S.$1H[C]={};7(S["39"+C])38[0]=S["39"+C]}38[1o.2A]=1o;S["39"+C]=q.5Y;7(!q.1k[C])q.1k[C]=[];q.1k[C].1g(S)},2A:1,1k:{},2f:u(S,C,1o){7(S.$1H){B i,j,k;7(C&&C.C){1o=C.1o;C=C.C}7(C&&S.$1H[C])7(1o)5U S.$1H[C][1o.2A];J P(i 1x S.$1H[C])5U S.$1H[C][i];J P(j 1x S.$1H)q.2f(S,j);P(k 1x S.$1H[C])7(k){k=U;3O}7(!k)S["39"+C]=16}},1S:u(C,F,S){F=6.3M(F||[]);7(!S)6.K(q.1k[C]||[],u(){6.G.1S(C,F,q)});J{B 1o=S["39"+C],1a,E=6.1t(S[C]);7(1o){F.61(q.2j({C:C,1O:S}));7((1a=1o.14(S,F))!==12)q.4F=U}7(E&&1a!==12)S[C]();q.4F=12}},5Y:u(G){7(1C 6=="T"||6.G.4F)v;G=6.G.2j(G||1w.G||{});B 3R;B c=q.$1H[G.C];B 1E=[].3N.3n(1A,1);1E.61(G);P(B j 1x c){1E[0].1o=c[j];1E[0].F=c[j].F;7(c[j].
 14(q,1E)===12){G.2n();G.2H();3R=12}}7(6.W.1j)G.1O=G.2n=G.2H=G.1o=G.F=16;v 3R},2j:u(G){7(!G.1O&&G.63)G.1O=G.63;7(G.65==T&&G.67!=T){B e=17.4H,b=17.64;G.65=G.67+(e.68||b.68);G.7Y=G.7Z+(e.6c||b.6c)}7(6.W.2N&&G.1O.24==3){B 3a=G;G=6.1z({},3a);G.1O=3a.1O.11;G.2n=u(){v 3a.2n()};G.2H=u(){v 3a.2H()}}7(!G.2n)G.2n=u(){q.3R=12};7(!G.2H)G.2H=u(){q.82=U};v G}};6.E.1z({3U:u(C,F,E){v q.K(u(){6.G.1M(q,C,E||F,F)})},6u:u(C,F,E){v q.K(u(){6.G.1M(q,C,u(G){6(q).6f(G);v(E||F).14(q,1A)},F)})},6f:u(C,E){v q.K(u(){6.G.2f(q,C,E)})},1S:u(C,F){v q.K(u(){6.G.1S(C,F,q)})},3X:u(){B a=1A;v q.6j(u(e){q.4M=q.4M==0?1:0;e.2n();v a[q.4M].14(q,[e])||12})},83:u(f,g){u 4O(e){B p=(e.C=="41"?e.84:e.85)||e.86;22(p&&p!=q)2G{p=p.11}2w(e){p=q};7(p==q)v 12;v(e.C=="41"?f:g).14(q,[e])}v q.41(4O).6k(4O)},27:u(f){7(6.3W)f.14(17,[6]);J{6.3c.1g(u(){v f.14(q,[6])})}v q}});6.1z({3W:12,3c:[],27:u(){7(!6.3W){6.3W=U;7(6.3c){6.K(6.3c,u(){q.14(17)});6.3c=16}7(6.W.3h||6.W.3f)17.87("6o",6.27,12)}}});1p u(){6.K(("88,8a,2O,8b,8d,52,6j,8e,"+"8f,8g,
 8h,41,6k,8j,42,"+"4R,8k,8l,8m,2C").3o(","),u(i,o){6.E[o]=u(f){v f?q.3U(o,f):q.1S(o)}});7(6.W.3h||6.W.3f)17.8n("6o",6.27,12);J 7(6.W.1j){17.8o("<8r"+"8s 2J=62 8u=U "+"3e=//:><\\/2d>");B 2d=17.4X("62");7(2d)2d.37=u(){7(q.3D!="1X")v;q.11.33(q);6.27()};2d=16}J 7(6.W.2N)6.50=3L(u(){7(17.3D=="8y"||17.3D=="1X"){4p(6.50);6.50=16;6.27()}},10);6.G.1M(1w,"2O",6.27)};7(6.W.1j)6(1w).6u("52",u(){B 1k=6.G.1k;P(B C 1x 1k){B 4Z=1k[C],i=4Z.I;7(i&&C!=\'52\')6w 6.G.2f(4Z[i-1],C);22(--i)}});6.E.1z({6A:u(V,21,M){q.2O(V,21,M,1)},2O:u(V,21,M,1W){7(6.1t(V))v q.3U("2O",V);M=M||u(){};B C="5d";7(21)7(6.1t(21)){M=21;21=16}J{21=6.3g(21);C="5V"}B 4e=q;6.3v({V:V,C:C,F:21,1W:1W,1X:u(2P,15){7(15=="2M"||!1W&&15=="5L")4e.1I("2t",2P.3G).4V().K(M,[2P.3G,15,2P]);J M.14(4e,[2P.3G,15,2P])}});v q},6B:u(){v 6.3g(q)},4V:u(){v q.2o("2d").K(u(){7(q.3e)6.59(q.3e);J 6.4a(q.2L||q.6H||q.2t||"")}).4g()}});7(!1w.3p)3p=u(){v 1p 6I("6K.6M")};6.K("5m,5Q,5O,5W,5N,5H".3o(","),u(i,o){6.E[o]=u(f){v q.3U(o,f)}});6.1z({2b:u(V,F,M,C,1W){7(6.1t
 (F)){M=F;F=16}v 6.3v({V:V,F:F,2M:M,4t:C,1W:1W})},6Q:u(V,F,M,C){v 6.2b(V,F,M,C,1)},59:u(V,M){v 6.2b(V,16,M,"2d")},6S:u(V,F,M){v 6.2b(V,F,M,"6m")},6U:u(V,F,M,C){7(6.1t(F)){M=F;F={}}v 6.3v({C:"5V",V:V,F:F,2M:M,4t:C})},6X:u(29){6.3q.29=29},6Y:u(5c){6.1z(6.3q,5c)},3q:{1k:U,C:"5d",29:0,5r:"70/x-73-3w-77",5h:U,48:U,F:16},3S:{},3v:u(s){s=6.1z({},6.3q,s);7(s.F){7(s.5h&&1C s.F!="23")s.F=6.3g(s.F);7(s.C.4m()=="2b"){s.V+=((s.V.18("?")>-1)?"&":"?")+s.F;s.F=16}}7(s.1k&&!6.4E++)6.G.1S("5m");B 4y=12;B N=1p 3p();N.7j(s.C,s.V,s.48);7(s.F)N.3A("7l-7m",s.5r);7(s.1W)N.3A("7o-4K-7q",6.3S[s.V]||"7s, 7t 7w 7x 4o:4o:4o 7z");N.3A("X-7B-7C","3p");7(N.7E)N.3A("7F","7G");7(s.5G)s.5G(N);7(s.1k)6.G.1S("5H",[N,s]);B 37=u(4s){7(N&&(N.3D==4||4s=="29")){4y=U;7(3I){4p(3I);3I=16}B 15;2G{15=6.5Z(N)&&4s!="29"?s.1W&&6.69(N,s.V)?"5L":"2M":"2C";7(15!="2C"){B 3F;2G{3F=N.4P("6b-4K")}2w(e){}7(s.1W&&3F)6.3S[s.V]=3F;B F=6.6i(N,s.4t);7(s.2M)s.2M(F,15);7(s.1k)6.G.1S("5N",[N,s])}J 6.3J(s,N,15)}2w(e){15="2C";6.3J(s,N,15,e)}7(s.1k)6.
 G.1S("5O",[N,s]);7(s.1k&&!--6.4E)6.G.1S("5Q");7(s.1X)s.1X(N,15);7(s.48)N=16}};B 3I=3L(37,13);7(s.29>0)57(u(){7(N){N.7N();7(!4y)37("29")}},s.29);2G{N.7Q(s.F)}2w(e){6.3J(s,N,16,e)}7(!s.48)37();v N},3J:u(s,N,15,e){7(s.2C)s.2C(N,15,e);7(s.1k)6.G.1S("5W",[N,s,e])},4E:0,5Z:u(r){2G{v!r.15&&7V.7W=="4G:"||(r.15>=5X&&r.15<7X)||r.15==6d||6.W.2N&&r.15==T}2w(e){}v 12},69:u(N,V){2G{B 6e=N.4P("6b-4K");v N.15==6d||6e==6.3S[V]||6.W.2N&&N.15==T}2w(e){}v 12},6i:u(r,C){B 4Q=r.4P("8c-C");B F=!C&&4Q&&4Q.18("N")>=0;F=C=="N"||F?r.8i:r.3G;7(C=="2d")6.4a(F);7(C=="6m")40("F = "+F);7(C=="4U")6("<1V>").4U(F).4V();v F},3g:u(a){B s=[];7(a.1l==2y||a.3Y)6.K(a,u(){s.1g(2x(q.Y)+"="+2x(q.O))});J P(B j 1x a)7(a[j]&&a[j].1l==2y)6.K(a[j],u(){s.1g(2x(j)+"="+2x(q))});J s.1g(2x(j)+"="+2x(a[j]));v s.6t("&")},4a:u(F){7(1w.54)1w.54(F);J 7(6.W.2N)1w.57(F,0);J 40.3n(1w,F)}});6.E.1z({1L:u(R,M){B 1G=q.1D(":1G");R?1G.26({28:"1L",3V:"1L",1d:"1L"},R,M):1G.K(u(){q.1q.1h=q.2E?q.2E:"";7(6.1m(q,"1h")=="1Z")q.1q.1h="2D"});v q},1K:u(R,M){B
  3i=q.1D(":3i");R?3i.26({28:"1K",3V:"1K",1d:"1K"},R,M):3i.K(u(){q.2E=q.2E||6.1m(q,"1h");7(q.2E=="1Z")q.2E="2D";q.1q.1h="1Z"});v q},5g:6.E.3X,3X:u(E,4I){B 1E=1A;v 6.1t(E)&&6.1t(4I)?q.5g(E,4I):q.K(u(){6(q)[6(q).4l(":1G")?"1L":"1K"].14(6(q),1E)})},7a:u(R,M){v q.26({28:"1L"},R,M)},7c:u(R,M){v q.26({28:"1K"},R,M)},7f:u(R,M){v q.K(u(){B 5k=6(q).4l(":1G")?"1L":"1K";6(q).26({28:5k},R,M)})},7r:u(R,M){v q.26({1d:"1L"},R,M)},7u:u(R,M){v q.26({1d:"1K"},R,M)},7y:u(R,43,M){v q.26({1d:43},R,M)},26:u(H,R,1v,M){v q.1F(u(){q.2F=6.1z({},H);B 1u=6.R(R,1v,M);P(B p 1x H){B e=1p 6.3b(q,1u,p);7(H[p].1l==3Q)e.2s(e.Q(),H[p]);J e[H[p]](H)}})},1F:u(C,E){7(!E){E=C;C="3b"}v q.K(u(){7(!q.1F)q.1F={};7(!q.1F[C])q.1F[C]=[];q.1F[C].1g(E);7(q.1F[C].I==1)E.14(q)})}});6.1z({R:u(R,1v,E){B 1u=R&&R.1l==7K?R:{1X:E||!E&&1v||6.1t(R)&&R,25:R,1v:E&&1v||1v&&1v.1l!=4w&&1v};1u.25=(1u.25&&1u.25.1l==3Q?1u.25:{7R:7S,7T:5X}[1u.25])||7U;1u.1N=1u.1X;1u.1X=u(){6.6a(q,"3b");7(6.1t(1u.1N))1u.1N.14(q)};v 1u},1v:{},1F:{},6a:u(D,C){C=C||"3b";
 7(D.1F&&D.1F[C]){D.1F[C].4L();B f=D.1F[C][0];7(f)f.14(D)}},3b:u(D,1e,H){B z=q;B y=D.1q;B 4D=6.1m(D,"1h");y.5T="1G";z.a=u(){7(1e.49)1e.49.14(D,[z.2p]);7(H=="1d")6.1I(y,"1d",z.2p);J 7(6l(z.2p))y[H]=6l(z.2p)+"4S";y.1h="2D"};z.6v=u(){v 4T(6.1m(D,H))};z.Q=u(){B r=4T(6.30(D,H));v r&&r>-8z?r:z.6v()};z.2s=u(4f,43){z.4J=(1p 5o()).5w();z.2p=4f;z.a();z.4q=3L(u(){z.49(4f,43)},13)};z.1L=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();1e.1L=U;z.2s(0,D.1y[H]);7(H!="1d")y[H]="5a"};z.1K=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();1e.1K=U;z.2s(D.1y[H],0)};z.3X=u(){7(!D.1y)D.1y={};D.1y[H]=q.Q();7(4D=="1Z"){1e.1L=U;7(H!="1d")y[H]="5a";z.2s(0,D.1y[H])}J{1e.1K=U;z.2s(D.1y[H],0)}};z.49=u(32,47){B t=(1p 5o()).5w();7(t>1e.25+z.4J){4p(z.4q);z.4q=16;z.2p=47;z.a();7(D.2F)D.2F[H]=U;B 2c=U;P(B i 1x D.2F)7(D.2F[i]!==U)2c=12;7(2c){y.5T="";y.1h=4D;7(6.1m(D,"1h")=="1Z")y.1h="2D";7(1e.1K)y.1h="1Z";7(1e.1K||1e.1L)P(B p 1x D.2F)7(p=="1d")6.1I(y,p,D.1y[p]);J y[p]=""}7(2c&&6.1t(1e.1X))1e.1X.14(D)}J{B n=t-q.4J;B p=n/1e.25;z.2p=1e.1v&&6.1v[1e.1v]
 ?6.1v[1e.1v](p,n,32,(47-32),1e.25):((-6h.7O(p*6h.8L)/2)+0.5)*(47-32)+32;z.a()}}}})}',62,545,'||||||jQuery|if|||||||||||||||||||this||||function|return||||||var|type|elem|fn|data|event|prop|length|else|each|ret|callback|xml|value|for|cur|speed|element|undefined|true|url|browser||name|||parentNode|false||apply|status|null|document|indexOf|className|val|firstChild|obj|opacity|options|nodeName|push|display|result|msie|global|constructor|css|test|handler|new|style|arg|expr|isFunction|opt|easing|window|in|orig|extend|arguments|context|typeof|filter|args|queue|hidden|events|attr|re|hide|show|add|old|target|table|token|replace|trigger|num|elems|div|ifModified|complete|key|none|tbody|params|while|string|nodeType|duration|animate|ready|height|timeout|nth|get|done|script|nextSibling|remove|not|index|tb|fix|merge|oid|z0|preventDefault|find|now|grep|pushStack|custom|innerHTML|first|cssFloat|catch|encodeURIComponent|Array|el|guid|sibling|error|block|oldblock|curAnim|try|stopPropagation|childNodes
 |id|wrap|text|success|safari|load|res|exec|al|_|last|substr|has|disabled|insertBefore|selected|checked|curCSS|map|firstNum|removeChild|re2|trim|getAttribute|onreadystatechange|handlers|on|originalEvent|fx|readyList|parPos|src|opera|param|mozilla|visible|domManip|clean|cloneNode|tr|call|split|XMLHttpRequest|ajaxSettings|append|child|String|empty|ajax|form|button|inArray|multiFilter|setRequestHeader|foundToken|9_|readyState|tag|modRes|responseText|second|ival|handleError|toUpperCase|setInterval|makeArray|slice|break|oWidth|Number|returnValue|lastModified|styleFloat|bind|width|isReady|toggle|jquery|dir|eval|mouseover|select|to|defaultView|position|oHeight|lastNum|async|step|globalEval|static|pos|swap|self|from|end|float|alpha|radio|inv|is|toLowerCase|visibility|00|clearInterval|timer|rec|isTimeout|dataType|_resort|RegExp|Function|getAll|requestDone|parents|matched|isXMLDoc|appendChild|oldDisplay|active|triggered|file|documentElement|fn2|startTime|Modified|shift|lastToggle|deep|handleHo
 ver|getResponseHeader|ct|submit|px|parseFloat|html|evalScripts|getComputedStyle|getElementById|clone|els|safariTimer|currentStyle|unload|force|execScript|getPropertyValue|newProp|setTimeout|zoom|getScript|1px|sl|settings|GET|rl|check|_toggle|processData|prepend|before|state|removeAttr|ajaxStart|lt|Date|gt|eq|contentType|previousSibling|after|parent|contains|getTime|checkbox|password|appendTo|image|reset|input|webkit|href|continue|beforeSend|ajaxSend|ownerDocument|getElementsByTagName|tmp|notmodified|parse|ajaxSuccess|ajaxComplete|_prefix|ajaxStop|even|odd|overflow|delete|POST|ajaxError|200|handle|httpSuccess|nodeValue|unshift|__ie_init|srcElement|body|pageX|tagName|clientX|scrollLeft|httpNotModified|dequeue|Last|scrollTop|304|xmlRes|unbind|100|Math|httpData|click|mouseout|parseInt|json|createElement|DOMContentLoaded|prevObject|ol|setArray|exclude|join|one|max|do|relative|clientHeight|clientWidth|loadIfModified|serialize|toString|thead|tfoot|td|th|textContent|ActiveXObject|htmlFor|Mi
 crosoft|class|XMLHTTP|readOnly|gi|match|getIfModified|9999|getJSON|getAttributeNode|post|setAttribute|ig|ajaxTimeout|ajaxSetup|concat|application|userAgent|compatible|www|compatMode|CSS1Compat|next|urlencoded|siblings|children|slideDown|prependTo|slideUp|Top|insertAfter|slideToggle|removeAttribute|addClass|removeClass|open|toggleClass|Content|Type|lastChild|If|only|Since|fadeIn|Thu|01|fadeOut|enabled|Jan|1970|fadeTo|GMT|textarea|Requested|With|prev|overrideMimeType|Connection|close|boxModel|right|object|Object|navigator|substring|abort|cos|font|send|slow|600|fast|400|location|protocol|300|pageY|clientY|method|action|cancelBubble|hover|fromElement|toElement|relatedTarget|removeEventListener|blur|readonly|focus|resize|content|scroll|dblclick|mousedown|mouseup|mousemove|responseXML|change|keydown|keypress|keyup|addEventListener|write|prototype|size|scr|ipt|createTextNode|defer|FORM|reverse|noConflict|loaded|10000|weight|line|Bottom|Right|Left|padding|border|Width|offsetHeight|offsetWid
 th|absolute|PI|left'.split('|'),0,{}))

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/js/jquery.treeview.js
----------------------------------------------------------------------
diff --git a/asciidoc/js/jquery.treeview.js b/asciidoc/js/jquery.treeview.js
new file mode 100644
index 0000000..0a5f251
--- /dev/null
+++ b/asciidoc/js/jquery.treeview.js
@@ -0,0 +1,239 @@
+/*
+ * Treeview 1.2 - jQuery plugin to hide and show branches of a tree
+ *
+ * Copyright (c) 2006 J�rn Zaefferer, Myles Angell
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: $Id$
+ *
+ */
+
+/**
+ * Takes an unordered list and makes all branches collapsable.
+ *
+ * The "treeview" class is added if not already present.
+ *
+ * To hide branches on first display, mark their li elements with
+ * the class "closed". If the "collapsed" option is used, mark intially open
+ * branches with class "open".
+ *
+ * @example .treeview, .treeview ul { 
+ * 	padding: 0;
+ * 	margin: 0;
+ * 	list-style: none;
+ * }	
+ * 
+ * .treeview li { 
+ * 	margin: 0;
+ * 	padding: 4px 0 3px 20px;
+ * }
+ * 
+ * .treeview li { background: url(images/tv-item.gif) 0 0 no-repeat; }
+ * .treeview .collapsable { background-image: url(images/tv-collapsable.gif); }
+ * .treeview .expandable { background-image: url(images/tv-expandable.gif); }
+ * .treeview .last { background-image: url(images/tv-item-last.gif); }
+ * .treeview .lastCollapsable { background-image: url(images/tv-collapsable-last.gif); }
+ * .treeview .lastExpandable { background-image: url(images/tv-expandable-last.gif); }
+ * @desc The following styles are necessary in your stylesheet. There is are alternative sets of images available.
+ *
+ * @example $("ul").Treeview();
+ * @before <ul>
+ *   <li>Item 1
+ *     <ul>
+ *       <li>Item 1.1</li>
+ *     </ul>
+ *   </li>
+ *   <li class="closed">Item 2 (starts closed)
+ *     <ul>
+ *       <li>Item 2.1
+ *         <ul>
+ *           <li>Item 2.1.1</li>
+ *           <li>Item 2.1.2</li>
+ *         </ul>
+ *       </li>
+ *       <li>Item 2.2</li>
+ *     </ul>
+ *   </li>
+ *   <li>Item 3</li>
+ * </ul>
+ * @desc Basic usage example
+ *
+ * @example $("ul").Treeview({ speed: "fast", collapsed: true});
+ * @before <ul>
+ *   <li class="open">Item 1 (starts open)
+ *     <ul>
+ *       <li>Item 1.1</li>
+ *     </ul>
+ *   </li>
+ *   <li>Item 2
+ *     <ul>
+ *       <li>Item 2.1</li>
+ *       <li>Item 2.2</li>
+ *     </ul>
+ *   </li>
+ * </ul>
+ * @desc Create a treeview that starts collapsed. Toggling branches is animated.
+ *
+ * @example $("ul").Treeview({ control: #treecontrol });
+ * @before <div id="treecontrol">
+ *   <a href="#">Collapse All</a>
+ *   <a href="#">Expand All</a>
+ *   <a href="#">Toggle All</a>
+ * </div>
+ * @desc Creates a treeview that can be controlled with a few links.
+ * Very likely to be changed/improved in future versions.
+ *
+ * @param Map options Optional settings to configure treeview
+ * @option String|Number speed Speed of animation, see animate() for details. Default: none, no animation
+ * @option Boolean collapsed Start with all branches collapsed. Default: none, all expanded
+ * @option <Content> control Container for a treecontrol, see last example.
+ * @option Boolean unique Set to allow only one branch on one level to be open
+ *		   (closing siblings which opening). Default: none
+ * @option Function toggle Callback when toggling a branch.
+ * 		   Arguments: "this" refers to the UL that was shown or hidden.
+ * 		   Works only with speed option set (set speed: 1 to enable callback without animations).
+ *		   Default: none
+ * @type jQuery
+ * @name Treeview
+ * @cat Plugins/Treeview
+ */
+
+(function($) {
+
+	// classes used by the plugin
+	// need to be styled via external stylesheet, see first example
+	var CLASSES = {
+		open: "open",
+		closed: "closed",
+		expandable: "expandable",
+		collapsable: "collapsable",
+		lastCollapsable: "lastCollapsable",
+		lastExpandable: "lastExpandable",
+		last: "last",
+		hitarea: "hitarea"
+	};
+	
+	// styles for hitareas
+	var hitareaCSS = {
+		height: 15,
+		width: 30, // custom size used in xooki
+		marginLeft: "-30px", // custom size used in xooki
+		"float": "left",
+		cursor: "pointer"
+	};
+	
+	// ie specific styles for hitareas
+	if( $.browser.msie ) {
+		$.extend( hitareaCSS, {
+			background: "#fff",
+			filter: "alpha(opacity=0)",
+			display: "inline"
+		});
+	}
+
+	$.extend($.fn, {
+		swapClass: function(c1, c2) {
+			return this.each(function() {
+				var $this = $(this);
+				if ( $.className.has(this, c1) )
+					$this.removeClass(c1).addClass(c2);
+				else if ( $.className.has(this, c2) )
+					$this.removeClass(c2).addClass(c1);
+			});
+		},
+		replaceclass: function(c1, c2) {
+			return this.each(function() {
+				var $this = $(this);
+				if ( $.className.has(this, c1) )
+					$this.removeClass(c1).addClass(c2);
+			});
+		},
+		Treeview: function(settings) {
+		
+			// currently no defaults necessary, all implicit
+			settings = $.extend({}, settings);
+		
+			// factory for treecontroller
+			function treeController(tree, control) {
+				// factory for click handlers
+				function handler(filter) {
+					return function() {
+						// reuse toggle event handler, applying the elements to toggle
+						// start searching for all hitareas
+						toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() {
+							// for plain toggle, no filter is provided, otherwise we need to check the parent element
+							return filter ? $(this).parent("." + filter).length : true;
+						}) );
+						return false;
+					}
+				}
+				// click on first element to collapse tree
+				$(":eq(0)", control).click( handler(CLASSES.collapsable) );
+				// click on second to expand tree
+				$(":eq(1)", control).click( handler(CLASSES.expandable) );
+				// click on third to toggle tree
+				$(":eq(2)", control).click( handler() ); 
+			}
+		
+			// handle toggle event
+			function toggler() {
+				// this refers to hitareas, we need to find the parent lis first
+				$( this ).parent()
+					// swap classes
+					.swapClass( CLASSES.collapsable, CLASSES.expandable )
+					.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
+					// find child lists
+					.find( ">ul" )
+					// toggle them
+					.toggle( settings.speed, settings.toggle );
+				if ( settings.unique ) {
+					$( this ).parent()
+						.siblings()
+						.replaceclass( CLASSES.collapsable, CLASSES.expandable )
+						.replaceclass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
+						.find( ">ul" )
+						.hide( settings.speed, settings.toggle );
+				}
+			}
+	
+			// add treeview class to activate styles
+			this.addClass("treeview");
+			
+			// mark last tree items
+			$("li:last-child", this).addClass(CLASSES.last);
+			
+			// collapse whole tree, or only those marked as closed, anyway except those marked as open
+			$( (settings.collapsed ? "li" : "li." + CLASSES.closed) + ":not(." + CLASSES.open + ") > ul", this).hide();
+			
+			// find all tree items with child lists
+			$("li[ul]", this)
+				// handle closed ones first
+				.filter("[>ul:hidden]")
+					.addClass(CLASSES.expandable)
+					.swapClass(CLASSES.last, CLASSES.lastExpandable)
+					.end()
+				// handle open ones
+				.not("[>ul:hidden]")
+					.addClass(CLASSES.collapsable)
+					.swapClass(CLASSES.last, CLASSES.lastCollapsable)
+					.end()
+				// append hitarea
+				.prepend("<div class=\"" + CLASSES.hitarea + "\">")
+				// find hitarea
+				.find("div." + CLASSES.hitarea)
+				// apply styles to hitarea
+				.css(hitareaCSS)
+				// apply toggle event to hitarea
+				.toggle( toggler, toggler );
+			
+			// if control option is set, create the treecontroller
+			if ( settings.control )
+				treeController(this, settings.control);
+			
+			return this;
+		}
+	});
+})(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/moreexamples.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/moreexamples.adoc b/asciidoc/moreexamples.adoc
new file mode 100644
index 0000000..771121e
--- /dev/null
+++ b/asciidoc/moreexamples.adoc
@@ -0,0 +1,33 @@
+
+If you have successfully followed and understood all the tutorials, you still might need to get a better picture of how to use Ivy in the real world.
+
+Here are some links which might be interesting:
+
+
+==== link:http://wiki.hippo.nl/display/OS/SAnt+build+system[SAnt]
+
+SAnt is an experimental build system based on Ant and Ivy. It can be interesting to use "as is", or to get insight on an interesting approach to manage your builds.
+
+
+==== link:https://springmodules.dev.java.net/[Spring Modules]
+
+The spring modules project build system is based on Ant and Ivy, and it's really interesting to have a look at how a modularized project can take advantage of advanced Ant and Ivy features to make the build simpler.
+
+
+==== link:http://www.opensymphony.com/webwork/[Webwork]
+
+The webwork project (which should become struts action framework) uses ant+ivy for their build, and thus makes their framework very easy to use in an ant+ivy build system. They have a link:http://wiki.opensymphony.com/display/WW/Dependencies[page documenting how to use Ivy with their framework], which can be an interesting reading, even if you don't plan to use webwork.
+
+
+==== link:http://www.jaya.free.fr/ivy/doc/articles/ease-multi-module.html[Easing multi-module development]
+
+Johan stuyts, the author of SAnt, also contributed a nice article on his view of how to use Ivy on a multi-module environment.
+
+
+==== link:http://olmex.blogspot.in/2012/04/ivy-beginners-guide.html[Beginners Guide]
+
+
+Apache Ivy - Beginners Guide is a step by step guide to assist beginners in understanding basic concepts/tasks and use them straight away in their projects either through Ant build or in Eclipse IDE.
+
+
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/22bdffb9/asciidoc/osgi.adoc
----------------------------------------------------------------------
diff --git a/asciidoc/osgi.adoc b/asciidoc/osgi.adoc
new file mode 100644
index 0000000..002a91c
--- /dev/null
+++ b/asciidoc/osgi.adoc
@@ -0,0 +1,44 @@
+
+Since Apache Ivy&#153; 2.3, some support for OSGi&#153; dependency management has been introduced.
+
+
+[]
+|=======
+|<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="1em" version="1.1" y="0px" x="0px" viewBox="0 0 980.02045 886.1"><g fill="red"><path d="m972.9158,794.5l-426.1,-761.1c-10.5,-20 -31.1,-32.7 -53.7,-33.4l-1.7,0c-22,0 -42.4,11.5 -53.7,30.5l-428.9,761c-11.5,19.4 -11.8,43.3 -0.6,62.9c11.1,19.6 31.9,31.7 54.4,31.7l854.9,0c21.9,0 42.2,-11.5 53.5,-30.2s12,-42 1.9,-61.4zm-910.4,29.2l428.9,-761.1l426,761.1l-854.9,0z"/><path d="m490.3158,626.7c-36.5,0 -62.1,25.6 -62.1,62.8c0,35.8 24.9,62.8 60.7,62.8l1.4,0c37.3,0 61.5,-27 61.5,-62.8c-0.7,-37.3 -24.9,-62.8 -61.5,-62.8z"/><path d="m451.0158,592.1l78.7,0l15.2,-312.6l-109,0l15.1,312.6z"/></g></svg>|
+    Note that this feature is considered as *experimental*. It should work with simple configuration but may not in complex ones. If you have any issue with that feature, you are welcomed to come discussed your use case on the link:http://ant.apache.org/ivy/mailing-lists.html[ivy-user] mailing list, or discuss about implementation issues or improvement you may have found on link:http://ant.apache.org/ivy/mailing-lists.html[ant-dev].
+    
+|=======
+
+
+So with a standard ivy.xml, you can express some dependency on some OSGi bundle and every of their trasitive dependencies will be resolved. You can also declare in your ivy.xml some OSGi dependency, like a `Require-Bundle`, an `Import-Package` or an `Import-Service`, miming an OSGi MANIFEST.MF.
+
+
+=== Note on the implementation
+
+
+With OSGi we can declare different kind of capabilites of a bundle which can match different kind of requirements of some other bundles (`Require-Bundle`/`Bundle-SymbolicName`, `Import-Package`/`Export-Package`, `Import-Service`/`Export-Service`). In Ivy we only have one kind of requirement and one kind of capability: the symbolic name of the bundle. Due to that restriction Ivy may not resolve exactly how we would expect with OSGi.  The runtime of Ivy won't be as smart as a pure OSGi dependency manager. But we think that the mapping is working for most of the use cases involing OSGi dependencies management.
+
+Details on the mapping of the OSGi dependency model into Ivy's one can be found in that link:osgi/osgi-mapping.html[page].
+
+
+=== Repository descriptor based resolvers
+
+
+Since the nature of the OSGi dependencies, resolving against a repository cannot be started before acquiring the metadata of every bundle of the repository. To resolve an `Import-Package`, Ivy has to find every bundle which has the proper `Export-Package`. So unlike the usual Ivy resolvers, the OSGi capable ones have to get the descriptor before starting a resolve.
+
+The descriptor probably being not instantanly downloaded, the descriptor is put in cache. (FIXME not implemented)
+
+
+=== Use cases
+
+
+Here are different use case of using the OSGi capabilities of Ivy:
+
+    
+* link:osgi/eclipse-plugin.html[building an Eclipse&#153; plugin] +
+    
+* link:osgi/standard-osgi.html[building a standard OSGi bundle] +
+    
+* link:osgi/target-platform.html[managing a "target" platform] +
+
+	
\ No newline at end of file


Mime
View raw message