Java Openshift此.getClass().getResource()路径可能不正确

Java Openshift此.getClass().getResource()路径可能不正确,java,jboss7.x,openshift,Java,Jboss7.x,Openshift,我试图将我的应用程序部署到openshift,但在运行时遇到了问题。 该应用程序在本地部署到与JBoss完全相同的版本(JBoss作为7.1.1 Final),并且可以工作,但部署到openshift时不工作。我没有使用任何缩放 问题在于代码示例: String s= SimpleClass.class.getResource("/myproperties.properties").getPath(); prop.load(new FileInputStream(s)); 在本地部署到

我试图将我的应用程序部署到openshift,但在运行时遇到了问题。 该应用程序在本地部署到与JBoss完全相同的版本(JBoss作为7.1.1 Final),并且可以工作,但部署到openshift时不工作。我没有使用任何缩放

问题在于代码示例:

  String s= SimpleClass.class.getResource("/myproperties.properties").getPath();
  prop.load(new FileInputStream(s));
在本地部署到JBoss AS时,它的工作方式与预期的一样。但是,当我将其部署到openshift实例时,会出现异常:

java.io.FileNotFoundException: /content/Mailinglist.war/WEB-INF/classes/myproperties.properties (No such file or directory)
java.io.FileInputStream.open(Native Method)
java.io.FileInputStream.<init>(FileInputStream.java:146)
java.io.FileInputStream.<init>(FileInputStream.java:101)
mailinglistonline.server.export.util.PropertiesParser.parseDatabaseConfigurationFile(PropertiesParser.java:15)
java.io.FileNotFoundException:/content/Mailinglist.war/WEB-INF/classes/myproperties.properties(没有这样的文件或目录)
java.io.FileInputStream.open(本机方法)
java.io.FileInputStream。(FileInputStream.java:146)
java.io.FileInputStream。(FileInputStream.java:101)
mailinglistonline.server.export.util.PropertiesParser.parseDatabaseConfigurationFile(PropertiesParser.java:15)
编辑:


Mailinglist.war/WEB-INF/classes/myproperties.properties
后缀是正确的,与我在本地的后缀相同,但是
/content
前缀非常奇怪,因为openshift中可能不存在/content目录。此路径可能会指向部署该.war的JBoss实例。问题主要是为什么会生成这样的路径/前缀,以及我是否能够以某种方式使其工作。

您应该使用
Class.getResource()
而不是使用
Class.getResourceAsStream()
并以这种方式加载属性。使用资源路径只有在您部署WAR时才有效。我不相信OpenShift上的部署会爆炸

像下面这样的方法是更好的处理方法

Properties=newproperties();
load(SimpleClass.class.getResourceAsStream(“/myproperties.properties”);

您是否验证路径-
/content/Mailinglist.war/WEB-INF/classes/myproperties.properties
是否确实存在?我怀疑它是否存在。(cd/content=>不存在这样的文件或目录)
Mailinglist.war/WEB-INF/classes/myproperties.properties
后缀是正确的,与我在本地的后缀相同,但是
/content
前缀非常奇怪。问题主要是为什么会生成这样的路径/前缀,以及我是否能够以某种方式使其工作。我将向提问者提供这些信息,但我不确定为什么这样做不起作用。但是您可以尝试
prop.load(SimpleClass.class.getResourceAsStream(“/myproperties.properties”))
,或者
prop.load(SimpleClass.class.getClassLoader().getResourceAsStream(“myproperties.properties”))
。实际上,这一个很有效,非常感谢。知道为什么会发生这种情况吗?我建议的方法是用于读取类路径中的资源。您在文章中的解决方案是从实际的文件系统中读取文件。很可能在本地jboss上,归档文件(Mailinglist.war)被分解成一个目录并部署,因此您最终得到了一个有效的文件系统路径。在openshift上,存档必须按原样部署。当您尝试获取路径时,实际上是在尝试获取另一个文件(即Mailinglist.war)中的文件路径,这在谈论文件系统路径时本质上是不正确的,因此最终结果是路径不正确。