我有一个类,它加载一个so框架应用程序上下文,如下所示:
package com.offlinesupport;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class OfflineScriptSupport {
private static ApplicationContext appCtx;
public static final void initialize() {
appCtx = new ClassPathXmlApplicationContext( new String[] {
"mycontext.spring.xml"
} );
}
public static final ApplicationContext getApplicationContext() {
return appCtx;
}
public static final void main( String[] args ) {
System.out.println( "Starting..." );
initialize();
System.out.println( "loaded" );
}
}类OfflineScriptSupport和文件mycontext.spring.xml分别部署到单独的jars中(以及各自模块中的其他类和资源)。让我们假设jar文件是OfflineScriptSupport.jar和*MyContext.jar“,mycontext.spring.xml放在jar的根部。
在Jython脚本(*myscript.jy")中,我尝试调用初始化方法来创建应用程序上下文:
from com.offlinesupport import OfflineScriptSupport
OfflineScriptSupport.initialize();我使用以下命令(来自Linux)执行Jython脚本:
jython -Dpython.path=spring.jar:OfflineScriptSupport.jar:MyContext.jar myscript.jySpringframework应用程序上下文找不到mycontext.spring.xml文件。它显示以下错误:
java.io.FileNotFoundException: class path resource [mycontext.spring.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:137)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:167)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:148)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:126)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:142)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:81)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:89)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:269)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:87)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:72)
at com.offlinesupport.OfflineScriptSupport.initialize(OfflineScriptSupport.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)如果我直接从Java运行jar (使用OfflineScriptSupport中的主要入口点),它就能工作,并且不会引发错误。
Jython处理类路径的方式是否有什么特别之处,使得Springframework的ClassPathXmlApplicationContext无法工作(即无法在类路径中找到资源文件)?
发布于 2010-05-13 19:37:48
您可能需要使用"/mycontext.spring.xml“类路径资源来指示完整路径。
发布于 2010-06-08 13:38:34
尝试使用FileSystemXmlApplicationContext("mycontext.spring.xml")代替。
“普通路径将始终被解释为相对于当前VM工作目录”。http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/context/support/FileSystemXmlApplicationContext.html
发布于 2012-06-18 11:07:40
确保您的类路径设置正确。假设您的应用程序上下文文件位于webapp的webapp dir中,请执行以下操作:
cd webapps/<application>/WEB-INF
java -cp 'lib/*:classes:.' org.python.util.jython
>>> from org.springframework.context.support import ClassPathXmlApplicationContext
>>> ctx = ClassPathXmlApplicationContext(['mycontext.spring.xml'])注意'.‘在类路径中,这显式地包括当前目录,以便可以加载任何资源。还请注意,我引用类路径,这样shell就不会展开它。
这应该会加载应用程序。
https://stackoverflow.com/questions/2821966
复制相似问题