我正在从位于.f90.o:
${FF90} ${FFLAGS} -c $<
.c.o:
${CC} ${CFLAGS} -I$(SAM_SRC)/TIMING $(NOTIMERS) -c $<
的(maven)生成文件中读取信息。 Eclipse没有向我显示路径,但是,我无法在target/[projectname]/WEB-INF/classes/
中创建名为classes
的新文件夹(因为已经存在一个)。
我可以通过命令行找到文件夹和文件,但是,我无法为该文件创建WEB-INF
。
但是,我可以访问FileInputStream
中的其他文件,例如target
,这些文件已在每次构建期间生成。唯一的区别是我可以在Eclipse中看到该文件。
该项目是一个GWT项目,并使用maven构建。我没有看到Java无法找到路径的原因。
我正在访问的文件是target/maven-archiver/pom.properties
。我可以在资源管理器中看到它(项目名称被涂黑):
我尝试通过
打开文件version.properties
我得到的例外是
private static final String PATH = "target/[projectname]/WEB_INF/classes/version.properties";
public static String getVersion() {
String version;
Properties prop = new Properties();
File resource = new File(PATH);
try {
prop.load(new FileInputStream(resource));
version = prop.getProperty("build.time");
} catch (IOException e) {
e.printStackTrace();
version = "01.01.2016 00:00";
}
return version;
}
答案 0 :(得分:1)
你这样做完全错了。
version.properties
是位于src/main/resources
内的应用程序的资源。当您拥有最终WAR时,此文件将位于应用程序的类路径中。这是因为Maven会将此资源放在WAR的文件夹WEB-INF/classes
中。您不能使用路径target/...
或src/main/...
访问此文件。这是Eclipse / Maven的考虑因素。一旦你获得了最终的WAR,target
就不再存在了。
其次,您无法将资源作为File
对象进行访问。您必须获得InputStream
资源。
结合所有这些,你应该:
prop.load(VersionUtils.class.getResourceAsStream("/version.properties"));
赋予getResourceAsStream
的路径是相对于当前类的位置的路径,或者是类路径的绝对路径。在这种情况下,资源位于类路径的根部,因此我们只使用"/version.properties"
。