[英]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.