Hi Brett

In regard to your second solution below:

I tried it out, but I get a parse error when reading the POM "unrecognised tag: 'dependency'"

I dont think the "dependency" tag is allowed within a plugin tag.

Have I misunderstood your solution?

Here is what I understood you to mean by "include my dependency inside the plugin 
declaration"

<build>
   <plugins>
     <plugin>
       <groupId>com.group.id</groupId>
        <artifactId>plugin-sqlrunner</artifactId>
        <version>1.0.0-dev</version>
        <dependency>
          <groupId>ojdbc</groupId>
          <artifactId>ojdbc</artifactId>
          <version>14</version>
        </dependency>
       <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>
              <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>
 </build> 


Stephen



Brett Porter wrote:

Two ways to solve this:

- have the user specify which dependency to use via configuration:
<plugin>
 ...
<configuration>
 <jdbcDriver>com.mysql:mysql-driver</jdbcDriver>
</configuration>
</plugin>
...
<dependency>
 <groupId>com.mysql</groupId>
 <artifactId>mysql-driver</artifactId>
 <version>5.0.0</version>
</dependency>

- add the dependency to the plugin declaration and just use the
current classloader (probably the best)
<plugin>
...
<dependency>
 <groupId>com.mysql</groupId>
 <artifactId>mysql-driver</artifactId>
 <version>5.0.0</version>
</dependency>
</plugin>

Cheers,
Brett

On 11/21/05, Stephen Cowx <[EMAIL PROTECTED]> wrote:
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]






---------------------------------------------------------------------
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