【问题标题】:Taking properties from Maven settings.xml file to application context从 Maven settings.xml 文件中获取属性到应用程序上下文
【发布时间】:2012-07-02 16:11:59
【问题描述】:

关于这个问题有很好的 SO question and answers,但这些选项对我不起作用。

我想将变量传递给应用上下文:

<bean class="blah.blah.Blah" id="blah">
    <property name="first" value="${first.property}"/>
    <property name="second" value="${second.property}"/>
</bean>

我在 Maven 的 settings.xml 文件中有以下内容:

<profiles>
    <profile>
      <id>profileId</id>
      <activation>
          <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
          <first.property>first value</first.property>
          <second.property>second value</second.property>
      </properties>

我试过this option(这有点奇怪),但没有结果。比我添加了这个插件:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-2</version>
    <executions>
      <execution>
        <phase>process-resources</phase>
        <goals>
          <goal>write-project-properties</goal>
        </goals>
        <configuration>
          <outputFile>
            src/main/resources/maven.properties
          </outputFile>
        </configuration>
      </execution>
    </executions>
</plugin> 

之后项目中没有任何maven.properties 文件。如果我创建了空文件,则其中没有任何内容。我试图用-PprofileId 重复这些步骤,但没有帮助。有人可以提供一个工作代码 sn-p 或告诉我我在这里想念什么吗?提前致谢。

更新:我错了,properties-maven-plugin 工作正常。

【问题讨论】:

  • src/main/resourcessrc/main/java 下的 applicationContext.xml 到底在哪里?
  • @yorkw 在 src/main/resources 下。没事吧?

标签: maven properties settings


【解决方案1】:

我不清楚您的问题 - 但是如果您尝试运行 mvn -PprofileId resources:resources 属性插件将不会运行,因为该命令正在执行单个目标,而不是 Maven 生命周期阶段。如果你运行 mvn -PprofileId process-resources 会发生什么?

另一个问题,是否还有其他配置文件处于活动状态? activeByDefault 并不意味着“始终处于活动状态”。每 Maven docs “当 POM 中的配置文件在命令行上或通过其激活配置激活时,默认情况下处于活动状态的所有配置文件都会自动停用。”因此,如果您有另一个配置文件处于活动状态,带有profileId 的配置文件将不会被激活。

尝试从该配置文件中删除激活块并运行mvn -PprofileId process-resources

【讨论】:

  • 感谢您的回答,它没有帮助,但让我重新检查了所有内容。 Maven 属性插件工作正常,我认为你应该写一下,我会标记这个答案。顺便说一句,问题出在配置文件中,但在其他地方。此外,您可能对资源:资源有误,因为它是流程资源阶段的目标:maven.apache.org/guides/introduction/…
  • 正确,resources:resources 是绑定到流程资源阶段的目标。运行mvn resources:resourcesmvn process-resources 之间存在巨大差异。第一个命令执行resources:resources 目标,仅此而已;不管是否有绑定到其他阶段的目标,它们都不会运行。第二个命令执行绑定到阶段(包括process-resources 阶段)的任何目标。差异是微妙的,但非常重要。尝试使用-X 运行这两个命令并查看执行计划,您会看到我在描述什么。
猜你喜欢
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 2013-05-07
  • 2015-07-07
  • 2011-10-31
  • 2011-10-31
相关资源
最近更新 更多