Java web应用程序中在类路径上包含资源的最常见标准是什么?

Java web应用程序中在类路径上包含资源的最常见标准是什么?,java,resources,classpath,Java,Resources,Classpath,我正在使用Spring的国际化,属性文件需要位于类路径上。我还有一些XML文件需要放在类路径上。只是将这些资源包含在子目录中的“src”中,然后让它们构建到类路径中,这是可以接受的吗?还是在启动期间向类路径添加不同的文件夹更好?我使用的是Ant,但从外观上看,这是Maven采用的方法(一切都在src或test下)。我正在寻找最广泛接受的行业标准或更好的替代方案。谢谢 您在WEB-INF/classes目录中放置的任何内容都会自动位于CLASSPATH中 我通常只将.java文件放在/src和/t

我正在使用Spring的国际化,属性文件需要位于类路径上。我还有一些XML文件需要放在类路径上。只是将这些资源包含在子目录中的“src”中,然后让它们构建到类路径中,这是可以接受的吗?还是在启动期间向类路径添加不同的文件夹更好?我使用的是Ant,但从外观上看,这是Maven采用的方法(一切都在src或test下)。我正在寻找最广泛接受的行业标准或更好的替代方案。谢谢

您在WEB-INF/classes目录中放置的任何内容都会自动位于CLASSPATH中

我通常只将.java文件放在
/src
/test
目录下。我放在别处的任何资源最终都必须放在WEB-INF/类中。创建WAR文件时,是我的IDE(IntelliJ)或Ant将它们放在那里的

我建议遵循Spring示例,并将资源放在它们所做的地方

例如,如果您使用Velocity作为模板引擎,您将看到Spring配置允许您将它们放在/WEB-INF/vm_视图下

属性放在WEB-INF/类中


查看Spring文档中的示例。

您在WEB-INF/classes目录中放置的任何内容都会自动位于类路径中

我通常只将.java文件放在
/src
/test
目录下。我放在别处的任何资源最终都必须放在WEB-INF/类中。创建WAR文件时,是我的IDE(IntelliJ)或Ant将它们放在那里的

我建议遵循Spring示例,并将资源放在它们所做的地方

例如,如果您使用Velocity作为模板引擎,您将看到Spring配置允许您将它们放在/WEB-INF/vm_视图下

属性放在WEB-INF/类中

查看Spring文档中的示例

只将这些资源包含在子目录中的“src”中,然后让它们构建到类路径,这可以接受吗

取决于所涉资源的唯一用途。使用这种方法,在这样的资源文件中进行任何小的编辑都需要完全重建、重新部署和重新启动

这不一定会对一次性读取启动和应用程序范围的配置文件(如
web.xml
application.xml
和consorts)造成损害,因为这通常会影响(或受到)Java源代码中的更改,而这些更改无论如何都需要完全重建/重新部署/etc

但对于运行时文件,如i18n属性文件和特定于环境的配置文件(将/可能由非开发人员(如serveradmin或客户)管理),将其打包到webapplication中是没有用的。这需要了解如何在编辑后重建webapp。您更希望将其外部化,以便只需重新启动webapp即可反映配置中的更改,或者甚至可能根本不需要,比如对于
ResourceBundle
,它将自动重新加载

我自己通常将这些文件放在servletcontainer的固定路径中,并将该路径添加到servletcontainer的运行时类路径中。例如,对于Tomcat,它可以配置为
/conf/catalina.properties
中的
shared.loader
属性。例如

shared.loader=/var/webapp
然后,此文件夹中的任何内容都会被放入servletcontainer(和webapp)的运行时类路径中

只将这些资源包含在子目录中的“src”中,然后让它们构建到类路径,这可以接受吗

取决于所涉资源的唯一用途。使用这种方法,在这样的资源文件中进行任何小的编辑都需要完全重建、重新部署和重新启动

这不一定会对一次性读取启动和应用程序范围的配置文件(如
web.xml
application.xml
和consorts)造成损害,因为这通常会影响(或受到)Java源代码中的更改,而这些更改无论如何都需要完全重建/重新部署/etc

但对于运行时文件,如i18n属性文件和特定于环境的配置文件(将/可能由非开发人员(如serveradmin或客户)管理),将其打包到webapplication中是没有用的。这需要了解如何在编辑后重建webapp。您更希望将其外部化,以便只需重新启动webapp即可反映配置中的更改,或者甚至可能根本不需要,比如对于
ResourceBundle
,它将自动重新加载

我自己通常将这些文件放在servletcontainer的固定路径中,并将该路径添加到servletcontainer的运行时类路径中。例如,对于Tomcat,它可以配置为
/conf/catalina.properties
中的
shared.loader
属性。例如

shared.loader=/var/webapp

然后,此文件夹中的任何内容都会被保存在servletcontainer(和webapp)的运行时类路径中。

对于开源应用程序(我的当前不是),这不是假设每个人都会使用相同的servlet容器吗?我不明白这个问题的重点。这个问题背后的理由是什么?我的意思并不是说只有在Tomcat上才可能,我只是说大多数人更喜欢通过简单地将WAR放入工作目录来启动和运行应用程序,就像Tomcat一样,让它解包并运行。这就是为什么我在问题中问,在运行时配置额外的类路径是否合适。在这种情况下,您必须告诉运行您的应用程序的每个人必须配置此新路径。在开源应用程序的情况下(我的当前不是),这不是假设每个人都将使用相同的servlet容器吗?我不明白这个问题的重点