【问题标题】:Excluding jars from dynamically generated classpaths?从动态生成的类路径中排除 jars?
【发布时间】:2014-08-23 04:29:30
【问题描述】:

我正在从 bash 脚本启动我的 java 服务器。服务器“提供”了对 3rd 方 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 时,是否有更好的使用方法?

【问题讨论】:

    标签: java bash


    【解决方案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 和一个多行字符串变量来过滤掉排除的jar。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 2018-03-11
      • 2015-10-06
      相关资源
      最近更新 更多