Исключая банки из динамически генерируемых путей к классам?

Я запускаю свой 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 Команда заменяет эти пробелы двоеточиями. Опять же, это будет работать, если у вас нет пробелов на вашем пути.

Другие вопросы по тегам