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



我从bash脚本启动我的java服务器。服务器"提供"了对第三方jar的依赖。然而,其中一些jar与我的应用程序中的jar冲突,需要从类路径中排除…

目前,我只需要排除一个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}

当外部jar的数量为20-30而排除的jar的数量为~ 5时,是否有更好的方法使用?

这可以工作,尽管它假设您的文件名中没有空格。

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。

当你这样做时,你不能再在find中使用-printf标志,所以你用xargs | tr ' ' '-'代替它。这里xargs将连接所有jar,用空格分隔它们,tr命令用冒号替换这些空格。同样,如果你的路径中没有空格,这也可以工作。

最新更新