Maven+Selenium/Java项目Jenkins部署遇FileNotFoundException求解决方案
解决Maven Selenium项目中Jenkins运行时找不到data.properties的问题
这问题我碰到过好多次了——绝对路径在本地跑没问题,但一到CI/CD环境(比如Jenkins)就歇菜,核心原因就是不同环境的文件系统结构完全不一样。给你几个靠谱的解决方案,按优先级来:
1. 最规范的做法:将资源文件移到Maven默认资源目录
Maven有约定俗成的资源目录src/main/resources,把你的data.properties(如果需要子目录就放在src/main/resources/dependency/下)移到这里。编译打包时,Maven会自动把这个目录下的文件放到classpath根目录,不管本地还是Jenkins环境都能统一访问。
然后修改加载文件的代码,用**类路径(classpath)**读取,而不是绝对路径:
import java.io.InputStream; import java.util.Properties; public class YourTestClass { public void loadProperties() { Properties props = new Properties(); // 注意路径:如果放在resources/dependency下,就写"/dependency/data.properties" try (InputStream inputStream = getClass().getResourceAsStream("/data.properties")) { props.load(inputStream); // 后续使用props获取配置 } catch (Exception e) { e.printStackTrace(); // 这里可以加自定义异常处理 } } }
如果是在静态方法里加载,用ClassLoader更稳妥:
InputStream inputStream = Thread.currentThread().getContextClassLoader() .getResourceAsStream("dependency/data.properties");
2. 保留原文件位置的替代方案
如果你不想移动文件,仍想放在src/main/java/dependency/下,需要修改pom.xml,让Maven把这个目录下的.properties文件也当作资源打包到classpath里:
<build> <resources> <!-- 配置java目录下的properties文件作为资源 --> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> </includes> </resource> <!-- 保留默认的resources目录配置 --> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>
配置完后,依然用上面的类路径方式加载文件即可,不需要用绝对路径。
为什么绝对路径会失败?
Jenkins有自己独立的工作空间(比如默认是/var/lib/jenkins/workspace/your-project-name/),和你本地的/Users/ugo.kaine/git/repository/...路径完全不同,硬编码的绝对路径在Jenkins环境里自然找不到对应的文件。而类路径加载是基于项目打包后的结构,不管部署到哪里都能一致访问。
内容的提问来源于stack exchange,提问作者chibugo kaine
相关产品推荐
相关产品推荐

