2011-09-16 53 views
16

我正在寻找一种方法来查找主机名并将其设置为Maven中的一个属性。从Maven查找主机名

这并不是在所有环境下工作:

... 
<properties> 
    <hostname>${env.HOSTNAME}</hostname> 
</properties> 
... 

有什么建议?

+0

您是否需要在实际构建中或仅在CI环境中使用? – khmarbaise

+0

我想过滤测试属性文件,用$ {hostname}替换它运行的主机名。这对本地构建和CI环境很有用。对于“真正的”构建,属性文件中的主机名是硬编码的。这是为了确保属性文件适用于正确的环境。 – steinim

+0

为什么不为每个需要创建构建环境的环境创建工件?这是什么:http://blog.soebes.de/index.php?/archives/340-Maven-Configuration-For-Multipe-Environments.html – khmarbaise

回答

25

使用Groovy脚本设置项目属性

<plugin> 
     <groupId>org.codehaus.groovy.maven</groupId> 
     <artifactId>gmaven-plugin</artifactId> 
     <executions> 
      <execution> 
       <phase>generate-resources</phase> 
       <goals> 
        <goal>execute</goal> 
       </goals> 
       <configuration> 
        <source> 
        project.properties["hostname"] = InetAddress.getLocalHost().getHostName() 
       </source> 
      </configuration> 
     </execution> 
     </executions> 
</plugin> 
+0

伟大的解决方案!谢谢:) – steinim

+2

很难相信Maven不能以任何其他方式暴露此信息。不错,但是。你知道通常以这种方式设置的其他属性吗? – cwash

+1

@cwash黑客?同意。这是Maven作为系统或环境属性不可用的信息项所必需的。请参阅:http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-properties.html –

2

我结束了一个简单的解决方案,以跨plattform问题:

<manifestEntries> 
    <Build-Host-Linux>${env.HOSTNAME}</Build-Host-Linux> 
    <Build-Host-Windows>${env.COMPUTERNAME}</Build-Host-Windows> 
</manifestEntries> 
+8

窗口尼克斯 UNIX $ {ENV。HOSTNAME} 窗口 的Windows $ {} env.COMPUTERNAME $ {} env.HOSTNAME user1885834

+0

听起来不错。但HOSTNAME未在RHEL7上为我定义。 – Christian

+0

这很奇怪。 RHEL6可以。你确定你有env.HOSTNAME而不只是HOSTNAME吗? – AxelW

0

user1885834发表的评论对我来说最合适:为Windows和Linux创建配置文件并使用各自的环境变量来定义新的属性$ {hostname} sed在任何地方。

<profile> 
    <id>unix</id> 
    <activation> 
     <os> 
     <family>unix</family> 
     </os> 
    </activation> 
    <properties> 
     <hostname>${env.HOSTNAME}</hostname> 
    </properties> 
</profile> 
<profile> 
    <id>windows</id> 
    <activation> 
     <os> 
     <family>Windows</family> 
     </os> 
    </activation> 
    <properties> 
     <hostname>${env.COMPUTERNAME}</hostname> 
    </properties> 
</profile> 
+0

只有HOSTNAME没有在RedHat上定义:( – Christian