2012-03-05 23 views
5

Używam ant do kompilacji aplikacji Java. Problem polega na tym, że niektórzy twórcy są na wygranej 7, a inni na XP i Vista. Częścią kompilacji jest zbudowanie msi przy użyciu WIX, na win7 jest to jeden katalog, a na XP i Vista jest w innym.Jak wykryć system operacyjny Windows w ANT

Zadanie mrówki jest kontrolowane w Maven. Mam zamiar odróżnić system Windows od mrówki od warunkowego znacznika, aby ustawić katalog wix. Jakieś pomysły?

wiem, to będzie w tym formacie:

<if> 
    <condition property="isWin7"> 
    Check for windows 7 
    </condition> 
    <then> 
    set wix path to win 7 installation 
    </then> 
    <else> 
    set to vista/xp wix installation 
    </else> 
</if> 

Każda pomoc będzie wielki.

+0

możliwy duplikat [Używanie mrówki do wykrywania właściwości os i zestawu] (http://stackoverflow.com/questions/453170/using-ant-to-detect-os-and-set-property) – oers

+0

Byłbym już sprawdziłem, ale co chcę zrobić, to sprawdzenie, czy jest to xp, vista lub win7, druga opcja pozwoli ci tylko dowiedzieć się, czy ma okna. – Nathan

+0

@Nathan - czy miałeś szczęście używając mojej odpowiedzi? Oznacz Pls jako zaakceptowany lub wyślij mi komentarz, abym mógł pomóc więcej.Ta technika jest używana w naszym systemie budowania produkcji, ale może nie rozwiązać problemu * Twojego *. –

Odpowiedz

12

Wygląda ANT <condition> można przetestować na imię, rodzina & wersję systemu operacyjnego:

podstawie tego linku, istnieją pewne właściwości dotyczące systemu operacyjnego, że możemy pytanie. Jednym z nich jest normalne family nieruchomość stosowany we wspólnym kodzie:

<!-- CHECK FOR WINDOWS FAMILY OS --> 
<condition property="is_windows"> 
    <os family="windows"/> 
</condition> 

Moja wersja ANT nie wydrukować rozwiązany wartość ${os.family}.


Istnieje również:

  • os.name < --- to jest jeden trzeba sprawdzić
  • os.arch
  • os.version

Oto skrypt demo zrobiłem pokazać wykorzystanie tych właściwości:

<?xml version="1.0" encoding="UTF-8"?> 
<project name="Test" default="build" > 

    <!-- CHECK FOR WINDOWS FAMILY OS --> 
    <condition property="is_windows"> 
     <os family="windows"/> 
    </condition> 

    <condition property="is_windows_7"> 
     <os name="Windows 7"/> 
    </condition> 

    <!-- DISPLAYS WINDOWS OS --> 
    <target name="display_windows" if="is_windows" > 
     <echo message="OS Family is:  Windows" /> 
    </target> 


    <target name="build" > 

     <antcall target="display_windows" /> 

     <echo message="OS Name is:   ${os.name}" /> 
     <echo message="OS Architecture is: ${os.arch}" /> 
     <echo message="OS Version is:  ${os.version}" /> 

    </target> 

</project> 

Od odpowiedzi na to pytanie, powyższy kod został awansowany do naszego systemu kompilacji produkcyjna, gdzie jest zapewnienie wspólnej funkcjonalność całej systemu Windows & Mac.


@thekbb wykonany dobra propozycja, aby usunąć <antcall target="display_windows" /> i zaktualizować definicję docelowego zależą display_windows jak na poniższym kodzie:

<target name="build" depends="display_windows"> 

     <echo message="OS Name is:   ${os.name}" /> 
     <echo message="OS Architecture is: ${os.arch}" /> 
     <echo message="OS Version is:  ${os.version}" /> 

    </target> 

ta opiera się na fakcie, że antcall uruchamia nową instancję mrówki w nowej maszynie JVM. Niektórzy użytkownicy mogą uznać tę optymalizację za łatwiejszą do zrozumienia; inni mogą chcieć to zrobić ze względu na wydajność.

+1

W przypadku kopiowania wklej/tego, należy usunąć i zmienić cel kompilacji, aby zależał od docelowego okna wyświetlacza. antcall obraca nową instancję mrówki w nowym jvm, aby potwierdzić, że jest to windows. – thekbb

+0

@thekbb Thx za cynk. Dlaczego w tym przykładzie nie warto wyłudzać nowej kopii? Jaki jest lepszy sposób na sfałszowanie wywołania metody w mrówce? –

+1

Jest to w dużej mierze stylistyczne - zredagowałem Twoją odpowiedź, aby pokazać, co poleciłem. zredaguj ponownie, jeśli się nie zgadzasz. Gdy pliki kompilacji stają się duże i pojawiają się porozrzucane antce, trudno jest uzyskać obraz tego, w jaki sposób przepływają strumienie kontrolne między celami. na nowoczesnym sprzęcie koszt uruchomienia nowej wersji ant jest znikomy, uruchomiłem każdy sposób na moim macu, a różnica wynosi ~ 0.5 sekundy – thekbb

Powiązane problemy