Нахождение jdbc проблемы класса драйвера с liquibase, муравей - PullRequest
2 голосов
/ 17 сентября 2011

Вот пример моего файла муравья xml:

<!--A reference to the classpath that contains the database driver, liquibase.jar, and the changelog.xml file-->
<path id="liquibase.classpath.id">
   <pathelement location="${PROJECT_DIR}/lib/liquibase-2.0.2.jar"/>
   <pathelement location="${jdbc.classpath}"/>
   <fileset dir="${PROJECT_DIR}/db/changelog" includes="db.changelog*.xml"/>
</path>

<pathconvert refid="liquibase.classpath.id" property="liquibase.classpath.id.text" />
<echo message="${liquibase.classpath.id.text}"  />

<updateDatabase loglevel="debug"
        changeLogFile="${db.changelog.file}"
        driver="${jdbc.driver}"
        url="${jdbc.url}"
        username="${database.username}"
        password="${database.password}"
        dropFirst="false"
        classpathref="liquibase.classpath.id"
        />

Я получаю следующий вывод из <echo message="${liquibase.classpath.id.text}" />, как и ожидалось:

G:\My Documents\PROJECTS\DataSource\lib\liquibase-2.0.2.jar;
G:\My Documents\PROJECTS\DataSource\lib\hsqldb-2.2.5.jar;;
G:\My Documents\PROJECTS\DataSource\db\changelog\db.changelog-1.0.xml;
G:\My Documents\PROJECTS\DataSource\db\changelog\db.changelog-master.xml

Но updateDatabase выдает следующее исключение:

java.lang.ClassNotFoundException: org.hsqldb.jdbc.JDBCDriver

Что я делаю не так? Пожалуйста, скажите мне.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2011

Это имя драйвера hsqldb?Документы, которые я видел, показывают org.hsqldb.jdbc.JDBCDriver.

0 голосов
/ 18 сентября 2011

Как уже указывалось, драйвер JDBC должен быть org.hsqldb.jdbc.JDBCDriver .Я думаю, что ваша вторая проблема в том, что ANT не может найти ваш jar-файл hsqldb.Вы абсолютно уверены, что путь правильный?

Вот мой рабочий пример (я делегирую управление classpath плагину ivy ).

liquibase.properties

url=jdbc:hsqldb:file:build/testdb
driver=org.hsqldb.jdbc.JDBCDriver
username=sa
password=""

build.xml

<project basedir="." default="build" xmlns:ivy="antlib:org.apache.ivy.ant">

    <!--
    ====================
    Properties and paths
    ====================
    -->
    <property file="liquibase.properties" prefix="db"/>
    <property name="build.dir" location="build"/>
    <property name="db.changelog.file" location="src/scottTiger.xml"/>

    <!--
    =======
    Targets
    =======
    -->
    <target name="init" description="Download 3rd party dependencies">
        <ivy:resolve/>
        <ivy:cachepath pathid="ant.path" conf="ant"/>

        <mkdir dir="${build.dir}"/>
    </target>

    <target name="build" depends="init" description="Create the database">
        <taskdef resource="liquibasetasks.properties" classpathref="ant.path"/>

        <fail unless="db.changelog.file">db.changelog.file not set</fail>
        <fail unless="db.url">db.url not set</fail>
        <fail unless="db.driver">db.driver not set</fail>
        <fail unless="db.username">db.username not set</fail>
        <fail unless="db.password">db.password not set</fail>

        <updateDatabase
            changeLogFile="${db.changelog.file}"
            driver="${db.driver}"
            url="${db.url}"
            username="${db.username}"
            password="${db.password}"
            promptOnNonLocalDatabase="false"
            dropFirst="false"
            classpathref="ant.path"
        />

    </target>

    <target name="clean" description="Cleanup all built files">
        <delete dir="${build.dir}"/>
    </target>

    <target name="clean-all" depends="clean">
        <ivy:cleancache/>
    </target>

</project>

ivy.xml

Сборка настроена для загрузки последних версий выпуска, доступных с Maven Central

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="scott-tiger"/>
    <configurations defaultconfmapping="ant->default">
        <conf name="ant" description="Ant build dependencies"/>
    </configurations>
    <dependencies>
        <dependency org="org.liquibase" name="liquibase-core" rev="latest.release"/>
        <dependency org="org.hsqldb" name="hsqldb" rev="latest.release"/>
    </dependencies>
</ivy-module>
0 голосов
/ 18 сентября 2011

Я не вижу, где вы определяете значение для jdbc.driver, но имя класса должно быть org.hsqldb.jdbc.JDBCDriver , а не org.hsqldb.jdbcDriver

...