【问题标题】:Jar file doesn't get added to java classpath when appended to end附加到结尾时,Jar 文件不会添加到 java 类路径中
【发布时间】:2014-03-21 00:58:57
【问题描述】:

我有一个名为 $CLASSPATH 的环境变量,我用它作为 java 类路径来运行某个 java 代码。

这个$CLASSPATH 变量很长。它的大小约为66427字节(see how long it is

现在这是奇怪的行为。

当我将某个 jar 文件(例如 bar.jar)附加到 $CLASSPATH开始时,该 jar 文件被添加到类路径中,并且我的代码运行良好。

我在 shell 脚本中这样做,如下所示,

CLASSPATH=/home/foo/bar.jar:$CLASSPATH

但是,当我将 bar.jar 附加到 $CLASSPATHend 时,由于缺少 bar.jar 文件,我的代码会出现异常!

CLASSPATH=$CLASSPATH:/home/foo/bar.jar

为什么会有这种奇怪的行为?

我这里有什么遗漏吗?

更新:

如果适用,请查看 shell 上 xargs --show-limits 命令生成的输出。

foo@foo-laptop:~$ xargs --show-limits
Your environment variables take up 3632 bytes
POSIX upper limit on argument length (this system): 2091472
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2087840
Size of command buffer we are actually using: 131072

【问题讨论】:

    标签: java shell classpath


    【解决方案1】:

    这个question 会帮助你。

    上面写着:

    试试:xargs --show-limits

    你的环境变量占用2446 bytes POSIX 参数长度上限(本系统):2092658 POSIX 参数长度的最小允许上限(所有系统):4096 我们可以实际使用的最大命令长度:2090212 我们实际使用的命令缓冲区大小:131072 每个参数没有限制,而是整个命令行长度的总和。在我的系统(Fedora 15/zsh)中,它接近 2Mb。 (第 4 行)。

    检查生成的 $CLASSPATH 的大小

    【讨论】:

    • 感谢阿迪!我的 $CLASSPATH 变量的大小是 66427 字节。根据xargs --show-limits 命令的输出:Your environment variables take up 3632 bytes。因此,如果我的 $CLASSPATH 大小超过了 3632 的限制,我不应该收到错误或警告吗?但是,我没有收到这样的错误/警告
    【解决方案2】:

    当像CLASSPATH 这样的环境变量的值长度有限制时,您可以在路径的某些部分尝试通配符。

    根据文档:

    如果目录foo 包含a.jarb.jarc.jar, 然后类路径foo/* 扩展为 foo/a.jar;foo/b.jar;foo/c.jar,该字符串将是 系统属性。

    当同一路径中有这么多 .class.jar 文件时,请使用以下语法:

    CLASSPATH=/home/foo/*
    CLASSPATH=$CLASSPATH:/home/bar/*
    

    参考

    【讨论】:

    • 目前,我找不到使用您的建议的方法,因为在我的情况下,我根据某些条件使用脚本逐个选择 jar 文件。但是,记住这种“通配符”方法有一天会对我有所帮助。谢谢拉文德!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多