Author: xavier
Date: Thu Mar 1 05:48:30 2007
New Revision: 513317
URL: http://svn.apache.org/viewvc?view=rev&rev=513317
Log:
FIX: Unreachable link on FAQ page (IVY-405) (thanks to Gavin)
Modified:
incubator/ivy/core/trunk/doc/faq.html
Modified: incubator/ivy/core/trunk/doc/faq.html
URL:
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/doc/faq.html?view=diff&rev=513317&r1=513316&r2=513317
==============================================================================
--- incubator/ivy/core/trunk/doc/faq.html (original)
+++ incubator/ivy/core/trunk/doc/faq.html Thu Mar 1 05:48:30 2007
@@ -5,121 +5,121 @@
<script type="text/javascript" src="xooki/xooki.js"></script>
</head>
<body>
- <textarea id="xooki-source">
-<h1>What and Why</h1>
-<h2>What is Ivy ?</h2>
-<p>Ivy is a powerful dependencies manager with transitive dependencies support
and much more <a href="features.html">features</a>.</p>
-<p>With Ivy you define the dependencies of your module in an xml file, called
an ivy file. Then you usually ask ivy to retrieve your dependencies to a local
lib dir, and it does it for you by locating the artifacts of your dependencies
in repositories, such as ibiblio.</p>
-<h2>Why should I use a dependencies manager ?</h2>
-<p>Without a dependencies manager, two solutions are often used to store the
dependencies of a project: a project lib dir or direct access to a shared
repository.<br />
-The major drawback of the project lib dir is that the same dependencies are
stored in multiple location if you have several projects using the same
dependencies. Moreover, we often see project where dependencies revisions are
not documented, which can cause problems for maintenance.<br />
-With the shared repository the problem is often to maintain the list of
dependencies of the project. This list is often lost within the build file,
which does not help maintenance. Moreover, this solution often requires a
download of the whole repository, unless home made dependencies management
solution has been used.</p>
-<p>Finally, the major drawback of these solutions is that they do not use
transitive dependencies. Transitive dependencies are the dependencies of your
dependencies. Managing transitive dependencies let you declare dependencies
only on what you really need, and not what the module you use themselves need.
This not only eases your dependencies declaration, but it also improves a lot
the maintenability of your project, especially in multi-project environment.
Imagine you develop a component used in several other projects. Then each time
your component needs a new dependency, without transitive dependencies, you
have to update all the projects using your component ! And this could really
take a lot of time !</p>
-<h2>Why should I use Ivy ?</h2>
-<p>If you are convinced of using a dependencies manager, you may wonder why
using Ivy and not another tool. We are not able to answer this question without
being biased, but have a look at Ivy <a href="features.html">features</a> and
the <a href="../search/node/ivy+doc+comparison.html">product comparison</a> we
provide, and you will certainly see that Ivy is one of the best dependencies
manager currently available ;-)</p>
-<h2>How does Ivy differ from Maven2 ?</h2>
-<p>The answer to this question is too long, so it deserves its own page <a
href="doc/m2comparison.html">here</a>.</p>
-<h1>Ivy in use</h1>
-<h2>I don't understand what's happening...</h2>
-<p>The first thing to do when you don't understand what's going wrong is to
try to change the message level. If you use ant, you can use the -debug or
-verbose options to get more detailed messages and better understand what's
happening.</p>
-<h2>Ivy seems to fail connecting to ibiblio...</h2>
-<p>First, check if the ibiblio site is ok with your favorite browser. If the
site is ok, maybe it's a problem of proxy configuration. Set your ANT_OPTS
environment variable<br />
-to configure your proxy if you have one.<br />
-For instance:<br />
-<code>set ANT_OPTS=-Dhttp.proxyHost=myproxy -Dhttp.proxyPort=3128</code></p>
-<p>If it still doesn't work, maybe it's your dependency file which is not ok.
Check<br />
-if the module name you depend on is actually a name of directory under<br />
-<a href="http://www.ibiblio.org/maven/"
title="www.ibiblio.org/maven/">www.ibiblio.org/maven/</a>. If this is the case,
check if the jar with a name like<br />
-[module]-[revision].jar is present under the jars directory of this module on
ibiblio.<br />
-For instance: <a
href="http://www.ibiblio.org/maven/commons-httpclient/jars/commons-httpclient-2.0.jar"
title="www.ibiblio.org/maven/commons-httpclient/jars/commons-httpclient-2.0.jar">www.ibiblio.org/maven/commons-httpclient/jars/commons-httpclient-2.0.jar</a></p>
-<p>If this is the case, check your ivy configuration to see if you actually
use the ibiblio<br />
-or ivyrep resolver.</p>
-<p>Finally, you can check if the files were not downloaded but corrupted<br />
-(Ivy has no md5 checking for the moment) by checking your lib directory and
opening<br />
-the jars if any with an unzip program.</p>
-<p>If you still have problems post on the <a
href="forum/core.html">forum</a><br />
-mentioning your OS, your version of ant, your version of ivy, your
configuration file<br />
-and your ivy file.</p>
-<h2>Ivy fails to get an artifact / ivy file on my http server. What's
wrong?</h2>
-<p>The first thing to do is to ensure the setting is correct. Ivy should log
the url it tried, copy this url and paste it in your favorite browser, and
verify you get no error.</p>
-<p>If this is ok, check if you don't need any proxy setting nor
authentication. For proxy setting, you can use for instance this:<br />
-<code>set ANT_OPTS=-Dhttp.proxyHost=myproxy -Dhttp.proxyPort=3128</code><br />
-For authentication, fill in the appropriate data at <a
href="doc/use/configure.html">configuration</a> time.</p>
-<p>If you still have no idea of what is wrong, then I suggest to use
commons-httpclient if it isn't already the case (you should just put
commons-httpclient in you classpath), and then <a
href="http://jakarta.apache.org/commons/httpclient/logging.html">turn on the
debug logging</a>.</p>
-<p>You will then have very detailed information on how your url is handled. If
you still have problem, ask for help on the <a
href="forum/core.html">forum</a>.</p>
-<h2>What if I do not want to put my library files in the lib directory ? </h2>
-<p>No problem, you just have to set an ant property:</p>
-<code><property name="ivy.lib.dir" value="pathtomylibdir"/></code>
-<h2>What if I do not want the revision of the files I retrieve to appear in
the<br />
-file name ?</h2>
-<p>A typical question for people using an IDE like eclipse and often
changing<br />
-dependency revision: it's a bit boring to change your IDE project just to
tell<br />
-him to use comp-build2596.jar instead of comp-build2595.jar, when you have<br
/>
-already changed your ivy file (and even if you haven't changed it, if you
use<br />
-the continuous integration feature !). No problem, you have a total control
on<br />
-the files retrieved using the pattern attribute in the retrieve task:</p>
-<p>Here is the default pattern:</p>
-<code><ivy:retrieve
pattern="${ivy.lib.dir}/[artifact]-[revision].[ext]"/></code>
-<p>And here is one which do not suffix file name with dependency revision:</p>
-<code><ivy:retrieve pattern="${ivy.lib.dir}/[artifact].[ext]"/></code>
-<p>And one which makes your lib directory have the same layout as the ibiblio
repository:</p>
-<code><ivy:retrieve
pattern="${ivy.lib.dir}/[module]/[type]s/[artifact]-[revision].[ext]"/></code>
-<p>Not too difficult, and really flexible, isn't it ? And check the retrieve
task<br />
-reference documentation to learn more about it...</p>
-<h2>Why two xml files ?</h2>
-<p>Ivy uses two types of xml files: configuration files and ivy files.</p>
-<p>In fact, Ivy distinguishes two different steps to describe and get your<br
/>
-dependencies:<br />
-You write ivy files to describe the dependencies of your module, independently
of how you retrieve them.<br />
-Then you configure ivy to indicate where it can find your dependencies. Thus
you can easily share your ivy files, even if you have internal dependencies
which are not resolved the same way in your environment as in the target
development environment. You just need to write two configuration files, one in
your default development environment, and one in the target development
environment with the <b>same ivy files</b>. </p>
-<h2>How do I separate the dependencies I need at xxx time and the one I need
at yyy time ?</h2>
-<p>Ivy uses a concept called <i>configurations</i> to handle this, and many
more. As explained in the <a href="doc/terminology.html">terminology page</a>,
a <i>configuration</i> of your module can be thought as a way to use your
module (<i>note: this has nothing to do with the configuration of ivy itself,
through the use of configuration file</i>). You can describe what dependencies
are needed in each configuration. </p>
-<p>Moreover, because the dependencies are modules too, they can also have
configurations. What is extremely powerful with ivy is that you can define
configurations mapping, i.e. which conf of the dependency is needed in which
conf of your module. Thus what is needed at 'runtime' of a dependency can be
needed for 'test' of your module.</p>
-<p>Finally, the configurations are unlimited, defined in each module, and can
extend each other. This contributes a lot to ivy flexibility.</p>
-<h2>How do I configure Ivy to find ivy files in both a local repository and
ivyrep ?</h2>
-<p>A frequent configuration of Ivy is to use a local repository + ivyrep +
ibiblio to store ivy files and artifacts.<br />
-Here is a sample configuration to do this:</p>
-<code>
-<ivyconf>
- <properties file="${ivy.conf.dir}/ivyconf.properties"/>
- <conf defaultCache="cache" defaultResolver="libraries"/>
- <resolvers>
- <dual name="libraries" >
- <chain name="ivy-chain" returnFirst="true">
- <filesystem name="local-ivy">
- <ivy
pattern="${locallibrep}/[organisation]/[module]/[revision]/ivy.xml" />
- </filesystem>
- <ivyrep name="ivyrep"/>
- </chain>
- <chain name="artifact-chain" returnFirst="true">
- <filesystem name="local-artifact">
- <artifact
pattern="${locallibrep}/[organisation]/[module]/[revision]/[type]s/[artifact].[ext]"
/>
- </filesystem>
- <ibiblio name="ibiblio"/>
- </chain>
- </dual>
- </resolvers>
-</ivyconf>
-</code>
-<h2>Can I write an ivy file for a module with no artifact at all ?</h2>
-<p>Yes, this is what is called a 'virtual' module.</p>
-<p>Having a module which has no publication and only dependencies can be
useful in many cases. </p>
-<p>In particular, you can in this way define a set of dependencies used in
several projects. Once defined, you can simply add a dependency on this virtual
module to get all its dependencies, thanks to transitive dependencies
management.</p>
-<p>It can also be useful if you want to define a flexible framework. In your
framework, you will certainly have several modules, each having its own
dependencies. But for the users of your framework, it can be interesting to
provide a virtual module, representing the framework as a whole, and using
configurations to let the user choose what he really wants to use in your
framework, in a very flexible and effective way.</p>
-<p>But the problem is that ivy considers by default that a module publishes
one artifact, with the same name as the module itself. So the way to define a
virtual module is to add to its ivy file a publications section with no
publication inside:</p>
-<code><publications/></code>
-<h2>I do not manage to get xxx module on ibiblio. What's wrong ?</h2>
-<p>The problem can come from several places... usually it comes from the fact
that some modules on ibiblio do not respect a clean structure.</p>
-<p>For instance, opensymphony projects are all in an opensymphony directory,
which does not respect the [module]/[artifact]-[revision].[ext] pattern. In
this case the only way to go with this is to configure another resolver with
the appropriate pattern, and configure ivy to use this resolver for
opensymphony only.</p>
-<p>Another similar problem is to have several modules in one directory, such
xerces and xmlapis in the xerces directory. The problem is that if you consider
the two as one module, you will be tempted to declare a dependency on two
revisions of this module. This is not the right approach, because this does not
match ivy definition of a module. A better approach is similar to the preceding
one with a special configuration for this only.</p>
-<p>Another solution is to setup a local repository for those modules that are
not cleanly deployed on ibiblio. Using this local repository first and the
ibiblio repository after is a good way to turn around the problems of ibiblio
and still benefit from the huge number of artifacts that can be found.</p>
-<h2>When I update an ivy file in my repository ivy do not take the change into
account. Is this normal ?</h2>
-<p>This the default behaviour of ivy, which relies on the revision and on its
cache to avoid too many downloads. However, this can be changed on each
resolver using the <em>checkmodified</em> attribute, or globally by setting
<em>ivy.resolver.default.check.modified</em> variable to true.</p>
-<h1>Misc</h1>
-<h2>Where are the release notes ?</h2>
-<p>Release notes can be found in the <a
href="doc/releasenotes.html">documentation</a>.</p>
-<h2>Where can I get more information?</h2>
-<p>If you need more information about Ivy than the one found in the
documentation, you can see the <a href="links.html">links</a> page, use the <a
href="forum/core.html">forum</a> to ask your question to the community, or use
your favorite search engine.<br />
+ <textarea id="xooki-source">
+<h1>What and Why</h1>
+<h2>What is Ivy ?</h2>
+<p>Ivy is a powerful dependencies manager with transitive dependencies support
and much more <a href="features.html">features</a>.</p>
+<p>With Ivy you define the dependencies of your module in an xml file, called
an ivy file. Then you usually ask ivy to retrieve your dependencies to a local
lib dir, and it does it for you by locating the artifacts of your dependencies
in repositories, such as ibiblio.</p>
+<h2>Why should I use a dependencies manager ?</h2>
+<p>Without a dependencies manager, two solutions are often used to store the
dependencies of a project: a project lib dir or direct access to a shared
repository.<br />
+The major drawback of the project lib dir is that the same dependencies are
stored in multiple location if you have several projects using the same
dependencies. Moreover, we often see project where dependencies revisions are
not documented, which can cause problems for maintenance.<br />
+With the shared repository the problem is often to maintain the list of
dependencies of the project. This list is often lost within the build file,
which does not help maintenance. Moreover, this solution often requires a
download of the whole repository, unless home made dependencies management
solution has been used.</p>
+<p>Finally, the major drawback of these solutions is that they do not use
transitive dependencies. Transitive dependencies are the dependencies of your
dependencies. Managing transitive dependencies let you declare dependencies
only on what you really need, and not what the module you use themselves need.
This not only eases your dependencies declaration, but it also improves a lot
the maintenability of your project, especially in multi-project environment.
Imagine you develop a component used in several other projects. Then each time
your component needs a new dependency, without transitive dependencies, you
have to update all the projects using your component ! And this could really
take a lot of time !</p>
+<h2>Why should I use Ivy ?</h2>
+<p>If you are convinced of using a dependencies manager, you may wonder why
using Ivy and not another tool. We are not able to answer this question without
being biased, but have a look at Ivy <a href="features.html">features</a> and
the <a href="doc/m2comparison.html">product comparison</a> we provide, and you
will certainly see that Ivy is one of the best dependencies manager currently
available ;-)</p>
+<h2>How does Ivy differ from Maven2 ?</h2>
+<p>The answer to this question is too long, so it deserves its own page <a
href="doc/m2comparison.html">here</a>.</p>
+<h1>Ivy in use</h1>
+<h2>I don't understand what's happening...</h2>
+<p>The first thing to do when you don't understand what's going wrong is to
try to change the message level. If you use ant, you can use the -debug or
-verbose options to get more detailed messages and better understand what's
happening.</p>
+<h2>Ivy seems to fail connecting to ibiblio...</h2>
+<p>First, check if the ibiblio site is ok with your favorite browser. If the
site is ok, maybe it's a problem of proxy configuration. Set your ANT_OPTS
environment variable<br />
+to configure your proxy if you have one.<br />
+For instance:<br />
+<code>set ANT_OPTS=-Dhttp.proxyHost=myproxy -Dhttp.proxyPort=3128</code></p>
+<p>If it still doesn't work, maybe it's your dependency file which is not ok.
Check<br />
+if the module name you depend on is actually a name of directory under<br />
+<a href="http://www.ibiblio.org/maven/"
title="www.ibiblio.org/maven/">www.ibiblio.org/maven/</a>. If this is the case,
check if the jar with a name like<br />
+[module]-[revision].jar is present under the jars directory of this module on
ibiblio.<br />
+For instance: <a
href="http://www.ibiblio.org/maven/commons-httpclient/jars/commons-httpclient-2.0.jar"
title="www.ibiblio.org/maven/commons-httpclient/jars/commons-httpclient-2.0.jar">www.ibiblio.org/maven/commons-httpclient/jars/commons-httpclient-2.0.jar</a></p>
+<p>If this is the case, check your ivy configuration to see if you actually
use the ibiblio<br />
+or ivyrep resolver.</p>
+<p>Finally, you can check if the files were not downloaded but corrupted<br />
+(Ivy has no md5 checking for the moment) by checking your lib directory and
opening<br />
+the jars if any with an unzip program.</p>
+<p>If you still have problems post on the <a
href="forum/core.html">forum</a><br />
+mentioning your OS, your version of ant, your version of ivy, your
configuration file<br />
+and your ivy file.</p>
+<h2>Ivy fails to get an artifact / ivy file on my http server. What's
wrong?</h2>
+<p>The first thing to do is to ensure the setting is correct. Ivy should log
the url it tried, copy this url and paste it in your favorite browser, and
verify you get no error.</p>
+<p>If this is ok, check if you don't need any proxy setting nor
authentication. For proxy setting, you can use for instance this:<br />
+<code>set ANT_OPTS=-Dhttp.proxyHost=myproxy -Dhttp.proxyPort=3128</code><br />
+For authentication, fill in the appropriate data at <a
href="doc/use/configure.html">configuration</a> time.</p>
+<p>If you still have no idea of what is wrong, then I suggest to use
commons-httpclient if it isn't already the case (you should just put
commons-httpclient in you classpath), and then <a
href="http://jakarta.apache.org/commons/httpclient/logging.html">turn on the
debug logging</a>.</p>
+<p>You will then have very detailed information on how your url is handled. If
you still have problem, ask for help on the <a
href="forum/core.html">forum</a>.</p>
+<h2>What if I do not want to put my library files in the lib directory ? </h2>
+<p>No problem, you just have to set an ant property:</p>
+<code><property name="ivy.lib.dir" value="pathtomylibdir"/></code>
+<h2>What if I do not want the revision of the files I retrieve to appear in
the<br />
+file name ?</h2>
+<p>A typical question for people using an IDE like eclipse and often
changing<br />
+dependency revision: it's a bit boring to change your IDE project just to
tell<br />
+him to use comp-build2596.jar instead of comp-build2595.jar, when you have<br
/>
+already changed your ivy file (and even if you haven't changed it, if you
use<br />
+the continuous integration feature !). No problem, you have a total control
on<br />
+the files retrieved using the pattern attribute in the retrieve task:</p>
+<p>Here is the default pattern:</p>
+<code><ivy:retrieve
pattern="${ivy.lib.dir}/[artifact]-[revision].[ext]"/></code>
+<p>And here is one which do not suffix file name with dependency revision:</p>
+<code><ivy:retrieve pattern="${ivy.lib.dir}/[artifact].[ext]"/></code>
+<p>And one which makes your lib directory have the same layout as the ibiblio
repository:</p>
+<code><ivy:retrieve
pattern="${ivy.lib.dir}/[module]/[type]s/[artifact]-[revision].[ext]"/></code>
+<p>Not too difficult, and really flexible, isn't it ? And check the retrieve
task<br />
+reference documentation to learn more about it...</p>
+<h2>Why two xml files ?</h2>
+<p>Ivy uses two types of xml files: configuration files and ivy files.</p>
+<p>In fact, Ivy distinguishes two different steps to describe and get your<br
/>
+dependencies:<br />
+You write ivy files to describe the dependencies of your module, independently
of how you retrieve them.<br />
+Then you configure ivy to indicate where it can find your dependencies. Thus
you can easily share your ivy files, even if you have internal dependencies
which are not resolved the same way in your environment as in the target
development environment. You just need to write two configuration files, one in
your default development environment, and one in the target development
environment with the <b>same ivy files</b>. </p>
+<h2>How do I separate the dependencies I need at xxx time and the one I need
at yyy time ?</h2>
+<p>Ivy uses a concept called <i>configurations</i> to handle this, and many
more. As explained in the <a href="doc/terminology.html">terminology page</a>,
a <i>configuration</i> of your module can be thought as a way to use your
module (<i>note: this has nothing to do with the configuration of ivy itself,
through the use of configuration file</i>). You can describe what dependencies
are needed in each configuration. </p>
+<p>Moreover, because the dependencies are modules too, they can also have
configurations. What is extremely powerful with ivy is that you can define
configurations mapping, i.e. which conf of the dependency is needed in which
conf of your module. Thus what is needed at 'runtime' of a dependency can be
needed for 'test' of your module.</p>
+<p>Finally, the configurations are unlimited, defined in each module, and can
extend each other. This contributes a lot to ivy flexibility.</p>
+<h2>How do I configure Ivy to find ivy files in both a local repository and
ivyrep ?</h2>
+<p>A frequent configuration of Ivy is to use a local repository + ivyrep +
ibiblio to store ivy files and artifacts.<br />
+Here is a sample configuration to do this:</p>
+<code>
+<ivyconf>
+ <properties file="${ivy.conf.dir}/ivyconf.properties"/>
+ <conf defaultCache="cache" defaultResolver="libraries"/>
+ <resolvers>
+ <dual name="libraries" >
+ <chain name="ivy-chain" returnFirst="true">
+ <filesystem name="local-ivy">
+ <ivy
pattern="${locallibrep}/[organisation]/[module]/[revision]/ivy.xml" />
+ </filesystem>
+ <ivyrep name="ivyrep"/>
+ </chain>
+ <chain name="artifact-chain" returnFirst="true">
+ <filesystem name="local-artifact">
+ <artifact
pattern="${locallibrep}/[organisation]/[module]/[revision]/[type]s/[artifact].[ext]"
/>
+ </filesystem>
+ <ibiblio name="ibiblio"/>
+ </chain>
+ </dual>
+ </resolvers>
+</ivyconf>
+</code>
+<h2>Can I write an ivy file for a module with no artifact at all ?</h2>
+<p>Yes, this is what is called a 'virtual' module.</p>
+<p>Having a module which has no publication and only dependencies can be
useful in many cases. </p>
+<p>In particular, you can in this way define a set of dependencies used in
several projects. Once defined, you can simply add a dependency on this virtual
module to get all its dependencies, thanks to transitive dependencies
management.</p>
+<p>It can also be useful if you want to define a flexible framework. In your
framework, you will certainly have several modules, each having its own
dependencies. But for the users of your framework, it can be interesting to
provide a virtual module, representing the framework as a whole, and using
configurations to let the user choose what he really wants to use in your
framework, in a very flexible and effective way.</p>
+<p>But the problem is that ivy considers by default that a module publishes
one artifact, with the same name as the module itself. So the way to define a
virtual module is to add to its ivy file a publications section with no
publication inside:</p>
+<code><publications/></code>
+<h2>I do not manage to get xxx module on ibiblio. What's wrong ?</h2>
+<p>The problem can come from several places... usually it comes from the fact
that some modules on ibiblio do not respect a clean structure.</p>
+<p>For instance, opensymphony projects are all in an opensymphony directory,
which does not respect the [module]/[artifact]-[revision].[ext] pattern. In
this case the only way to go with this is to configure another resolver with
the appropriate pattern, and configure ivy to use this resolver for
opensymphony only.</p>
+<p>Another similar problem is to have several modules in one directory, such
xerces and xmlapis in the xerces directory. The problem is that if you consider
the two as one module, you will be tempted to declare a dependency on two
revisions of this module. This is not the right approach, because this does not
match ivy definition of a module. A better approach is similar to the preceding
one with a special configuration for this only.</p>
+<p>Another solution is to setup a local repository for those modules that are
not cleanly deployed on ibiblio. Using this local repository first and the
ibiblio repository after is a good way to turn around the problems of ibiblio
and still benefit from the huge number of artifacts that can be found.</p>
+<h2>When I update an ivy file in my repository ivy do not take the change into
account. Is this normal ?</h2>
+<p>This the default behaviour of ivy, which relies on the revision and on its
cache to avoid too many downloads. However, this can be changed on each
resolver using the <em>checkmodified</em> attribute, or globally by setting
<em>ivy.resolver.default.check.modified</em> variable to true.</p>
+<h1>Misc</h1>
+<h2>Where are the release notes ?</h2>
+<p>Release notes can be found in the <a
href="doc/releasenotes.html">documentation</a>.</p>
+<h2>Where can I get more information?</h2>
+<p>If you need more information about Ivy than the one found in the
documentation, you can see the <a href="links.html">links</a> page, use the <a
href="forum/core.html">forum</a> to ask your question to the community, or use
your favorite search engine.<br />
For search engine search, we advise to use ivy + ant or java as base keywords,
since ivy alone is a very common word.</p></textarea>
<script type="text/javascript">xooki.postProcess();</script>
</body>