0

UbuntuとFedoraで実行されるJavaプロジェクト用のbashビルドスクリプトを開発しようとしています。Ubuntuはgcjコンパイラを使用し、FedoraはIcedTeaを使用します。

どちらもエラーと警告をわずかに異なる方法で報告します。警告を無視したいと思います(私は知っていますが、一般的には良い考えではありませんが、警告のいくつかは単にばかげています)。

gcjの場合、実行したい:

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

しかし、IcedTeaの場合、実行したい:

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

私はまだbashを初めて使用するので、javacバージョンに基づいて一方を他方に対して実行するifステートメントをどのように記述しますか?

4

3 に答える 3

4

javaとjavacのバイナリが一致し、icedteaが特殊なケースであると仮定します。

#!/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

私のシステムでは、icedteaとsunの出力は「javac-version」では同じですが、「java-version」ではありません。

于 2010-01-28T13:29:15.760 に答える
1
    #!/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

私があなたの質問を正しく理解していれば、それでうまくいくはずです。バージョンの入手方法-よくわかりませんが、javac -version間違っている場合は、必要に応じて変更してください。

于 2010-01-28T13:23:55.647 に答える
1

Javaビルドスクリプトをbash(またはその他のシェル言語)で作成するには、いくつかの問題があります。

  • スクリプトは、シェルの違い、コマンドの場所の違い、コマンドオプションの互換性の欠如などにより、移植性がない傾向があります。移植性を持たせようとしてもです。

  • スクリプトは依存関係に対処できません(または少なくとも簡単ではありません)

  • スクリプトは、変更されたものだけを再コンパイルすることはできません

代わりに、「build.xml」ファイルを作成し、Antビルドツールを使用することをお勧めします。Antには、Javaを実行する任意のビルドプラットフォームで実行でき、プラットフォームの違いの大部分を処理できるという利点があります。これは、Javaを構築するために特別に設計されたより優れた「Make」のようなものです。

于 2010-01-28T15:05:14.743 に答える