Hi

I would like to take this one step further, I need to obtain the details for a single dependency declared in a pom and use it in my plugin:

My plugin, which runs SQL scripts, needs to reference the JDBC driver of the plugin users choice.

I need to be able to put the jar file containing this users chosen driver onto the classpath that my plugin is using at runtime. - I don't want to break the isolation that my plugin has from the other dependencies in the users pom, I just need the jdbc driver. - I don't want to have to specify the jdbc driver as a dependency for my own plugin because I want lots of people to be able to use this with lots of different drivers.

The only way I can think of to do this is to follow the steps outlined in this thread for obtaining a list of artifacts for the pom using the plugin, iterate through the list until I find the one the user has specified to be their jdbc driver (through a property of some kind) and then add that to the classpath being used by my plugin.

Although possible, this is a little unwieldy and I can;t help feeling there must be an easy way to do this.
So...

Is there an existing way to do this, something like my example below (note <dependency> property)

<build>
   <plugins>
     <plugin>
       <groupId>my.group.id</groupId>
       <artifactId>plugin-sqlrunner</artifactId>
       <version>1.0.0-dev</version>
       <executions>
         <execution>
           <phase>test</phase>
           <configuration>
                 <user>${db-username}</user>
              <pass>${db-password}</pass>
              <url>${db-url}</url>
<driver>oracle.jdbc.OracleDriver</driver> <onerror>continue</onerror>
              <dependency>
                  <groupId>ojdbc</groupId>
                  <artifactId>ojdbc</artifactId>
                  <version>14</version>
              <dependency>
              <files>
                <file>${basedir}/src/main/oracle/BillImage.sql</file>
                <file>${basedir}/src/main/oracle/RunTimeControls.sql</file>
                <file>${basedir}/src/main/oracle/audit.sql</file>
                <file>${basedir}/src/main/oracle/CreateSequences.sql</file>
              </files>
           </configuration>
           <goals>
             <goal>runsql</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
   </plugins>


regards

Stephen

Wim Deblauwe wrote:

ok, thanks! That was it.

2005/11/21, Allison, Bob <[EMAIL PROTECTED]>:
The tag "@requiresDependencyResolution" has to be on the class, not the
parameter.

-----Original Message-----
From: Wim Deblauwe [mailto:[EMAIL PROTECTED]
Sent: Monday, November 21, 2005 06:41
To: Maven Users List
Subject: Re: [m2] Copy the dependencies of a project in a custom plugin


The collection of artifacts is empty. When I was using dependencies, it
was
not empty. What am I doing wrong? This is my code:

/**
* @goal process-resources
* @description Copy the dependencies for the InstallShield Merge Module
*/
public class MsmProcessResourcesMojo extends AbstractMojo
{
/**
* @parameter expression="${project.artifacts}"
* @requiresDependencyResolution
*/
private Collection artifacts;

/**
* @parameter expression="${project.build.directory}/resources"
*/
private File targetDirectory;

public MsmProcessResourcesMojo()
{
}

public void execute() throws MojoExecutionException,
MojoFailureException
{
try
{
getLog().info( "Process Resources for InstallShield Merge Module..." );
Iterator iterator = artifacts.iterator();
while (iterator.hasNext())
{
Artifact artifact = (Artifact)iterator.next();
FileUtils.copyFileToDirectory( artifact.getFile(), new File(
targetDirectory, artifact.getType() + "s" ) );
}
}
catch (IOException e)
{
throw new MojoExecutionException( "Error copying artifacts", e );
}
}
}

thank you,

Wim

2005/11/21, Brett Porter <[EMAIL PROTECTED]>:
maven-artifact and maven-project (though you may not need the project
dependency if you are just using the expression below as it is
runtime, and Mavne provides it).

- Brett

On 11/21/05, Wim Deblauwe <[EMAIL PROTECTED]> wrote:
What dependency do I need for the Artifact and Project classes in my
Mojo?
2005/11/21, Brett Porter <[EMAIL PROTECTED]>:
On 11/21/05, Wim Deblauwe <[EMAIL PROTECTED]> wrote:
Hi,

I'm writing a custom plugin and I need to copy the project's
dependencies
from the local repository to a certain directory. How can I do
this
best?

You should use ${project.artifacts} instead which includes all the
transitive artifacts, and for which you can call
artifact.getFile().
Make sure you include @requiresDependencyResolution

question 2:
When my plugin works, it will produce a different artifact
(.msm),
how
should I handle the 'instal' and 'deploy' of that artifact? Do I
need to
write my own custom mojo for that or can I re-use the plugins
already
written for .jar files?
You can reuse the mojos, but you will still need to define the
customisations, which will require a plugin. There are examples in
the
"introduction to the build lifecycle".

Cheers,
Brett


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


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


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



Reply via email to