从动态生成的类路径中排除jar?

时间:2014-08-22 16:29:38

标签: java bash

我从bash脚本启动我的java服务器。服务器已经“提供”了第三方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 个答案:

答案 0 :(得分:2)

这可行,但它假设您的文件名中没有空格。

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和多行字符串变量来过滤掉排除的jar。

执行此操作后,您将无法再使用-printf中的find标记,因此请将其替换为xargs | tr ' ' '-'。这里xargs将连接所有的jar,用空格分隔它们,tr命令用冒号替换这些空格。同样,如果你的路径中没有空格,这将有效。