I am running a target in ant. This target depends on external task
from ddlutils.


<profile>
            <id>db</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.
plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.7</version>
                        <executions>
                            <execution>
                                <id>setup-db</id>
                                <phase>process-resources</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <detail>true</detail>
                            <target name="database-setup"  >
                                <path id="current.classpath">
                                    <path refid="maven.plugin.classpath" />
                                    <path refid="maven.compile.classpath" />
                                    <path refid="maven.runtime.classpath" />
                                </path>
                                <taskdef name="ddlToDatabase"
classname="org.apache.ddlutils.task.DdlToDatabaseTask"
classpathref="current.classpath">
                                    <!-- <classpath
refid="current.classpath" /> -->
                                </taskdef>
                                <property name="current_classpath"
refid="current.classpath" />
                                <!-- <pathconvert
pathsep="${line.separator}| |..... " property="formatted.classpath"
refid="current.classpath"  /> -->
                                <ddlToDatabase>
                                    <database
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost/test" username="postgres"
password="postgres" />
                                    <fileset dir="src/sql/">
                                        <include name="schema.xml" />
                                    </fileset>
                                    <createDatabase failonerror="true" />
                                    <writeSchemaToDatabase />
                                </ddlToDatabase>
                            </target>
                        </configuration>
                        <dependencies>
                            <dependency>
                                <groupId>org.apache.ddlutils</groupId>
                                <artifactId>ddlutils</artifactId>
                                <version>1.0</version>
                            </dependency>
                            <dependency>
                                <groupId>log4j</groupId>
                                <artifactId>log4j</artifactId>
                                <version>1.2.17</version>
                            </dependency>
                            <!-- <dependency> -->
                            <!-- <groupId>org.postgresql</groupId> -->
                            <!-- <artifactId>postgresql</artifactId> -->
                            <!-- <version>9.3-1100-jdbc41</version> -->
                            <!-- </dependency> -->
                        </dependencies>
                    </plugin>


The task creates a jdbc connection to load data into a DB. The
connection needs the JDBC driver.
If I add the driver to the <dependencies> section, everything works
fine. However, the dependency on the driver is declared somewhere else
(in the global dependencies), and this driver may change depending on
the DB. Therefore we don't want to declare it twice. The option we
have is to use "maven.compile.classpath". However, for some reason, I
am getting an  exception about the driver class not found:

Caused by: org.apache.ddlutils.DatabaseOperationException: Error while
trying to create a database: org.postgresql.Driver
        at 
org.apache.ddlutils.platform.postgresql.PostgreSqlPlatform.createOrDropDatabase(PostgreSqlPlatform.java:164)
        at 
org.apache.ddlutils.platform.postgresql.PostgreSqlPlatform.createDatabase(PostgreSqlPlatform.java:201)
        at 
org.apache.ddlutils.task.CreateDatabaseCommand.execute(CreateDatabaseCommand.java:80)
        ... 35 more
Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver
        at 
org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
        at 
org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)
        at 
org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)
        at 
org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:188)
        at 
org.apache.ddlutils.platform.postgresql.PostgreSqlPlatform.createOrDropDatabase(PostgreSqlPlatform.java:155)
        ... 37 more


To troubleshoot the issue, I printed out the classpath ref
"current.classpath", and the driver jar was there, and can be seen as
the last dependency in the output !


Setting project property:
maven.dependency.org.apache.portals.bridges.portals-bridges-common.jar.path
-> 
/home/mansour/.m2/repository/org/apache/portals/bridges/portals-bridges-common/2.0/portals-bridges-common-2.0.jar
Setting project property:
maven.dependency.org.apache.portals.applications.apa-logging.jar.path
-> 
/home/mansour/.m2/repository/org/apache/portals/applications/apa-logging/1.0/apa-logging-1.0.jar
Setting project property:
maven.dependency.org.postgresql.postgresql.jar.path ->
/home/mansour/.m2/repository/org/postgresql/postgresql/9.3-1100-jdbc41/postgresql-9.3-1100-jdbc41.jar
[INFO] Executing tasks Build sequence for target(s) `database-setup'
is [database-setup]
Complete build sequence is [database-setup, ]

database-setup:
Adding reference: current.classpath
Class org.apache.ddlutils.task.DdlToDatabaseTask loaded from parent
loader (parentFirst)
 +Datatype ddlToDatabase org.apache.ddlutils.task.DdlToDatabaseTask
Setting project property: current_classpath ->
/home/mansour/.m2/repository/org/apache/maven/plugins/maven-antrun-plugin/1.7/maven-antrun-plugin-1.7.jar:
........:
/home/mansour/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.3.2/jackson-mapper-asl-1.3.2.jar:/home/mansour/.m2/repository/org/codehaus/jackson/jackson-xc/1.3.2/jackson-xc-1.3.2.jar:/home/mansour/.m2/repository/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6.jar:/home/mansour/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.4/jcl-over-slf4j-1.7.4.jar:/home/mansour/.m2/repository/org/postgresql/postgresql/9.3-1100-jdbc41/postgresql-9.3-1100-jdbc41.jar


Is there something wrong I am doing, that is preventing antrun taskdef
from using the current.classpath ref ??

Thank you.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

Reply via email to