我从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时,是否有更好的使用方法?
答案 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
命令用冒号替换这些空格。同样,如果你的路径中没有空格,这将有效。