여러 Java 명령줄 프로그램을 설치하는 방법은 무엇입니까?

여러 Java 명령줄 프로그램을 설치하는 방법은 무엇입니까?

모든 사용자를 위해 설치하고 싶은 Java 명령줄 프로그램이 많이 있습니다.

/distNetBeans를 사용하여 빌드하면 필요한 모든 라이브러리가 포함된 디렉터리가 생성됩니다 myprog1.jar. /libs그것을 실행하는 일반적인 방법은 거기로 가서 java -jar my.jar -options.

그래서 제가 하고 싶은 것은 myprog1 -options어디에서나 입력하고 실행하는 것입니다.

제가 생각한 방법은 다음과 같습니다.

  1. 및 을 /opt/myjava/myprog1포함하는 생성 .myprog1.jar/libs
  2. 모든 명령줄 인수를 간단히 리디렉션하는 myprog1bash 스크립트를 만듭니다 ./usr/local/binjava -jar /opt/myjava/myprog1/myprog1.jar

저는 bash 스크립트를 그다지 좋아하지 않습니다... 이것이 합리적인 접근 방식이라면 각 프로그램에 가변적인 수와 매개 변수 순서가 있다는 점을 고려할 때 스크립트는 어떻게 생겼을까요? 스크립트는 출력 리디렉션 >및 파이프 와 같은 표준 Unix 비트에 대해서도 걱정해야 합니까 |?

답변1

Bash 및 Java 실행 파일은 리디렉션된 콘텐츠를 처리하는 방법을 알고 있습니다. exec쉘 스크립트를 실행하는 대신 스크립트 해석기를 사용하려고 합니다 .

#!/bin/bash
exec java -jar ....jar "$@"

답변2

호출된 방식으로 명명된 jar를 실행하고 각 jar에 대한 심볼릭 링크를 생성하는 래퍼 스크립트를 작성할 수 있습니다. 다음은 jar-wrapper 스크립트입니다(경고, 브라우저에 직접 입력).

#!/bin/sh
name=$(basename "$0")
jar=
for dir in /opt/myjava/*; do
  if [ -e "$dir/$name.jar" ]; then jar=$dir/$name.jar; break; fi
done
if [ -z "$jar" ]; then
  echo 1>&2 "$name.jar not found"
  exit 126
fi
exec /your/favorite/java -jar "$jar" "$@"

$PATH그런 다음 원하는 만큼 래퍼 스크립트에 대한 심볼릭 링크를 만들고 다음 위치에 넣습니다.

ln -s wrapper-script myprog1
ln -s wrapper-script myprog2

Linux를 실행 중이고 시스템 관리자인 경우 Java 인터프리터를 선택하여 jar를 직접 실행 가능하게 만들 수 있습니다.binfmt_misc기구.

예를 들어 내 시스템에서는 다음과 같습니다.

$ cat /proc/sys/fs/binfmt_misc/jar
enabled
interpreter /usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/jexec
flags: 
offset 0
magic 504b0304

시스템은 다음과 같이 기록됩니다.Documentation/binfmt_misc.txtLinux 커널 문서에 있습니다. 위와 유사한 항목을 만들려면 다음 명령을 실행하세요.

jexec=/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/jexec
echo >/proc/sys/fs/binfmt_misc/register ":jar:M:0:504b0304::$jexec:"

배포판에는 부팅 시 binfmt를 등록하는 메커니즘이 있을 수 있습니다. 데비안과 그 파생물에서는 다음과 같습니다.update-binfmts, JVM 패키지가 등록되었습니다 jexec.

옵션을 전달해야 하는 경우 옵션을 직접 추가하는 대신 래퍼 스크립트를 등록하여 옵션을 추가하세요 jexec.

관련 정보