2010-01-28 4 views
0

Я пытаюсь разработать скрипт сборки bash для Java-проекта, который будет запущен на Ubuntu и Fedora. Ubuntu использует компилятор gcj, в то время как Fedora использует IcedTea.Выполнение разных команд баха на основе Java версии

Оба сообщают о своих ошибках и предупреждения несколько по-разному, и я хочу игнорировать предупреждения (я знаю, что это вообще не хорошая идея, но некоторые предупреждения просто идиотские).

Для GCJ, я хочу запустить:

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

но IcedTea, я хочу запустить:

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

Я еще новичок в колотить, так как я бы написать, если утверждение, которое будет работать один против другого на основе версии javac?

ответ

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 и солнц имеет один и тот же выход для «JAVAC -версий», но не для «Java -версий».

+0

Голосовать, хорошая версия и простая (что мне нравится) и хорошо работает. – Anders

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 неверен, просто измените его в соответствии с вашими потребностями.

+0

Это близко, но я получаю сообщение об ошибке «[: javac: двоичный оператор ожидается» во втором операторе if. – Cerin

+1

Кроме того, если я поместил «echo $ JAVAC_VERSION» сразу после первой строки, он ничего не показывает. – Cerin

+0

Подтвержденный, позвольте мне попробовать. – Anders

1

Написание Java скрипты сборки в Баш (или любой другой язык оболочки) имеет ряд проблем:

  • сценарии имеют тенденцию быть непереносимой из-за оболочки различия, в разных местах команды, несовместимые параметры команд и и так далее ... даже если вы попытаетесь сделать переносной.

  • скрипты не могут справиться с зависимостями (или, по крайней мере, не так легко)

  • скрипты не могут справиться с перекомпиляции только вещи, которые изменили

Вместо этого я предлагаю вам написать «сборки. xml "и используйте Ant build tool. Ant имеет то преимущество, что работает на любой платформе сборки, которая запускает Java, и заботится о подавляющем большинстве различий в платформе. Это похоже на лучшее «Make», разработанное специально для построения Java.

+0

-1 XML как-то лучше Makefile? ant - решение в поисках проблемы. он существует просто потому, что его автор не смог сохранить вкладки, где они принадлежат, и места, где они разрешены в Make-файлах. –

+1

Это не использование XML, которое делает Ant лучше, чем Make. (Это всего лишь тривиальная синтаксическая разница IMO.) Скорее, это модель исполнения Ant, которая делает всю разницу. Проблема с Make заключается в том, что он генерирует команды оболочки, которые должны выполняться в определенном порядке, и эти команды обычно не переносятся.Напротив, с Ant вы объявляете задачи, которые необходимо выполнить, и пусть приложение Ant (и классы плагина) определяет, как выполнять задачи. –