Domanda

Sto cercando di sviluppare un bash script di build per un progetto Java che verrà eseguito su Ubuntu e Fedora.Ubuntu utilizza il compilatore gcj mentre Fedora usa IcedTea.

Sia il loro rapporto di errori e warning in modi leggermente diversi, e voglio ignorare gli avvertimenti (lo so, non è generalmente una buona idea, ma alcuni avvisi sono semplicemente idiota).

Per gcj, voglio correre:

javac *.java 2>&1 | grep -A 4 "error:"

ma per IcedTea, voglio correre:

javac *.java 2>&1 | grep -A 4 "error:\|errors\|.java:"

Sono ancora nuovo a bash, quindi come faccio a scrivere un'istruzione if che sarebbe uno contro l'altro in base al javac versione?

È stato utile?

Soluzione

Assumendo che il java e javac binari partita, e che IcedTea è il caso speciale.

#!/bin/bash

ERROR="error:"

java -version 2>&1 | grep -i icedtea > /dev/null
if [ $? -eq 0 ]; then
   ERROR="error:\|errors\|.java:"
fi

javac *.java 2>&1 | grep -A 4 $ERROR

Sul mio sistema, IcedTea e il sole hanno la stessa uscita per "javac -version", ma non per "java -version".

Altri suggerimenti

La scrittura di Java script in bash (o qualsiasi altro linguaggio di shell) ha una serie di problemi:

  • script tendono ad essere non-portatili a causa della shell differenze, le diverse posizioni di comando, comando incompatibili opzioni e così via ...anche se si tenta di rendere il portatile.

  • script non è possibile far fronte con le dipendenze (o almeno non facilmente)

  • gli script non possono far fronte con ricompilare solo roba che ha cambiato

Invece, suggerisco di scrivere un "build.xml" file e utilizzare il Ant tool di build.La formica ha il vantaggio di funzionare su qualsiasi versione della piattaforma che esegue Java, e di prendersi cura della maggior parte delle differenze di piattaforma.È come una sorta di meglio "Fare", progettato specificamente per la costruzione di Java.

    #!/bin/sh

    JAVAC_VERSION="`java -version 2>&1 /dev/null | awk '/IcedTea/ {print $4}' | sed -e 's/[\(0-9]//g'`"
    ICEDTEA="IcedTea"

    if [ ${JAVAC_VERSION} = ${ICEDTEA} ]; then
        javac *.java 2>&1 | grep -A 4 "error:\|errors\|.java:"
    else
        javac *.java 2>&1 | grep -A 4 "error:"
    fi

    exit 0

Che dovrebbe farlo - se ho capito bene la tua domanda. Come si ottiene la versione -. Im non del tutto sicuro di, ma se il mio javac -version è corretto basta cambiare di conseguenza alle proprie esigenze

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top