【问题标题】:jenkins. passing vm options for job (using placeholder)詹金斯传递作业的 vm 选项(使用占位符)
【发布时间】:2025-12-01 11:35:01
【问题描述】:

大家好

我使用 SpringPlaceholderConfig。 在 config.properties 文件中,我有 dbSchemaName = ${schema}

之类的占位符

并且在 context.xml <property name="url" value="jdbc:mysql://url:port/${dbSchemaName}"/>

如果我通过 Idea 在本地 tomcat 服务器中传递 VM 选项,一切正常

Idea Tomcat config

但是在 Jenkins + Tomcat 上运行应用程序会导致这样的异常

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'schema' in string value "${schema}"

这是作业配置(VM 选项)

Jenkins job config

我想为不同的工作传递不同的参数值。所以我需要将这些值保存在每个作业的范围内。我知道这可能,但我不知道如何?如何在不使用全局 Jenkins 配置和 catalina.sh 等的情况下实现它...

谢谢

【问题讨论】:

  • 是的,Jenkins+Tomcat+Maven。正如您在附件中看到的(使用 Jenkins 配置),我尝试在 Maven 构建部分中传递 VM 选项

标签: java tomcat spring-mvc configuration jenkins


【解决方案1】:

SpringPlaceholderConfig 的问题在于它在运行时评估内容。您在 Jenkins 中设置的变量仅在 Maven 构建期间存在。

你应该做的是启用资源过滤:

  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>

它将处理上述目录中的所有文件并查找占位符。然后它将用实际值替换文件中的所有占位符。所以在你的实际构建文件中不会有占位符,而是实际值。这样,当您指定 -Dschema=spd 时,maven 会将配置文件中的 ${schema} 占位符替换为 spd,并且生成的配置文件将在输出 jar/war 文件中。这基本上允许在构建时指定您的环境,并且构建将与环境相关联。

更多阅读:http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

【讨论】:

  • @Alexandr 我的荣幸!
最近更新 更多