Hi Todd-Could you provide a bit more contextWill you be implementing this 
(web)application under J2EE server -or- perhaps a container such as Catalina or 
Jetty?Generally these environments support their own classloader loading 
algorithms depending on the capability and security characteristics of the 
(web)application you will be implementing and which J2EE server and container 
will be the implementor-Martin 
______________________________________________Disclaimer and confidentiality 
noteEverything in this e-mail and any attachments relates to the official 
business of Sender. This transmission is of a confidential nature and Sender 
does not endorse distribution to any party other than intended recipient. 
Sender does not necessarily endorse content contained within this 
transmission.> Date: Wed, 21 Nov 2007 12:33:46 -0800> From: [EMAIL PROTECTED]> 
To: user@ant.apache.org> Subject: Re: How do I set a classpath for my custom 
task?> > Gilles,> > The user is providing implementations of an interface I 
provide. Then> my code (which is called from my ant task) calls interface 
methods.> So I'm not using reflection to call the method, just to get an> 
instance of the users class.> > Can you point me to any code that shows how to 
"create a classloader> that is a child of the classloader in which the 
interface class is> loaded"? I'm assuming I need to actually launch my 
application in a> new VM using the classloader I create - any pointers to code 
that does> demonstrates that would be appreciated as well!> > Todd> > On Nov 
21, 2007 12:00 PM, Gilles Scokart <[EMAIL PROTECTED]> wrote:> > That depends on 
how you want to invoke the code of the user.> > If you are using only 
reflection to creates the object, but also to invoke> > the method. The, it is 
easier. You only have to create a classloader> > defined with the user 
classpath.> > If you are only using reflection to create an instance o the user 
object,> > then you are using interface implemented by the user object. Then it 
is a> > little bit more complex. You need to create a classloader that is a 
child> > of the classloader in which the interface class is loaded. And your 
own> > code must also be loaded in a classloader that is the child of the> > 
classloader in which the interface class is loaded (or the same).> >> > Gilles> 
>> > 2007/11/21, todd runstein <[EMAIL PROTECTED]>:> >> > >> > > Ramu,> > >> > 
> Thanks for the suggestions. I've looked at both of these options, but> > > 
since this is a custom task that I'd like to include with an open> > > source 
project, neither of those options are ideal. In the "taskdef",> > > I'd like 
the user of my task to only have to specify where my jar file> > > is. However, 
because my task uses classes written by the user, I'd> > > like them to define 
that classpath in the task itself.> > >> > > To be honest, I may not completely 
understand the entire problem yet.> > > Let me explain what I *think* the 
problem is, and hopefully someone> > > can tell me how to fix it.> > >> > > 
Here is the taskdef that I would ask users to include in their build> > > 
script:> > >> > > <!-- classpathref needs to include migrate4j.jar so ant can 
find AntTask> > > -->> > > <taskdef name="migrate" 
classname="com.eroi.migrate.migration.AntTask"> > > 
classpathref="lib.classpath" />> > >> > > Then, here's the actual task in use:> 
> >> > > <!-- The migrate task needs to know where user supplied classes are 
-->> > > <target name="run" depends="compile" >> > > <migrate> > > version="1"> 
> > url="jdbc:h2:~/testH2"> > > driver="org.h2.Driver"> > > username="sa"> > > 
password=""> > > packagename="db.migrations"> > > 
classpathref="user.classpath"> > > />> > > </target>> > >> > > Not to beat a 
dead horse, but the taskdef needs to find my code and my> > > code needs to 
find users code. I think that the classpath in the> > > taskdef is being used 
to find my task (since the task loads properly),> > > but when code in my task 
runs, it is too late to change the classpath> > > so my code can't find the 
users classes. I don't want the user to do> > > anything they wouldn't do with 
core ant tasks (except for the taskdef> > > entry). I've started looking at the 
Java, Javac and JUnit tasks to> > > see how they do this, but it's not 
immediately clear how to replicate> > > their behavior.> > >> > > I'm now 
looking at the Commandline object to see how that might work> > > with Execute. 
If anyone has experience using these classes, I welcome> > > any help! I may be 
about to run into a brick wall, so if I'm> > > obviously going down the wrong 
path, please let me know.> > >> > > Todd> > >> > >> > > On Nov 20, 2007 8:43 
PM, Ramu Sethu <[EMAIL PROTECTED]> wrote:> > > > HI todd> > > >> > > > Have you 
tried the following option ??> > > > 1. -lib option> > > > 2. classpath 
attribute in taskdef> > > >> > > >> > > >> > > > On Nov 21, 2007 2:15 AM, todd 
runstein <[EMAIL PROTECTED]> wrote:> > > >> > > > > I'm writing an ant task 
that calls a Java class named Engine. Engine> > > > > is in a jar file that is 
included in my taskdef using the classpath> > > > > tag. This all works great.> 
> > > >> > > > > The problem I'm having is that one of Engine's methods calls> 
> > > > "Class.forName()", trying to dynamically add a class file that is not> 
> > > > in it's jar file. Here I'm getting a ClassNotFoundException. I've> > > 
> > tried a few things to manually set the classpath that Ant uses, but> > > > 
> I'm just hacking aimlessly and have had no luck. Could someone give> > > > > 
me some direction to manually adding to the classpath that Engine will> > > > > 
ultimately work with?> > > > >> > > > > Thanks in advance!> > > > >> > > > > 
Todd> > > > >> > > > > --> > > > >> > > > >> > > > > 
----------------------------------------------------------------------> > > > > 
The only "dumb question" is the one you were too afraid to ask.> > > > > 
________________________________________> > > > > Check out RouteRuler - Free 
software for runners, cyclists, walkers,> > > etc.> > > > > 
http://routeruler.sourceforge.net> > > > > 
________________________________________> > > > >> > > > > 
---------------------------------------------------------------------> > > > > 
To unsubscribe, e-mail: [EMAIL PROTECTED]> > > > > For additional commands, 
e-mail: [EMAIL PROTECTED]> > > > >> > > > >> > > >> > > >> > > > --> > > > 
Thank you> > > > Ramu S> > > >> > > > If A is success in life, then A equals x 
plus y plus z. Work is x; y is> > > > play; and z is keeping your mouth shut.> 
> > > - Albert Einstein> > > >> > >> > >> > >> > > --> > >> > >> > > 
----------------------------------------------------------------------> > > The 
only "dumb question" is the one you were too afraid to ask.> > > 
________________________________________> > > Check out RouteRuler - Free 
software for runners, cyclists, walkers, etc.> > > 
http://routeruler.sourceforge.net> > > 
________________________________________> > >> > > 
---------------------------------------------------------------------> > > To 
unsubscribe, e-mail: [EMAIL PROTECTED]> > > For additional commands, e-mail: 
[EMAIL PROTECTED]> > >> > >> >> >> > --> > Gilles Scokart> >> > > > -- > > > 
----------------------------------------------------------------------> The 
only "dumb question" is the one you were too afraid to ask.> 
________________________________________> Check out RouteRuler - Free software 
for runners, cyclists, walkers, etc.> http://routeruler.sourceforge.net> 
________________________________________> > 
---------------------------------------------------------------------> To 
unsubscribe, e-mail: [EMAIL PROTECTED]> For additional commands, e-mail: [EMAIL 
PROTECTED]> 
_________________________________________________________________
Put your friends on the big screen with Windows Vista® + Windows Live™.
http://www.microsoft.com/windows/shop/specialoffers.mspx?ocid=TXT_TAGLM_CPC_MediaCtr_bigscreen_102007

Reply via email to