You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Jeffrey N Hagelberg <jn...@us.ibm.com> on 2009/05/09 03:56:09 UTC

Dynamically Modifying the Classpath


Hi,

We are trying to find a way to add some jars that are generated during the
pre-integration-test phase to the class path when the integration tests
run.  There is also a folder with configuration files that is created at
the same time that we also need to add to the class path.  The jar and
directory are both built programatically by another plugin, and maven does
not know anything about them.  Does anyone know a way to do this?

I have an idea about how to do this, but it is rather convoluted. My idea
is to create a plugin that basically calls "mvn install:install-file" on
each jar to put it in the local maven repository and then programatically
add the jars as a dependencies of the project by adding artifacts for them
to the list returned by project.getDependencies().  My plan is to make the
plugin invoke the install:install-file plugin by doing something similar to
what the maven invoker plugin does.  I don't think we can do this by using
install:install-file plugin directly because we don't know ahead of time
what the exact set of jars will be.  We want to add jars in a certain
directory whose name matches a certain pattern.  There's also the fact that
it would have to happen during the pre-integration-test phase, and as far
as I know the execution order is undefined for goals executing in different
execution groups within the same phase.  That is, I don't think you can't
tell whether the executions for plugin1 or plugin2 will happen first if
they are both in the same phase.  We can't have this run before the jars
are generated!  I'd love to find out I'm wrong about this, though.

As for adding the directory to the classpath, I am somewhat at a loss.  If
the folder was created earler, I think we could add it as a test resource.
However, I think that the copying happens before the pre-integration-test
phase.  Right now, the only thing I can think of is to manually copy the
contents of the folder into the test-classes directory where the compiled
classes are.  Does anyone have any other ideas?

Does anyone know to do these things or if what I suggested above will work?

We're using maven 2.1.0.

Thanks in advance for any help you can provide.

-Jeff

Jeffrey Hagelberg, Software Engineer
XMeta Development
IBM Software Group
Phone: 978-899-2055 T/L:276-2055)
Email:jnhagelb@us.ibm.com

Re: Dynamically Modifying the Classpath

Posted by Kalle Korhonen <ka...@gmail.com>.
On Sat, May 9, 2009 at 3:36 PM, Jeffrey N Hagelberg
<jn...@us.ibm.com>wrote:

>  There's still the question of getting directories on the classpath. The
> directory we need is created during the pre-integration-test phase, so I
> don't think that adding it as a test resource would work, since the resource
> copying would happen before the directory is created. Any ideas about that?
>
For integration testing with surefire? Use additionalClasspathElements
parameter (
http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#additionalClasspathElements
)

Kalle

