我正在尝试在gradle构建脚本中使用外部jar中的类。类使用spring framewrork,它在类路径中查找配置文件。
public class EntryPoint {
public DependencyXmlParseAction get() {
try {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("folder/appName-applicationContext.xml");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
我收到此错误:
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [folder/appName-applicationContext.xml]; nested exception is java.io.FileNotFoundException: class path resource [folder/appName-applicationContext.xml] cannot be opened because it does not exist
如果我尝试使用参数执行构造函数,我会得到同样的错误:
new ClassPathXmlApplicationContext("appName-applicationContext.xml")
和appName-applicationContext.xml位于jar存档的根目录。
因此它告诉文件不在类路径上。但jar包含该文件的确切位置。 所以我认为这与我用于从jar加载类的gradle脚本类路径和类加载器有关。
第一个问题:如何打印gradle脚本类路径?
我以下一种方式在脚本中加载jar:
repositories {
mavenLocal()
mavenCentral()
}
configurations {
buildScriptJar
}
dependencies {
buildScriptJar "package:DependencyParser:0.1.0__0-0_0-0_0-0_0-0"
}
URLClassLoader loader = GroovyObject.class.classLoader
configurations.buildScriptJar.each {File file ->
loader.addURL(file.toURL())
System.out.println("");
System.out.println(" Loaded file is " + file.getPath());
}
Class entryPointClass = loader.loadClass('folder.EntryPoint')
类从加载器成功加载,但在此之后搜索配置文件失败。
如果我尝试以其他方式加载类,我会收到其他错误:尽管它们位于gradle缓存中,但未找到可加载jar的依赖项。
Gradle版本是1.10