2012-03-14 45 views
5

我在Java中有一个maven配置文件并要设置一个属性也就是后来的每System.getProperty可用(..):在maven 2编译期间设置java系统属性?

<profile> 
    <id>local-dev</id> 
    <properties> 
    <my.comp.my.prop>myValue</my.comp.my.prop> 
    </properties> 
</profile> 

我想System.getProperty("my.comp.my.prop")"myValue"但它null .. 怎么办我设置正确? :)

Thansk!

+0

你真的是“编”?或者也许单元测试? – bmargulies 2012-03-14 17:54:06

+0

“以后可用”是什么意思?您可以设置系统属性,例如,在执行应用程序时使用'-Dmy.comp.mu.prop = foo'。 – 2012-03-14 17:55:00

+0

在我的服务器端代码中的某处我想读取属性以在不同的编译配置文件中编译时执行不同的操作。 – Stuck 2012-03-14 17:56:33

回答

1

maven无法设置应用程序可以在运行时从环境访问的属性。

相反,您可以使用maven在构建时更新代码库中的属性文件,然后可以在运行时通过应用程序读取它。可以根据配置文件设置属性的不同值,从而允许您的应用程序根据需要具有不同的值。

或者,您可以调用应用程序手动(maven外部)在环境中设置所需的属性。

+0

谢谢!有没有一个标准的程序如何建立和阅读这样的属性文件? – Stuck 2012-03-15 10:45:49

+0

仅供其他读者使用,可以使用Maven Resources Plugin的过滤功能完成:http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html – 2012-03-15 17:12:14

10

properties-maven-plugin插件会帮你做的正是你要寻找的:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>properties-maven-plugin</artifactId> 
    <version>1.0-alpha-2</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>set-system-properties</goal> 
      </goals> 
      <configuration> 
       <properties> 
        <property> 
         <name>my.property.name</name> 
         <value>my.property.value</value> 
        </property> 
       </properties> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

这给了我:无法识别的标记:'executions ' – Matt 2013-07-25 18:50:18

+1

如果我理解正确,这会为maven生命周期设置属性,让它们在运行时不可用于java。我已经尝试过它不会成功。我不正确吗? – 2014-11-14 18:08:09

+0

@ yegor256如果你仍然在那里:我想约翰B说的是合理的。这里的属性用于maven生命周期。 我为你的答案提出了-1,我觉得在Q. 的背景下是不正确的,如果你能澄清约翰的评论,我会赞扬它。 – dirai 2017-12-20 18:56:13

相关问题