[英]file in src/main/resources is not in classpath
I created a simple program to check if spring-context define a file in src/main/resources folder. 我创建了一个简单的程序来检查spring-context是否在src / main / resources文件夹中定义了一个文件。
I have this file structure: 我有这个文件结构:
project
--> src/main/resources/spring-config.xml
--> src/main/resources/testfile02
and I try to access to these files using this test class 我尝试使用此测试类访问这些文件
public class ClasspathTest {
public static void main(String args[]) throws URISyntaxException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-config.xml");
ClassPathResource testfile02 = new ClassPathResource("classpath:testfile02");
if (testfile02 != null) {
try (InputStream inputStream = testfile02.getInputStream();
Reader streamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(streamReader)) {
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException exc) {
exc.printStackTrace();
}
}
}
}
And I can't understand why I get FileNotFound exception, during classpathResource.getInputStream() if the ClassPathXmlAppContext is working ok. 如果ClassPathXmlAppContext工作正常,我无法理解为什么我在classpathResource.getInputStream()期间得到FileNotFound异常。
execution log: 执行日志:
янв 19, 2016 11:57:48 AM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6193b845: startup date [Tue Jan 19 11:57:48 MSK 2016]; root of context hierarchy
янв 19, 2016 11:57:48 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring-config.xml]
java.io.FileNotFoundException: class path resource [classpath:testfile02] cannot be opened because it does not exist
The project is built using gradle: 该项目使用gradle构建:
apply plugin: 'java'
apply plugin: 'eclipse'
sourceCompatibility = 1.8
version = '1.0'
repositories {
mavenCentral()
}
dependencies {
compile 'org.springframework:spring-context:4.1.6.RELEASE'
}
.classpath: 的.classpath:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="src" path="src/main/resources"/>
<classpathentry kind="src" path="src/test/java"/>
<classpathentry kind="src" path="src/test/resources"/>
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry exported="true" kind="con" path="org.springsource.ide.eclipse.gradle.classpathcontainer"/>
<classpathentry kind="output" path="bin"/>
</classpath>
I tried to detect systemproperty java.class.path, and I've got {project}/bin and jars for spring there and that's all. 我试图检测系统性的java.class.path,我有春天那里的{project} / bin和jars,就是这样。 No resources folder.
没有资源文件夹。 How can I get access to resources from src/main/resources as I get access to src/main/resources/spring-config.xml?
当我访问src / main / resources / spring-config.xml时,如何从src / main / resources访问资源?
You don't need to add the 'classpath:' prefix when using the constructor. 使用构造函数时,不需要添加'classpath:'前缀。 This works:
这有效:
public class ClasspathTest {
public static void main(String args[]) throws URISyntaxException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-config.xml");
ClassPathResource testfile02 = new ClassPathResource("testfile02");
if (testfile02 != null) {
try (InputStream inputStream = testfile02.getInputStream();
Reader streamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(streamReader)) {
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException exc) {
exc.printStackTrace();
}
}
}
}
The problem is the vanilla Java which is how you're running it will not add src/main/resources to the classpath, that is a convention that other runners use. 问题是vanilla Java,你运行它的方式不会将src / main / resources添加到类路径中,这是其他运行者使用的约定。
Below works fine. 下面工作正常。
package com.greg;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = { "classpath:spring-config.xml",
"classpath:testfile02.xml" })
public class ClasspathTest {
@Test
public void test1() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"classpath:spring-config.xml");
ClassPathResource testfile02 = new ClassPathResource("testfile02.xml");
if (testfile02 != null) {
try {
InputStream inputStream = testfile02.getInputStream();
Reader streamReader = new InputStreamReader(inputStream,
"UTF-8");
BufferedReader bufferedReader = new BufferedReader(streamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException exc) {
exc.printStackTrace();
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.