繁体   English   中英

在liquibase中运行Java代码更改集时获取liquibase.exception.CustomChangeException

[英]Getting liquibase.exception.CustomChangeException on running Java code changeset in liquibase

我在liquibase中运行Java代码changeet。 但是我在遇到ClassNotFoundException时遇到了这个问题。我做了一些搜索,但是找不到任何有用的东西。 尽管对此链接进行了一些研究, 还是很有用的。 我正在使用liquibase-core-2.0.1。


以下是我的变更集

<changeSet id="111" author="myname" >
        <customChange class="com.example.CreateTableTask">
        </customChange>
</changeSet>

下面是我的java类

public class CreateTableTask implements CustomTaskChange
{
    private static Logger log = Logger.getLogger(CreateTableTask.class.getName());
    @Override
    public void execute(Database database) throws CustomChangeException
    {
        System.out.print("testsomestring");
        try
        {
            JdbcConnection databaseConnection = (JdbcConnection) database.getConnection();
            log.info("testsomestring");
        }
        catch (Exception e)
        {
            throw new CustomChangeException(e);
        }
    }

    @Override
    public String getConfirmationMessage()
    {
        return null;
    }

    @Override
    public void setUp() throws SetupException
    {

    }

    @Override
    public void setFileOpener(ResourceAccessor resourceAccessor)
    {

    }

    @Override
    public ValidationErrors validate(Database database)
    {
        return null;
    }
}

以下是我得到的例外

java.lang.ClassNotFoundException:com.example.CreateTableTask liquibase.exception.ChangeLogParseException:无效的迁移文件:java.lang.ClassNotFoundException:com.example.CreateTableTask位于liquibase.parser.core.xml.XMLChangeLogSAXParser.parse(XMLChangeLogSAXParser.java:132 )在liquibase.integration.commandline.Main.doMigration(Main.java:825)的liquibase.Liquibase.update(Liquibase.java:107)在liquibase.integration.commandline.Main.main(Main.java:134)引起的:org.xml.sax.SAXException:java.lang.ClassNotFoundException:com.example.CreateTableTask liquibase.exception.CustomChangeException:java.lang.ClassNotFoundException:com.example.CreateTableTask,位于liquibase.parser.core.xml.XMLChangeLogSAXHandler.startElement( XMLChangeLogSAXHandler.java:478)(位于com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)位于com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator。 com.sun.org.apache.x上的startElement(XMLSchemaValidator.java:749) com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786)上的erces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379)。 com.sun.org上的apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)com.sun.org上的apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117) com.sun.org上的apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)com.sun.org上的apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) com.sun.org上的apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)com.sun.org上的apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)。 com.sun.org.apache.xerces.internal.j上的apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) axp.SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl.java:648)位于liquibase.parser.core.xml.XMLChangeLogSAXAXserser.parse(XMLChangeLogSAXParser.java:98)

您使用了什么命令来启动Liquibase,包含您的自定义代码的jar文件在哪里?

它应该起作用的方式是Liquibase将扫描类路径以查找所提到的类。 您可以给liquibase.bat(或liquibase.sh)一个参数来指定类路径,或者,如果我没记错的话,默认情况下,Liquibase将在其lib目录中查找。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM