我正在尝试从项目中的资源
导入文件。我指定 SOLVER_CONFIG
从 resources
的根部获取 solver.xml
。
package in.co.technovia.sudoku;
import java.util.ArrayList;
....
public class App{
private static final String SOLVER_CONFIG = "/solver.xml";
public static void main(String[] args){
SudokuGenerator sg = new SudokuGenerator();
....
}
private static Solver createSolver(){
XmlSolverConfigurer configurer = new XmlSolverConfigurer();
configurer.configure(SOLVER_CONFIG);
return configurer.buildSolver();
}
}
它应该从resources
的根部获取solver.xml
。它在 this case 中有效,但反复无常的 Java 诸神对我的项目另有规定:
jesvin@Jesvin-Technovia:~/dev/drools/sudoku$ java in.co.technovia.sudoku.AppException in thread "main" java.lang.IllegalArgumentException: The solver configuration (/solver.xml) does not exist.
at org.drools.planner.config.XmlSolverConfigurer.configure(XmlSolverConfigurer.java:79)
at in.co.technovia.sudoku.App.createSolver(App.java:67)
at in.co.technovia.sudoku.App.main(App.java:43)
问题:为什么 Java 没有检测到资源
中的文件?
我包含了 src/main/java/in/co/technovia/sudoku/
应用程序和 src/main/resources/
目录以及当前的内容类路径。
jesvin@Jesvin-Technovia:~/dev/drools/sudoku$ ls src/main/resources/
score.drl score.drl~ solver.xml solver.xml~
jesvin@Jesvin-Technovia:~/dev/drools/sudoku$ ls src/main/java/in/co/technovia/sudoku/
App.class App.java~ helloworld.class helloworld.java~
App.java domain helloworld.java solution
jesvin@Jesvin-Technovia:~/dev/drools/sudoku$ export | grep CLASSPATHdeclare -x
CLASSPATH=".:/home/jesvin/dev/drools/sudoku/binaries/*:/home/jesvin/dev/drools/sudoku/src/main/java"
<小时/>
解决方案: 正如 khmarbaise 在他的回答中所说,该目录用于 Maven 构建。因此要包含该目录,请参阅“https://stackoverflow.com/a/9045680/604511”。
最佳答案
您似乎错误地理解了 src/main/resources 文件夹在 Maven 构建中的用途。文件夹 src/main/resources 在构建过程中被复制到 target/classes 文件夹中,该文件夹代表您可以在 java 应用程序中使用的资源:
this.getResourceAsStream("/solver.xml")...
它返回一个InputStream而不是File对象。以下方法可用于从中获取文件,但此方法不适用于类路径中的 JAR,只能适用于文件和目录。
URL dir_url = ClassLoader.getSystemResource(dir_path);
// Turn the resource into a File object
File dir = new File(dir_url.toURI());
关于java - 未从 `resources` 目录中检测到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9044898/