ant/docs/projects/antlib/antlib_classloaders.html
Stefan Bodewig 6e883af17b Regenerate docs
git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274570 13f79535-47bb-0310-9956-ffa450edef68
2003-05-14 11:34:27 +00:00

173 lines
7.5 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
<head>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Apache Ant - Antlib Class Loaders</title>
<link type="text/css" href="../../page.css" rel="stylesheet">
<meta name="author" content="Antoine Levy-Lambert">
<meta name="email" content="antoine@apache.org">
</head>
<body>
<p class="navpath">
<script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
</p>
<div class="logobar">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td>
<td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td>
<td align="right">
<form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get">
<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F">
<tr>
<td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td>
</tr>
<tr>
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
<td nowrap="nowrap" class="searchcaption">
<input name="q" type="hidden">
<input size="15" id="query" type="text">
<img height="1" width="5" alt="" src="../../images/spacer.gif">
<input name="Search" value="Search" type="submit">
<br>
the Apache Ant site
</td>
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
</tr>
<tr>
<td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td>
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td>
<td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</div>
<div class="tab">
<table summary="tab bar" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
<table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
<tr>
<td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
</tr>
</table>
</td>
<td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom">
<table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0">
<tr>
<td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../projects/index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Projects</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="bluebar"></div>
<div class="menucontainer">
<div class="menu">
<ul>
</ul>
</div>
<img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif">
<img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif">
</div>
<div class="lightbluebar">&nbsp;</div>
<div class="main">
<div class="content">
<h1 class="title">Antlib Class Loaders</h1>
<h3 class="section">
<a name="Jose Alberto Fernandez"></a>
Jose Alberto Fernandez
</h3>
<p>
Let me first say that this feature appeared by the need to be able to say,
</p>
<pre class="code">
&lt;antlib name=&quot;A&quot; classpathref=&quot;XYZ&quot;/&gt;
&lt;antlib name=&quot;B&quot; classpathref=&quot;XYZ&quot;/&gt;
</pre>
<p>
And being able to make sure that B and A use the same classLoader
and therefore they can use each other components.
</p>
<p>
My solution at the time was this idea of a named classloader that
you could define using a classpath, and then tell your antlibs use
this or that classloader, if you use the same classloader visibility
is guaranteed.
</p>
<h3 class="section">
<a name="Stefan Bodewig 23.04.2003 17:11"></a>
Stefan Bodewig 23.04.2003 17:11
</h3>
<p>
I understand that usecase (using the same class loader for 2 different antlibs)
and think it's important. See Steve
Loughran's comment on the .NET tasks wanting to have access to the
datatypes defined in the cpptasks project for example.
</p>
<p>
Take a look at what Costin had done to &lt;taskdef&gt; and &lt;typedef&gt; with
the loaderref attribute. This has now (i.e. CVS HEAD) been
generalized in ClasspathUtils, the infrastructure for named
classloaders is there - at least the foundation for it.
</p>
<p>
Stefan
</p>
<h3 class="section">
<a name="Costin Manolache 29.04.2003 18:52"></a>
Costin Manolache 29.04.2003 18:52
</h3>
<p>
The main issue is how to enforce ordering to deal with dependencies
between the antlibs.
</p>
<p>
Or simply do not deal with dependencies, ie antlibs must not (yet)
depend on on the other, except for the core ones.
</p>
<p>
Using an unified class loader ( at least as default ) - like jboss is doing,
or like JMX loading policy - has a lot of benefits. It also has some cases
that are not well covered - so we'll probably need to deal with both
"unified loader" and "loader hierarchy" cases.
</p>
</div>
</div>
<p class="copyright">
Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
<script type="text/javascript" language="JavaScript"><!--
document.write(" - "+"Last Published: " + document.lastModified);
// -->
</script>
</p>
</body>
</html>