В этом примере показано, как использовать getopt
и eval
и HEREDOC
и shift
для обработки коротких и длинных параметров с последующим требуемым значением и без него.
#!/usr/bin/env bash
# usage function
function usage()
{
cat << HEREDOC
Usage: $progname [--num NUM] [--time TIME_STR] [--verbose] [--dry-run]
optional arguments:
-h, --help show this help message and exit
-n, --num NUM pass in a number
-t, --time TIME_STR pass in a time string
-v, --verbose increase the verbosity of the bash script
--dry-run do a dry run, don't change any files
HEREDOC
}
# initialize variables
progname=$(basename $0)
verbose=0
dryrun=0
num_str=
time_str=
# use getopt and store the output into $OPTS
# note the use of -o for the short options, --long for the long name options
# and a : for any option that takes a parameter
OPTS=$(getopt -o "hn:t:v" --long "help,num:,time:,verbose,dry-run" -n "$progname" -- "$@")
if [ $? != 0 ] ; then echo "Error in command line arguments." >&2 ; usage; exit 1 ; fi
eval set -- "$OPTS"
while true; do
# uncomment the next line to see how shift is working
# echo "\$1:\"$1\" \$2:\"$2\""
case "$1" in
-h | --help ) usage; exit; ;;
-n | --num ) num_str="$2"; shift 2 ;;
-t | --time ) time_str="$2"; shift 2 ;;
--dry-run ) dryrun=1; shift ;;
-v | --verbose ) verbose=$((verbose + 1)); shift ;;
-- ) shift; break ;;
* ) break ;;
esac
done
if (( $verbose > 0 )); then
# print out all the parameters we read in
cat <<-EOM
num=$num_str
time=$time_str
verbose=$verbose
dryrun=$dryrun
EOM
fi
# The rest of your script below
Наиболее значимые строки сценария выше:
OPTS=$(getopt -o "hn:t:v" --long "help,num:,time:,verbose,dry-run" -n "$progname" -- "$@")
if [ $? != 0 ] ; then echo "Error in command line arguments." >&2 ; exit 1 ; fi
eval set -- "$OPTS"
while true; do
case "$1" in
-h | --help ) usage; exit; ;;
-n | --num ) num_str="$2"; shift 2 ;;
-t | --time ) time_str="$2"; shift 2 ;;
--dry-run ) dryrun=1; shift ;;
-v | --verbose ) verbose=$((verbose + 1)); shift ;;
-- ) shift; break ;;
* ) break ;;
esac
done
Короче говоря, точка, читаем и обрабатываем практически все (ИМХО).
Надеюсь, что это поможет кому-то.
Сначала пространство кучи и т. Д. Устанавливаются JVM, о чем вы правильно упомянули.
Кроме того, вы можете установить их для Maven через .mvn/jvm.config
или, как вы уже упоминали, через MAVEN_OPTS
, как уже упоминалось.
MAVEN_OPTS
и, возможно, другие вещи (например, JAVA_HOME) также могут быть определены через .mavenrc
, который находится в $HOME/.mavenrc
(Linux / Mac) или %USERPROFILE%\mavenrc_pre.bat
или %USERPROFILE%\mavenrc_pre.cmd
(Windows ):
Таким образом, файл .mavenrc
может содержать:
export JAVA_HOME=.../jdk-11.0.1.jdk
export MAVEN_OPTS="-Djava.awt.headless=true -Xmx2g"
, иначе можно использовать файл jvm.config
(расположенный в проекте в каталоге .mvn
). содержать:
-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true
Нет никаких значений по умолчанию, определенных Maven. Значения по умолчанию - это значения, определенные JVM.
Для Java 7 я бы порекомендовал не менять PermGen, потому что это обычно требуется, если вы развертываете в контейнеры сервлетов, такие как Tomcat или реальные серверы приложений и т. Д. Но, конечно, это зависит. 1120 Кроме того, цитату из книги я бы просто сказал. Просто начните с значений по умолчанию. Если мы говорим о производительности, вам следует проверить, действительно ли проблема в памяти, в которой я обычно сомневаюсь. Там, конечно, есть влияние, которое оказывает влияние, если мы говорим о сборках, которые имеют более 100 модулей в одной многокомпонентной сборке.