2012-07-02 39 views
0

关于此问题有很好的SO question and answers,但这些选项对我无效。将Maven settings.xml文件中的属性应用到应用程序上下文

我想通过变量的应用程序上下文:

<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重复这些步骤,但没有帮助。有人可以提供一个工作代码片段或告诉我我在这里错过了什么?提前致谢。

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

+0

你的applicationContext.xml究竟在'src/main/resources'还是'src/main/java'下? – yorkw

+0

@yorkw在src/main/resources下。没关系? –

回答

1

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

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

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

+0

感谢您的回答,它没有帮助,但让我重新检查一切。 Maven的属性插件工作正常,我认为你应该写这个,我会标记这个答案。顺便说一下,问题出现在配置文件中,但在其他地方。此外,您可能对资源:资源错误,因为它是流程资源阶段的目标:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html –

+0

正确的资源:资源“是与流程资源阶段相关的目标。运行'mvn resources:resources'和'mvn process-resources'有很大的区别。第一个命令执行“资源:资源”目标,没有别的;如果有目标绑定到其他阶段并不重要,他们将不会运行。第二个命令执行任何目标,直到包括'流程资源'阶段。差别很微妙但非常重要。尝试用'-X'运行这两个命令并查看执行计划,您将看到我正在描述的内容。 – user944849

+0

现在我明白了,谢谢。 –