Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JSF应用程序中放置资源文件的最佳位置_Jsf_Maven_Jsf 2 - Fatal编程技术网

在JSF应用程序中放置资源文件的最佳位置

在JSF应用程序中放置资源文件的最佳位置,jsf,maven,jsf-2,Jsf,Maven,Jsf 2,在常规java应用程序中,如果我有一个静态资源文件,我习惯于使用类加载器来获取它。然而,我发现这是JSF web应用程序中的一个问题 首先,maven不会将资源文件从src复制到target,然后将其打包到war文件中,除非您在pom.xml中特别添加了资源标记。这是一种痛苦,但更糟糕的是,标记似乎阻止了生成源阶段在JPA元模型中复制—破坏了包 因此,这样的资源文件似乎应该放在其他地方,比如WEB-INF下的某个地方。有人能告诉我这方面的常见做法吗?我是否仍然使用类加载器的getResource

在常规java应用程序中,如果我有一个静态资源文件,我习惯于使用类加载器来获取它。然而,我发现这是JSF web应用程序中的一个问题

首先,maven不会将资源文件从src复制到target,然后将其打包到war文件中,除非您在pom.xml中特别添加了资源标记。这是一种痛苦,但更糟糕的是,标记似乎阻止了生成源阶段在JPA元模型中复制—破坏了包

因此,这样的资源文件似乎应该放在其他地方,比如WEB-INF下的某个地方。有人能告诉我这方面的常见做法吗?我是否仍然使用类加载器的getResourceAsStream方法或其他方法

更新一些澄清:

我在pom.xml文件中使用的是:

这很管用——我从words.txt获取数据,就像我是java桌面应用程序一样。问题在于,当我将其放在pom.xml中时,下次执行清理和构建操作时,JPA元模型将被删除而不再创建,从而导致编译时错误

有趣的是,Netbeans 7.0 IDE确实以某种方式生成了元模型。但它不存储在目标目录中,而是存放在~/.netbeans下的缓存目录中

更新2另一个问题:

我注意到有一种方法:

FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream(String ..);

这是我应该用的吗?然而,我不想将资源文件暴露于外界——我宁愿将其隐藏在WEB-INF中。

为了解决这个问题,我将公布我是如何解决这个问题的。基本上这是可行的:

    FacesContext fc = FacesContext.getCurrentInstance();
    InputStream ris = fc.getExternalContext().getResourceAsStream("/resources/misc/words.txt");

我选择将words.txt文件放在/resources目录中,但我可以将其移动到/WEB-INF中的某个位置。由于Maven插件将资源目录复制到目标目录,因此没有任何新的配置。

请重新编写并直接提问好吗?我不知道你在读了两遍你的问题后说了什么。关于更新2:你可以自己把它放在/WEB-INF中,并在ExternalContextgetResourceAsStream路径中引用它。然而,我更喜欢将它放在类路径中,从而解决Maven问题。我也更喜欢这样。Maven对我来说是相当不透明的,我希望我能在上面找到合适的文档。
FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream(String ..);
    FacesContext fc = FacesContext.getCurrentInstance();
    InputStream ris = fc.getExternalContext().getResourceAsStream("/resources/misc/words.txt");