2010-01-28 7 views
0

우분투와 페도라에서 실행될 Java 프로젝트 용 bash 빌드 스크립트를 개발하려고합니다. Fedora가 IcedTea를 사용하는 동안 우분투는 gcj 컴파일러를 사용합니다.Java 버전에 따라 다른 Bash 명령어 실행하기

두 가지 모두 오류 및 경고를 약간 다른 방식으로보고합니다. 경고를 무시하고 싶습니다 (일반적으로 좋은 아이디어는 아니지만 일부 경고는 단순히 바보입니다). 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가 특별한 경우를 가정합니다. 내 시스템, 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 

는하지만 "자바 -version"에 대한 "javac의의 -version"에 대한 동일한 출력을 가지고있다.

+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

거의 같지만 두 번째 if 문에 "[: javac : 이진 연산자가 필요합니다.]라는 오류가 나타납니다. – Cerin

+1

또한 첫 번째 줄 바로 뒤에 "echo $ JAVAC_VERSION"을 넣으면 아무 것도 표시되지 않습니다. – Cerin

+0

Acknowledged, 시도해 보겠습니다. – Anders

1

쓰기 자바 떠들썩한 파티에서 빌드 스크립트 (또는 다른 쉘 언어) 많은 문제가 있습니다

  • 스크립트의 차이, 서로 다른 명령 위치, 호환되지 않는 명령 옵션을 쉘에 의한 비 휴대용 경향을하고 그래서 ... 휴대용으로 만들려고해도. (또는 적어도 쉽게) 의존성을 극복 할 수

  • 스크립트 대신

을 변경 한 경우에만 물건을 재 컴파일에 대처 할 수

  • 스크립트, 난 당신이 "빌드를 작성하는 것이 좋습니다. xml "파일을 사용하고 Ant build tool을 사용하십시오. Ant는 Java를 실행하는 모든 빌드 플랫폼에서 실행하고 플랫폼 차이의 대다수를 관리하는 이점이 있습니다. 이는 Java를 구현하기 위해 특별히 설계된 더 나은 "Make"와 비슷합니다.

  • +0

    -1 XML이 어떻게 Makefile보다 나은가요? 개미는 문제를 찾는 해결책입니다. 그것은 저자가 속해있는 곳과 Makefiles에서 허용되는 곳을 지킬 수 없기 때문에 존재합니다. –

    +1

    Ant를 Make보다 사용하는 것은 XML을 사용하는 것이 아닙니다. (그것은 단지 사소한 구문상의 차이 인 IMO입니다.) 오히려 그 차이를 만드는 것은 Ant의 실행 모델입니다. Make의 문제점은 특정 명령으로 실행될 쉘 명령을 생성한다는 것이며 명령은 일반적으로 이식 가능하지 않다는 것입니다.반대로 Ant에서는 수행 할 작업을 선언하고 Ant 응용 프로그램 (및 플러그인 클래스)이 작업 수행 방법을 파악하도록합니다. –

    관련 문제