简体   繁体   English

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

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

I am running Java code changeset in liquibase. 我在liquibase中运行Java代码changeet。 But I am facing this issue where I am getting ClassNotFoundException.I did some searching around but could not find anything helpful. 但是我在遇到ClassNotFoundException时遇到了这个问题。我做了一些搜索,但是找不到任何有用的东西。 Alltough some research at this link was useful. 尽管对此链接进行了一些研究, 还是很有用的。 I am using liquibase-core-2.0.1. 我正在使用liquibase-core-2.0.1。


Below is my Changeset 以下是我的变更集

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

Below is my java class 下面是我的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;
    }
}

Below is the exception I am getting 以下是我得到的例外

java.lang.ClassNotFoundException: com.example.CreateTableTask liquibase.exception.ChangeLogParseException: Invalid Migration File: java.lang.ClassNotFoundException: com.example.CreateTableTask at liquibase.parser.core.xml.XMLChangeLogSAXParser.parse(XMLChangeLogSAXParser.java:132) at liquibase.Liquibase.update(Liquibase.java:107) at liquibase.integration.commandline.Main.doMigration(Main.java:825) at liquibase.integration.commandline.Main.main(Main.java:134) Caused by: org.xml.sax.SAXException: java.lang.ClassNotFoundException: com.example.CreateTableTask liquibase.exception.CustomChangeException: java.lang.ClassNotFoundException: com.example.CreateTableTask at liquibase.parser.core.xml.XMLChangeLogSAXHandler.startElement(XMLChangeLogSAXHandler.java:478) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509) at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:749) at com.sun.org.apache.x 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) erces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) at com.sun.org.apache.xerces.internal.j 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) at liquibase.parser.core.xml.XMLChangeLogSAXParser.parse(XMLChangeLogSAXParser.java:98) axp.SAXParserImpl $ JAXPSAXParser.parse(SAXParserImpl.java:648)位于liquibase.parser.core.xml.XMLChangeLogSAXAXserser.parse(XMLChangeLogSAXParser.java:98)

What command did you use to start Liquibase, and where is the jar file containing your custom code? 您使用了什么命令来启动Liquibase,包含您的自定义代码的jar文件在哪里?

The way that it should work is that Liquibase will scan the classpath for the class mentioned. 它应该起作用的方式是Liquibase将扫描类路径以查找所提到的类。 You can give liquibase.bat (or liquibase.sh) an argument to specify a classpath, or Liquibase will look in its lib directory by default, if I recall correctly. 您可以给liquibase.bat(或liquibase.sh)一个参数来指定类路径,或者,如果我没记错的话,默认情况下,Liquibase将在其lib目录中查找。

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

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