Kalle Korhonen ---05/09/2009 04:16:34 AM---On Fri, May 8, 2009 at 6:56 PM,
> Jeffrey N Hagelberg <jn...@us.ibm.com>wrote:
>
>
> From:
> Kalle Korhonen <ka...@gmail.com>
> To:
> Maven Users List <us...@maven.apache.org>
> Date:
> 05/09/2009 04:16 AM
> Subject:
> Re: Dynamically Modifying the Classpath
> ------------------------------
>
>
>
> On Fri, May 8, 2009 at 6:56 PM, Jeffrey N Hagelberg
> <jn...@us.ibm.com>wrote:
>
> > We are trying to find a way to add some jars that are generated during
> the
> > pre-integration-test phase to the class path when the integration tests
> > run.  There is also a folder with configuration files that is created at
> > the same time that we also need to add to the class path.  The jar and
> > directory are both built programatically by another plugin, and maven
> does
> > not know anything about them.  Does anyone know a way to do this?
>
>
> Instead of making things more complicated, why wouldn't you just let Maven
> know about these secondary artifacts with the help of build-helper plugin (
>
> http://mojo.codehaus.org/build-helper-maven-plugin/attach-artifact-mojo.html
>
> )?
>
> Kalle
>
>
>
> > I have an idea about how to do this, but it is rather convoluted. My idea
> > is to create a plugin that basically calls "mvn install:install-file" on
> > each jar to put it in the local maven repository and then programatically
> > add the jars as a dependencies of the project by adding artifacts for
> them
> > to the list returned by project.getDependencies().  My plan is to make
> the
> > plugin invoke the install:install-file plugin by doing something similar
> to
> > what the maven invoker plugin does.  I don't think we can do this by
> using
> > install:install-file plugin directly because we don't know ahead of time
> > what the exact set of jars will be.  We want to add jars in a certain
> > directory whose name matches a certain pattern.  There's also the fact
> that
> > it would have to happen during the pre-integration-test phase, and as far
> > as I know the execution order is undefined for goals executing in
> different
> > execution groups within the same phase.  That is, I don't think you can't
> > tell whether the executions for plugin1 or plugin2 will happen first if
> > they are both in the same phase.  We can't have this run before the jars
> > are generated!  I'd love to find out I'm wrong about this, though.
> >
> > As for adding the directory to the classpath, I am somewhat at a loss.
>  If
> > the folder was created earler, I think we could add it as a test
> resource.
> > However, I think that the copying happens before the pre-integration-test
> > phase.  Right now, the only thing I can think of is to manually copy the
> > contents of the folder into the test-classes directory where the compiled
> > classes are.  Does anyone have any other ideas?
> >
> > Does anyone know to do these things or if what I suggested above will
> work?
> >
> > We're using maven 2.1.0.
> >
> > Thanks in advance for any help you can provide.
> >
> > -Jeff
> >
> > Jeffrey Hagelberg, Software Engineer
> > XMeta Development
> > IBM Software Group
> > Phone: 978-899-2055 T/L:276-2055)
> > Email:jnhagelb@us.ibm.com <Em...@us.ibm.com> <
> Email%3Ajnhagelb@us.ibm.com <Em...@us.ibm.com>>
>
>
>

Re: Dynamically Modifying the Classpath

Posted by Jeffrey N Hagelberg <jn...@us.ibm.com>.
Hmm.  That might wok, although we really don't need these artifacts to be
installed and deployed.  We just need them as dependencies.  Ideally,
though, we'd want the list to be computed dynamically.  It is quite big,
and we don't have a whole lot of control over it.  We don't want to have to
update the pom.xml every time it changes.

There's still the question of getting directories on the classpath.  The
directory we need is created during the pre-integration-test phase, so I
don't think that adding it as a test resource would work, since the
resource copying would happen before the directory is created.  Any ideas
about that?

-Jeff


Jeffrey Hagelberg, Software Engineer
XMeta Development
IBM Software Group
Phone: 978-899-2055 T/L:276-2055)
Email:jnhagelb@us.ibm.com


                                                                                                                   
  From:       Kalle Korhonen <ka...@gmail.com>                                                          
                                                                                                                   
  To:         Maven Users List <us...@maven.apache.org>                                                            
                                                                                                                   
  Date:       05/09/2009 04:16 AM                                                                                  
                                                                                                                   
  Subject:    Re: Dynamically Modifying the Classpath                                                              
                                                                                                                   





On Fri, May 8, 2009 at 6:56 PM, Jeffrey N Hagelberg
<jn...@us.ibm.com>wrote:

> We are trying to find a way to add some jars that are generated during
the
> pre-integration-test phase to the class path when the integration tests
> run.  There is also a folder with configuration files that is created at
> the same time that we also need to add to the class path.  The jar and
> directory are both built programatically by another plugin, and maven
does
> not know anything about them.  Does anyone know a way to do this?


Instead of making things more complicated, why wouldn't you just let Maven
know about these secondary artifacts with the help of build-helper plugin (
http://mojo.codehaus.org/build-helper-maven-plugin/attach-artifact-mojo.html

)?

Kalle



