java maven项目testng执行时使用的是test-classes下的文件,共享main下方resource的配置
在pom.xml中配置
<!-- 共享main下面的resources文件-->
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources/testData</directory>
</testResource>
<testResource>
<directory>${project.basedir}/src/main/resources/testData</directory>
</testResource>
</testResources>
// 服务端读取(非静态)
InputStream in = this.getClass().getResourceAsStream("/properties/test.properties");
Properties properties = new Properties();
properties.load(in);
properties.getProperty("name");
// 服务端读取(静态)
InputStream stream = Workbook.class.getResourceAsStream("/"+path);
在执行测试时,注意其classpath是test-classes,需要在文件共享完成配置后才能访问到resources的文件,以target目录的结构为准
// 以下两个返回路径不一样的,使用路径时需要注意
String filepath = Workbook.class.getClassLoader().getResource("").getPath()
// ClassLoader:/E:/coding/IFauto/target/test-classes/
String filepath = Workbook.class.getResource("").getPath()
//class:file:/C:/Users/user/.m2/repository/org/apache/poi/poi-ooxml/3.15/poi-ooxml-3.15.jar!/org/apache/poi/ss/usermodel/
class.getClassLoader().getResourceAsStream() 和 class.getResouceAsStream() 的区别
class.getClassLoader().getResourceAsStream(String name) 默认从classpath中找文件(文件放在resources目录下),name开头不能带”/“,否则会抛空指针。采用相对路径, “/“就相当于当前进程的根目录,即项目根目录;
inStream = PropertiesTest.class.getClassLoader().getResourceAsStream("com/test/demo/test.properties");
class.getResourceAsStream(String name) 是采用绝对路径,绝对路径是相对于 classpath 根目录的路径,”/“ 就代表着 classpath,所以 name 属性需要前面加上 “/“;
inStream = PropertiesTest.class.getResourceAsStream("/com/test/demo/test.properties")