在 liquibase 中获取 liquibase.exception.CustomChangeException 运行 Java 代码变更集
Getting liquibase.exception.CustomChangeException on running Java code changeset in liquibase
我是 运行 Java liquibase 中的代码变更集。但是我遇到了这个问题,我 ClassNotFoundException.I 做了一些搜索但找不到任何有用的东西。尽管 this link 的一些研究很有用。我正在使用 liquibase-core-2.0.1.
下面是我的变更集
<changeSet id="111" author="myname" >
<customChange class="com.example.CreateTableTask">
</customChange>
</changeSet>
下面是我的javaclass
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: 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.xerces.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.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648)
at liquibase.parser.core.xml.XMLChangeLogSAXParser.parse(XMLChangeLogSAXParser.java:98)
您使用什么命令启动了 Liquibase,包含您的自定义代码的 jar 文件在哪里?
它应该工作的方式是 Liquibase 将扫描提到的 class 的 class 路径。您可以给 liquibase.bat(或 liquibase.sh)一个参数来指定 class 路径,否则如果我没记错的话,Liquibase 默认会在其 lib 目录中查找。
我是 运行 Java liquibase 中的代码变更集。但是我遇到了这个问题,我 ClassNotFoundException.I 做了一些搜索但找不到任何有用的东西。尽管 this link 的一些研究很有用。我正在使用 liquibase-core-2.0.1.
下面是我的变更集
<changeSet id="111" author="myname" >
<customChange class="com.example.CreateTableTask">
</customChange>
</changeSet>
下面是我的javaclass
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: 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.xerces.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.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648) at liquibase.parser.core.xml.XMLChangeLogSAXParser.parse(XMLChangeLogSAXParser.java:98)
您使用什么命令启动了 Liquibase,包含您的自定义代码的 jar 文件在哪里?
它应该工作的方式是 Liquibase 将扫描提到的 class 的 class 路径。您可以给 liquibase.bat(或 liquibase.sh)一个参数来指定 class 路径,否则如果我没记错的话,Liquibase 默认会在其 lib 目录中查找。