> I have an idea about how to do this, but it is rather convoluted. My idea
> is to create a plugin that basically calls "mvn install:install-file" on
> each jar to put it in the local maven repository and then programatically
> add the jars as a dependencies of the project by adding artifacts for
them
> to the list returned by project.getDependencies().  My plan is to make
the
> plugin invoke the install:install-file plugin by doing something similar
to
> what the maven invoker plugin does.  I don't think we can do this by
using
> install:install-file plugin directly because we don't know ahead of time
> what the exact set of jars will be.  We want to add jars in a certain
> directory whose name matches a certain pattern.  There's also the fact
that
> it would have to happen during the pre-integration-test phase, and as far
> as I know the execution order is undefined for goals executing in
different
> execution groups within the same phase.  That is, I don't think you can't
> tell whether the executions for plugin1 or plugin2 will happen first if
> they are both in the same phase.  We can't have this run before the jars
> are generated!  I'd love to find out I'm wrong about this, though.
>
> As for adding the directory to the classpath, I am somewhat at a loss.
If
> the folder was created earler, I think we could add it as a test
resource.
> However, I think that the copying happens before the pre-integration-test
> phase.  Right now, the only thing I can think of is to manually copy the
> contents of the folder into the test-classes directory where the compiled
> classes are.  Does anyone have any other ideas?
>
> Does anyone know to do these things or if what I suggested above will
work?
>
> We're using maven 2.1.0.
>
> Thanks in advance for any help you can provide.
>
> -Jeff
>
> Jeffrey Hagelberg, Software Engineer
> XMeta Development
> IBM Software Group
> Phone: 978-899-2055 T/L:276-2055)
> Email:jnhagelb@us.ibm.com <Em...@us.ibm.com>


Re: Dynamically Modifying the Classpath

Posted by Kalle Korhonen <ka...@gmail.com>.
On Fri, May 8, 2009 at 6:56 PM, Jeffrey N Hagelberg
<jn...@us.ibm.com>wrote:

> We are trying to find a way to add some jars that are generated during the
> pre-integration-test phase to the class path when the integration tests
> run.  There is also a folder with configuration files that is created at
> the same time that we also need to add to the class path.  The jar and
> directory are both built programatically by another plugin, and maven does
> not know anything about them.  Does anyone know a way to do this?


Instead of making things more complicated, why wouldn't you just let Maven
know about these secondary artifacts with the help of build-helper plugin (
http://mojo.codehaus.org/build-helper-maven-plugin/attach-artifact-mojo.html
)?

Kalle



> I have an idea about how to do this, but it is rather convoluted. My idea
> is to create a plugin that basically calls "mvn install:install-file" on
> each jar to put it in the local maven repository and then programatically
> add the jars as a dependencies of the project by adding artifacts for them
> to the list returned by project.getDependencies().  My plan is to make the
> plugin invoke the install:install-file plugin by doing something similar to
> what the maven invoker plugin does.  I don't think we can do this by using
> install:install-file plugin directly because we don't know ahead of time
> what the exact set of jars will be.  We want to add jars in a certain
> directory whose name matches a certain pattern.  There's also the fact that
> it would have to happen during the pre-integration-test phase, and as far
> as I know the execution order is undefined for goals executing in different
> execution groups within the same phase.  That is, I don't think you can't
> tell whether the executions for plugin1 or plugin2 will happen first if
> they are both in the same phase.  We can't have this run before the jars
> are generated!  I'd love to find out I'm wrong about this, though.
>
> As for adding the directory to the classpath, I am somewhat at a loss.  If
> the folder was created earler, I think we could add it as a test resource.
> However, I think that the copying happens before the pre-integration-test
> phase.  Right now, the only thing I can think of is to manually copy the
> contents of the folder into the test-classes directory where the compiled
> classes are.  Does anyone have any other ideas?
>
> Does anyone know to do these things or if what I suggested above will work?
>
> We're using maven 2.1.0.
>
> Thanks in advance for any help you can provide.
>
> -Jeff
>
> Jeffrey Hagelberg, Software Engineer
> XMeta Development
> IBM Software Group
> Phone: 978-899-2055 T/L:276-2055)
> Email:jnhagelb@us.ibm.com <Em...@us.ibm.com>