我有maven构建pom.xml配置
<profile>
<id>local</id>
<properties>
<env>local</env>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
并按照以下说明构建选项
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/resources-${env}</directory>
</resource>
</resources>
是否可以将env值带到任何控制器上? 我想放入env值并执行分支操作
答案 0 :(得分:0)
您问题的简短答案可能是“否”,但是 我将在此处尝试提供总体答案,以澄清两件事
您应该区分纯粹是构建工具的maven和应用程序运行时。
通常情况如下:
构建阶段
您调用maven来构建工件。它可以是WAR,JAR,EAR文件或其他任何文件。 作为构建工具,maven负责编译源代码,如果有要运行的测试,则对源代码进行测试,将编译后的类打包(因此是jar / war / etc。工件),就是这样。
运行阶段
然后,您在服务器上运行应用程序。从这里开始spring / jsp的责任,但简而言之,这个阶段是运行时阶段,到发生时,您甚至都不知道该应用程序是由maven构建和打包的,已经没有关系了。您有工件-运行它
现在很清楚,定义一些属性的maven概要文件在构建期间是“相关的”,并且不会传播到运行时,因为在一般情况下它们不存在。
现在,您可以从maven本地触发应用程序的启动(如果使用,则类似mvn java:exec
之类的东西),在这种情况下,您可以摆弄命令行参数,但这同样仅用于本地开发目的,与应用程序寿命无关。
从技术上讲,如果您绝对需要它,可以找到一种方法:
您还可以创建一种更复杂的构建方式,该方式将在maven(某种Maven插件)中读取这些属性,并生成具有这些属性及其值的源文件,并且如果这发生在打包之前(再次通过maven),该文件将与其余代码一起“烘焙到您的工件中”。这样它就可以在运行时访问,因为spring可以读取该属性文件。
您应该问自己的真正问题是正确的做法吗?通常,这里的答案是“否”:)