2015-11-09 48 views
1

我在liquibase中运行Java代码更改集。但我遇到这个问题,我得到了ClassNotFoundException.I做了一些搜索,但找不到有用的东西。尽管一些研究在 this link是有用的。我正在使用liquibase-core-2.0.1。在liquibase中运行Java代码更改集时出现liquibase.exception.CustomChangeException


下面是我的变更集

<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.Liquibase.update(Liquibase.java:107) at liquibase.integration.commandline.Main.doMigration(Main.java:825) at 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) 在玉米.sun.org.apache.xerces.internal.par sers.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) 在com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786) 在的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) 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)

+0

你用什么命令启动Liquibase,以及包含自定义代码的jar文件在哪里?它应该工作的方式是Liquibase将扫描所提及的类的类路径。你可以给liquibase.bat(或liquibase.sh)一个参数来指定一个类路径,或者如果我记得正确的话,Liquibase默认会在它的lib目录中查找。 这是Liquibase的一个非常老的版本,所以如果你可以升级你可能应该。 – SteveDonie

+0

谢谢@SteveDonie .. **更新**是我用于liquibase的tjhe命令..缺少的是**参数来指定一个类路径** ..现在解决它..你可以将评论作为答案我会接受.. –

回答

0

你用什么命令启动Liquibase,以及jar文件的连接确定你的自定义代码?

它应该工作的方式是Liquibase将扫描提到的类的类路径。你可以给liquibase.bat(或liquibase.sh)一个参数来指定一个类路径,或者如果我记得正确的话,Liquibase默认会在它的lib目录中查找。

相关问题