2012-03-05 3 views
5

sto usando formica per compilare un'applicazione Java. Il problema è che alcuni sviluppatori sono su win 7 e altri su xp e vista. Parte della compilazione è quello di costruire un MSI utilizzando WIX, su win7 questa è una directory e su XP e Vista è in un altro.Come rilevare il sistema operativo Windows in ANT

Il compito formica è controllata in Maven. Sto cercando un modo per dire la differenza tra i sistemi operativi di Windows con un tag condizionale per impostare la directory wix. Qualche idea?

so che sarà in questo formato:

<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> 

Qualsiasi aiuto sarebbe grande.

+0

possibile duplicato di [Utilizzo di ant per rilevare os e impostare proprietà] (http://stackoverflow.com/questions/453170/using-ant-to-detect-os-and-set-property) – oers

+0

Avevo già verificato che ma quello che voglio fare è controllare che scendessimo è XP, Vista o win7 l'altra opzione ti consente soltanto di sapere se le sue finestre. – Nathan

+0

@ Nathan - Hai avuto fortuna con la mia risposta? Marchio Pls accettato, o lasciatemi un commento in modo che possa aiutare di più.Questa tecnica è utilizzata nel nostro sistema di produzione, ma potrebbe non risolvere * il tuo * problema. –

risposta

12

Sembra che l'ANT <condition> può testare per il nome, la famiglia & versione del sistema operativo:

In base a questo link, ci sono alcune proprietà relative al sistema operativo che possiamo query. Uno è il normale family immobili utilizzati nel codice comune:

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

La mia versione di ANT non stampare un valore risolto per ${os.family}.


C'è anche:

  • os.name < --- questo è quello che è necessario controllare
  • os.arch
  • os.version

Ecco uno script demo che ho fatto per mostrare l'uso di queste proprietà:

<?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> 

Dal rispondere a questa domanda, il codice di cui sopra è stato promosso al nostro sistema produttivo di compilazione, dove sta fornendo funzionalità condivise attraverso Windows & Mac.


@thekbb fatto un buon suggerimento per rimuovere il <antcall target="display_windows" />, e aggiornare la definizione bersaglio dipendere display_windows secondo il codice qui sotto:

<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> 

Questa basata sul fatto che antcall lancia una nuova istanza di formica in una nuova JVM. Alcuni utenti potrebbero trovare questa ottimizzazione più facile da capire; altri potrebbero volerlo fare per ragioni di prestazione.

+1

Se si copia incolla/questo, assicurarsi di rimuovere e modificare la destinazione di costruzione in modo che dipenda dalla destinazione della finestra di visualizzazione. antcall gira una nuova istanza di formica in una nuova jvm per far sì che sia Windows. – thekbb

+0

@thekbb Thx per il suggerimento. Perché è una brutta cosa girare una nuova copia in questo esempio? Qual è un modo migliore per simulare una chiamata al metodo nella formica? –

+1

È in gran parte stilistico - ho modificato la tua risposta per mostrare cosa stavo raccomandando. modifica se non sei d'accordo. Quando i file di build diventano più grandi e vengono segnalati degli errori, è difficile avere un'idea di come i flussi di controllo tra i target. su hardware moderno il costo per far girare una nuova versione di formica è trascurabile, ho eseguito ogni modo sul mio mac e la differenza era ~ 0,5 secondi – thekbb