2011-09-16 17 views
16

Szukam sposobu na wyszukanie nazwy hosta i ustawienie jej jako własności w Maven.Wyszukaj nazwę hosta z Maven

To nie działa we wszystkich środowiskach:

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

sugestie?

+0

Potrzebujesz tego w prawdziwej kompilacji lub tylko w środowisku CI? – khmarbaise

+0

Chcę odfiltrować pliki właściwości testowych, zastępując $ {hostname} nazwą hosta, w którym jest uruchomiona. Jest to przydatne w przypadku lokalnych kompilacji i środowisk CI. W przypadku "prawdziwych" kompilacji nazwa hosta w pliku właściwości jest zakodowana na sztywno. Ma to na celu sprawdzenie, czy plik właściwości jest odpowiedni dla właściwego środowiska. – steinim

+0

Dlaczego nie tworzyć artefaktów dla każdego środowiska, którego potrzebujesz, zamiast tworzyć środowisko kompilacji? A co z tego: http://blog.soebes.de/index.php?/archives/340-Maven-Configuration-For-Multipe-Environments.html – khmarbaise

Odpowiedz

25

Użyj groovy skrypt ustawić właściwość projektu

<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

Świetne rozwiązanie! Dzięki :) – steinim

+2

Trudno uwierzyć, że Maven nie może ujawnić tych informacji w jakikolwiek inny sposób. Ale fajny hack. Czy znasz inne właściwości, które zazwyczaj są ustawione w ten sposób? – cwash

+1

@cwash Hack? Zgoda. Jest to wymagane w przypadku informacji niedostępnych dla Maven jako własności systemu lub środowiska. Zobacz: http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-properties.html –

4

$ {env.COMPUTERNAME} pracuje dla mnie ..

+0

Choć myślę, że to jest windows specyficzne – rudolfson

2

skończyło się za pomocą prostego rozwiązania problemu cross-PLATTFORM:

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

nix UNIX $ {ENV.HOSTNAME} okna Okna $ {env.COMPUTERNAME} $ {env.HOSTNAME} user1885834

+0

Brzmi nieźle. Ale HOSTNAME nie jest dla mnie zdefiniowany na RHEL7. – Christian

+0

To dziwne. RHEL6 jest w porządku z tym. Czy jesteś pewien, że masz env.HOSTNAME, a nie tylko HOSTNAME? – AxelW

0

komentarz wysłane przez user1885834 działa najlepiej dla mnie: Tworzenie profili dla systemu Windows i Linux i użyć odpowiednich zmiennych środowiskowych, aby zdefiniować nową właściwość $ {hostname}, aby być u sed wszędzie.

<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

tylko, że HOSTNAME nie jest zdefiniowany na RedHat :( – Christian