Java 需要了解资源位置中的类路径和变量值集

Java 需要了解资源位置中的类路径和变量值集,java,maven,web-applications,classpath,Java,Maven,Web Applications,Classpath,虽然我已经在java中工作了一段时间,但有许多小事情我一直忽略,这有时已经成为生产力的瓶颈。我很难理解这一点: 这是最后一个.war文件中的bean.xml文件之一(在使用spring框架构建的web应用程序中) 我在调试模式下运行了mvn,并且可以将该集设置为本地。现在,问题是,在生成的.war中,它仍然是${deploy.env}(参见上面的代码片段)。这不是在决赛中被取代了吗?战争?如果没有,那么我们如何传递要设置的值 2) “classpath://${deploy.env}/com.e

虽然我已经在java中工作了一段时间,但有许多小事情我一直忽略,这有时已经成为生产力的瓶颈。我很难理解这一点:

这是最后一个.war文件中的bean.xml文件之一(在使用spring框架构建的web应用程序中)

我在调试模式下运行了mvn,并且可以将该集设置为本地。现在,问题是,在生成的.war中,它仍然是${deploy.env}(参见上面的代码片段)。这不是在决赛中被取代了吗?战争?如果没有,那么我们如何传递要设置的值

2)
“classpath://${deploy.env}/com.example.config/db.properties”是什么意思?谁设置类路径的值?类路径是否也能够提供资源文件的位置

假设deploy.set-->local,则会转换为:

classpath:"/local/com.example.config/db.properties"
那么这是否意味着db.properties将出现在:
/local/com.example.config/db.properties


理解这一点的任何输入都会有很大帮助。

正如Oracle网站中所述:
CLASSPATH
变量是告诉应用程序(包括JDK工具)在何处查找用户类的一种方法

classpath:
特别指的是那个位置,不管它是什么,所以它将从那个位置开始查找Spring定义的资源,直到找到第一个匹配项为止

此外,如果您在Maven中将其作为属性,则可以使用正确的插件和配置替换该值;当您想要一个可以与不同环境的
.properties
文件中的许多值一起使用的生成时,这不是很有用


您可以使用其他前缀,如
file:
http:
,等等。但是您只是想知道
classpath:

正如Oracle网站中所述:
classpath
变量是告诉应用程序(包括JDK工具)在哪里查找用户类的一种方法

classpath:
特别指的是那个位置,不管它是什么,所以它将从那个位置开始查找Spring定义的资源,直到找到第一个匹配项为止

此外,如果您在Maven中将其作为属性,则可以使用正确的插件和配置替换该值;当您想要一个可以与不同环境的
.properties
文件中的许多值一起使用的生成时,这不是很有用


您可以使用其他前缀,如
file:
http:
,等等。但是您只是想知道
类路径:
部署。env
是JVM在运行时可用的环境变量或系统属性

当war在容器中运行时,将在运行时解析
类路径:/${deploy.env}/com.example.config/db.properties

Set
deploy.env=启动tomcat的shell中的任意内容,或在启动tomcat的用户的环境中设置

mvn clean install-Ddeploy.env=local
这里的deploy.env系统属性在构建时可用。这不会替换spring配置的值

classpath
是您在war中绑定的所有类和库与tomcat库一起提供的地方。spring属性配置程序将在类路径中的位置(例如
/local/com.example.config


部署。env
是JVM在运行时可用的环境变量或系统属性

当war在容器中运行时,将在运行时解析
类路径:/${deploy.env}/com.example.config/db.properties

Set
deploy.env=启动tomcat的shell中的任意内容,或在启动tomcat的用户的环境中设置

mvn clean install-Ddeploy.env=local
这里的deploy.env系统属性在构建时可用。这不会替换spring配置的值

classpath
是您在war中绑定的所有类和库与tomcat库一起提供的地方。spring属性配置程序将在类路径中的位置(例如
/local/com.example.config


我将用“Maven”替换您的标记,谢谢您的宝贵建议,完成。我将用“Maven”替换您的标记,谢谢您的宝贵建议,完成。我已在tomcat中部署了此应用程序。那么这需要tomcat提供吗?是的,但是您需要传递值,请参阅更新的回答。那么它会在“绝对”路径或附加到类路径的路径中查找文件吗?这是路径-->/local/com.example.config/还是相对于类路径的路径?我认为您的路径是错误的。如果您在war中显示db.properties的路径,那么我可以提供帮助。在我的war中,如果db.properties在
classes\com\example\config
文件夹中,那么它应该是
classpath:com\example\config\db.properties
。您希望通过
deploy.env
实现什么?非常感谢您的宝贵意见。我在问classpath://${deploy.env}/com.example.config/db.properties是否意味着查找与classpath中的路径相关的db.properties?例如,如果类路径有值:/opt和/home,那么这些位置将是尝试查找文件的位置:/opt/${deploy.env}/com.example.config/db.properties和/home/${deploy.env}/com.example.config/db.properties?我已经在tomcat中部署了这个应用程序。那么这需要tomcat提供吗?是的,但是您需要传递值,请参阅更新的回答。那么它会在“绝对”路径或附加到类路径的路径中查找文件吗?这是路径-->/local/com.example.conf
mvn clean install -Ddeploy.env=local
classpath:"/local/com.example.config/db.properties"