Re: Accessing an artifacts classpath from a mojo?

2008-10-19 Thread Mark Struberg
Hi Jason!

Thanks for spotting the jetty plugin.
Jetty is now using an own classloader, but I looked at old versions and managed 
to get classworlds working the way I need it.
There are a few hacks in the source, so maybe someone has a tip for making this 
code prettier.


LieGrue,
strub

PS: the full code of the new openjpa-maven-plugin version can be found here: 
git-clone http://ns1.backwork.net/git/openjpa-maven-plugin.git
PPS: thanks to Rahul for providing the first release of the openjpa plugin and 
doing some additional reviews now.

/**
 * This will prepare the current ClassLoader and add all jars and local
 * classpaths (e.g. target/classes) needed by the OpenJPA task.
 * 
 * @throws MojoExecutionException
 */
protected void extendRealmClasspath() 
throws MojoExecutionException 
{ 
ClassWorld world = new ClassWorld();
ClassRealm jpaRealm;

try 
{
jpaRealm = world.newRealm( "maven.plugin.openjpa"
 , 
Thread.currentThread().getContextClassLoader() );
} 
catch ( DuplicateRealmException e ) 
{
throw new MojoExecutionException( "problem while creating new 
ClassRealm", e );
}

Iterator itor = classpathElements.iterator();

while (itor.hasNext()) 
{
File pathelem = new File( (String) itor.next() );
getLog().debug( "adding classpathElement " + pathelem.getPath() );
try 
{
// we need to use 3 slashes to prevent windoof from 
interpreting 'file://D:/path' as server 'D'
// we also have to add a trailing slash after directory paths
URL url = new URL("file:///" + pathelem.getPath() + ( 
pathelem.isDirectory() ? "/" : "" ) );
jpaRealm.addConstituent( url );
} 
catch ( MalformedURLException e ) 
{
throw new MojoExecutionException( "error in adding the 
classpath " + pathelem, e );
}
}

// set the new ClassLoader as default for this Thread
Thread.currentThread().setContextClassLoader( jpaRealm.getClassLoader() 
);
}




--- Jason van Zyl <[EMAIL PROTECTED]> schrieb am Mo, 13.10.2008:

> Von: Jason van Zyl <[EMAIL PROTECTED]>
> Betreff: Re: Accessing an artifacts classpath from a mojo?
> An: "Maven Users List" 
> Datum: Montag, 13. Oktober 2008, 18:28
> Look at the Jetty plugin, Jan has done most of the work
> there and I'm  
> sure you can lift it all.
> 
> On 13-Oct-08, at 8:23 AM, Mark Struberg wrote:
> 
> > Hi!
> >
> > I currently face a very similar problem: I'd like
> to check for a  
> > resource target/classes/META-INF/persistence.xml from
> my plugin via  
> > the plugins classloader (need the JDBC config from
> there).
> >
> > I'm currently messing around with Classworlds, but
> haven't succeed  
> > so far.
> >
> > It would be a great if you can point us to a plugin
> which has  
> > implemented such a mechanism already. I'd hate to
> call java via the  
> > CommandLine for this :(
> >
> >
> > txs and LieGrue,
> > strub
> >
> > --- Brett Porter <[EMAIL PROTECTED]>
> schrieb am Mo, 13.10.2008:
> >
> >> Von: Brett Porter <[EMAIL PROTECTED]>
> >> Betreff: Re: Accessing an artifacts classpath from
> a mojo?
> >> An: "Maven Users List"
> 
> >> Datum: Montag, 13. Oktober 2008, 12:45
> >> How do you need to use it? It can be quite simple
> to create
> >> a
> >> classloader for this, but it depends on how
> it'll be
> >> used.
> >>
> >> Cheers,
> >> Brett
> >>
> >> On 13/10/2008, at 9:40 PM, Mark Derricutt wrote:
> >>
> >>> Hi all,
> >>>
> >>> I have a maven plugin I'm working on and I
> want to
> >> include the
> >>> classpath
> >>> (main, test, others...) of the artifact
> calling the
> >> plugin - am I
> >>> going to
> >>> have to spawn/fork a new java process and
> include them
> >> on the
> >>> classpath
> >>> somehow, or is their some mojo-magic that
> takes care
> >> of this?
> >>>
> >>> Mark
> >
> >
> >
> >
> >
> >
> -
> > To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> > For add

Re: Accessing an artifacts classpath from a mojo?

2008-10-13 Thread Mark Derricutt
Cheers - I'll take a look.  Basically, in my instance, I have my library for
migrating databases [1] which I'm wrapping with a maven plugin, the plugin
walks the classpath finding classes with the @DataMigration annotation
(opening JarFile instances and walking File[] lists to determine available
classnames), then instantiating them and calling their methods where
appropriate.

As Brett says - I might be able to get away with just creating a Classloader
looking at the target/classes directory.

Mark

[1] http://code.google.com/p/dbng/wiki/IntroductionToDatabaseNG

On Tue, Oct 14, 2008 at 5:28 AM, Jason van Zyl <[EMAIL PROTECTED]> wrote:

> Look at the Jetty plugin, Jan has done most of the work there and I'm sure
> you can lift it all.


-- 
"It is easier to optimize correct code than to correct optimized code." --
Bill Harlan


Re: Accessing an artifacts classpath from a mojo?

2008-10-13 Thread Jason van Zyl
Look at the Jetty plugin, Jan has done most of the work there and I'm  
sure you can lift it all.


On 13-Oct-08, at 8:23 AM, Mark Struberg wrote:


Hi!

I currently face a very similar problem: I'd like to check for a  
resource target/classes/META-INF/persistence.xml from my plugin via  
the plugins classloader (need the JDBC config from there).


I'm currently messing around with Classworlds, but haven't succeed  
so far.


It would be a great if you can point us to a plugin which has  
implemented such a mechanism already. I'd hate to call java via the  
CommandLine for this :(



txs and LieGrue,
strub

--- Brett Porter <[EMAIL PROTECTED]> schrieb am Mo, 13.10.2008:


Von: Brett Porter <[EMAIL PROTECTED]>
Betreff: Re: Accessing an artifacts classpath from a mojo?
An: "Maven Users List" 
Datum: Montag, 13. Oktober 2008, 12:45
How do you need to use it? It can be quite simple to create
a
classloader for this, but it depends on how it'll be
used.

Cheers,
Brett

On 13/10/2008, at 9:40 PM, Mark Derricutt wrote:


Hi all,

I have a maven plugin I'm working on and I want to

include the

classpath
(main, test, others...) of the artifact calling the

plugin - am I

going to
have to spawn/fork a new java process and include them

on the

classpath
somehow, or is their some mojo-magic that takes care

of this?


Mark






-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Thanks,

Jason

--
Jason van Zyl
Founder,  Apache Maven
jason at sonatype dot com
--

You are never dedicated to something you have complete confidence in.
No one is fanatically shouting that the sun is going to rise tomorrow.
They know it is going to rise tomorrow. When people are fanatically
dedicated to political or religious faiths or any other kind of
dogmas or goals, it's always because these dogmas or
goals are in doubt.

  -- Robert Pirzig, Zen and the Art of Motorcycle Maintenance


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Accessing an artifacts classpath from a mojo?

2008-10-13 Thread Mark Struberg
Hi!

I currently face a very similar problem: I'd like to check for a resource 
target/classes/META-INF/persistence.xml from my plugin via the plugins 
classloader (need the JDBC config from there).

I'm currently messing around with Classworlds, but haven't succeed so far.

It would be a great if you can point us to a plugin which has implemented such 
a mechanism already. I'd hate to call java via the CommandLine for this :(


txs and LieGrue,
strub

--- Brett Porter <[EMAIL PROTECTED]> schrieb am Mo, 13.10.2008:

> Von: Brett Porter <[EMAIL PROTECTED]>
> Betreff: Re: Accessing an artifacts classpath from a mojo?
> An: "Maven Users List" 
> Datum: Montag, 13. Oktober 2008, 12:45
> How do you need to use it? It can be quite simple to create
> a  
> classloader for this, but it depends on how it'll be
> used.
> 
> Cheers,
> Brett
> 
> On 13/10/2008, at 9:40 PM, Mark Derricutt wrote:
> 
> > Hi all,
> >
> > I have a maven plugin I'm working on and I want to
> include the  
> > classpath
> > (main, test, others...) of the artifact calling the
> plugin - am I  
> > going to
> > have to spawn/fork a new java process and include them
> on the  
> > classpath
> > somehow, or is their some mojo-magic that takes care
> of this?
> >
> > Mark





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Accessing an artifacts classpath from a mojo?

2008-10-13 Thread Brett Porter
How do you need to use it? It can be quite simple to create a  
classloader for this, but it depends on how it'll be used.


Cheers,
Brett

On 13/10/2008, at 9:40 PM, Mark Derricutt wrote:


Hi all,

I have a maven plugin I'm working on and I want to include the  
classpath
(main, test, others...) of the artifact calling the plugin - am I  
going to
have to spawn/fork a new java process and include them on the  
classpath

somehow, or is their some mojo-magic that takes care of this?

Mark

--
"It is easier to optimize correct code than to correct optimized  
code." --

Bill Harlan



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Accessing an artifacts classpath from a mojo?

2008-10-13 Thread Mark Derricutt
Hi all,

I have a maven plugin I'm working on and I want to include the classpath
(main, test, others...) of the artifact calling the plugin - am I going to
have to spawn/fork a new java process and include them on the classpath
somehow, or is their some mojo-magic that takes care of this?

Mark

-- 
"It is easier to optimize correct code than to correct optimized code." --
Bill Harlan