Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring应用程序在罐子中嵌入Liquibase_Java_Spring_Liquibase - Fatal编程技术网

Java 使用Spring应用程序在罐子中嵌入Liquibase

Java 使用Spring应用程序在罐子中嵌入Liquibase,java,spring,liquibase,Java,Spring,Liquibase,在uberjar中嵌入带有liquibase的纯Spring(不是Spring Boot)应用程序时,我遇到了一个非常特殊的错误。SpringLiquibase bean一经初始化,它就开始寻找我不懂的东西: WARNING 7/16/15 3:22 PM: liquibase: No Liquibase-Packages entry found in MANIFEST.MF. Using fallback of entire 'liquibase' package WARNING 7/16/1

在uberjar中嵌入带有liquibase的纯Spring(不是Spring Boot)应用程序时,我遇到了一个非常特殊的错误。SpringLiquibase bean一经初始化,它就开始寻找我不懂的东西:

WARNING 7/16/15 3:22 PM: liquibase: No Liquibase-Packages entry found in MANIFEST.MF. Using fallback of entire 'liquibase' package
WARNING 7/16/15 3:28 PM: liquibase: Error initializing SpringLiquibase
java.io.FileNotFoundException: ServletContext resource [/liquibase] cannot be resolved to URL because it does not exist
at org.springframework.web.context.support.ServletContextResource.getURL(ServletContextResource.java:156)
at liquibase.integration.spring.SpringLiquibase$SpringResourceOpener.init(SpringLiquibase.java:117)
at liquibase.resource.AbstractResourceAccessor.<init>(AbstractResourceAccessor.java:22)
at liquibase.resource.ClassLoaderResourceAccessor.<init>(ClassLoaderResourceAccessor.java:19)
at liquibase.integration.spring.SpringLiquibase$SpringResourceOpener.<init>(SpringLiquibase.java:74)
at liquibase.integration.spring.SpringLiquibase.createResourceOpener(SpringLiquibase.java:489)
at liquibase.integration.spring.SpringLiquibase.createLiquibase(SpringLiquibase.java:439)
at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:389)
WARNING 7/16/15 3:28 PM: liquibase: Error initializing SpringLiquibase
java.io.FileNotFoundException: ServletContext resource [/liquibase] cannot be resolved to URL because it does not exist
(stacktrace again)
警告2015年7月16日下午3:22:liquibase:在MANIFEST.MF中找不到liquibase程序包条目。使用整个“liquibase”包的回退
警告2015年7月16日下午3:28:liquibase:初始化SpringLiquibase时出错
java.io.FileNotFoundException:ServletContext资源[/liquibase]无法解析为URL,因为它不存在
位于org.springframework.web.context.support.ServletContextResource.getURL(ServletContextResource.java:156)
位于liquibase.integration.spring.SpringLiquibase$SpringResourceOpener.init(SpringLiquibase.java:117)
位于liquibase.resource.AbstractResourceAccessor。(AbstractResourceAccessor.java:22)
位于liquibase.resource.ClassLoaderResourceAccessor。(ClassLoaderResourceAccessor.java:19)
位于liquibase.integration.spring.SpringLiquibase$SpringResourceOpener。(SpringLiquibase.java:74)
位于liquibase.integration.spring.SpringLiquibase.createResourceOpener(SpringLiquibase.java:489)
位于liquibase.integration.spring.SpringLiquibase.createLiquibase(SpringLiquibase.java:439)
位于liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:389)
警告2015年7月16日下午3:28:liquibase:初始化SpringLiquibase时出错
java.io.FileNotFoundException:ServletContext资源[/liquibase]无法解析为URL,因为它不存在
(再次跟踪)
我知道MANIFEST.MF中有Liquibase包条目,并使用shade插件填充它(尽管我不知道它有什么用途),然后使用shade插件放置它,但它没有任何效果。liquibase在寻找什么以及如何克服这些错误?

根据这一点,如果您创建src/main/webapp文件夹,此问题将得到解决:

顺便说一句,根本原因是不存在src/main/webapp文件夹。作为解决方法,您可以在@WebAppConfiguration中创建一个或设置一个值,该值指向实际存在的classpath:folder


进一步调试,我发现所有找到的资源都无法打开,因为我没有为embedded jetty设置基本资源,所以它甚至无法读取MANIFEST.MF,据我所知,它试图获取名为
liquibase
的目录来扫描包。这也失败了,当前的问题是jetty在ServletContextHandler中没有类路径资源的本机处理程序,看起来我必须创建自己的org.eclipse.jetty.util.resource.resource实现。如果我愿意的话,我会把它贴在这里。我也在使用Undertow+Spring Boot 1.2.5 One Jar+Liquibase.AFAIK时遇到这个错误,运行Liquibase不需要清单条目。你能发布你的SpringLiquibase配置吗?@Lia我恐怕不能,那是一年前的事了。问题不在于缺少舱单,而在于使用jetty时无法读取相应的文件;我们已经切换到tomcat,问题已经解决了。