2011-09-16 15 views
16

Sto cercando un modo per cercare il nome host e impostarlo come proprietà in Maven.Ricerca nome host da Maven

Questo non funziona in tutti gli ambienti:

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

Qualche suggerimento?

+0

Ti serve in una build reale o solo all'interno di un ambiente CI? – khmarbaise

+0

Voglio filtrare i file delle proprietà di test sostituendo $ {hostname} con il nome host in cui è eseguito. Questo è utile per le build locali e per gli ambienti CI. Per le build "reali", il nome host nel file delle proprietà è hardcoded. Questo per assicurarsi che il file delle proprietà sia per l'ambiente corretto. – steinim

+0

Perché non creare artefatti per ogni ambiente di cui si ha bisogno invece di far dipendere un ambiente di costruzione? Che dire di questo: http://blog.soebes.de/index.php?/archives/340-Maven-Configuration-For-Multipe-Environments.html – khmarbaise

risposta

25

Utilizzare uno script Groovy per impostare la proprietà del progetto

<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

Ottima soluzione! Grazie :) – steinim

+2

Difficile da credere Maven non può esporre queste informazioni in nessun altro modo. Bel trucco, però. Conoscete altre proprietà tipicamente impostate in questo modo? – cwash

+1

@cwash Hack? concordato. È richiesto per le informazioni non disponibili a Maven come proprietà di sistema o ambiente. Vedi: http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-properties.html –

4

$ {} env.COMPUTERNAME funziona per me ..

+0

anche se credo che questo è finestre specifiche – rudolfson

2

ho finito con una semplice soluzione al problema di cross-plattform:

+8

nix unix $ {env.HOSTNAME} finestre di Windows $ {} env.COMPUTERNAME $ {} env.HOSTNAME user1885834

+0

Suona bene. Ma HOSTNAME non è definito su RHEL7 per me. – Christian

+0

È strano. RHEL6 va bene con questo. Sei sicuro di avere env.HOSTNAME e non solo HOSTNAME? – AxelW

0

Il commento pubblicato dall'utente1885834 funzionava meglio per me: creare profili per Windows e Linux e utilizzare le rispettive variabili di ambiente per definire una nuova proprietà $ {nomehost}, per essere u sed ovunque.

<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

solo che HOSTNAME non è definito su RedHat :( – Christian