Исключая банки из динамически генерируемых путей к классам?
Я запускаю свой Java-сервер из bash-скрипта. Сервер "предоставил" зависимости от сторонних jar-файлов. Однако некоторые из этих банок конфликтуют с банками в моем приложении и должны быть исключены из пути к классам...
На данный момент мне нужно исключить только одну банку, так что эта идиома заставляет меня
EXTERNAL_JARS=$(find "${EXTERNAL_LIB}" -name 'slf4j-log4j12-1.4.3.jar' -prune -o -type f -name '*.jar' -printf ':%p' )
CLASSPATH=${CLASSPATH}${EXTERNAL_JARS}
Есть ли лучший подход для использования, когда количество внешних банок составляет 20-30, а количество исключенных банок ~ 5?
1 ответ
Это будет работать, хотя предполагается, что в ваших именах файлов нет пробелов.
EXCLUDED="slf4j-log4j12-1.4.3.jar
some-other-library.jar
something-else.jar"
EXTERNAL_JARS=$(
find "${EXTERNAL_LIB}" -type f -name '*.jar' \
| grep -v -F"$EXCLUDED" \
| xargs \
| tr ' ' ':'
)
CLASSPATH=${CLASSPATH}:${EXTERNAL_JARS}
Идея здесь заключается в использовании grep -v -F
и многострочная строковая переменная для фильтрации исключенных банок.
Когда вы это сделаете, вы больше не можете использовать -printf
флаг в find
так что вы замените его xargs | tr ' ' '-'
, Вот xargs
объединит все банки, разделив их пробелом и tr
Команда заменяет эти пробелы двоеточиями. Опять же, это будет работать, если у вас нет пробелов на вашем пути.