Linux中的类路径限制

Gan*_* MP 5 java linux

我们从shell脚本执行独立的java程序,有一个comman脚本提到类路径,路径等.在这个通用脚本中,我们现在添加了几个类路径,字符数超过9000.它在测试中工作正常ENV.它会在生产中引起任何问题吗?在linux中设置classpath有什么限制吗?命令行输入的最大字符数是多少...

Jac*_*erk 5

不,没有限制。Windows 下有(8191 个字符),但 Linux 下没有。我们使用类路径文件的概念。这些文件列出了应用程序的所有依赖项,例如:

...
libs/org/easymock/easymock/2.2/easymock-2.2.jar
libs/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar
libs/org/hibernate/hibernate-envers/4.1.0.Final/hibernate-envers-4.1.0.Final.jar
libs/com/google/inject/guice/3.0/guice-3.0.jar
...
Run Code Online (Sandbox Code Playgroud)

然后我们将其转换为可用的类路径并运行应用程序,如下所示:

#!/bin/bash

CLASSPATH_FILE=`ls -r1 ${APP-HOME}/classpaths/myapp*.classpath | head -n1`
CLASSPATH=$(cat $CLASSPATH_FILE | sed 's_^libs_ ${APP-HOME}/libs_' | tr -d '\n' | tr -d '\r' | sed 's_.jar/libs/_.jar:/libs/_g' | sed 's_.pom/libs/_.pom:/libs/_g')

java -d64 -cp $CLASSPATH com.blah.main.Main $@
Run Code Online (Sandbox Code Playgroud)

我们从来没有遇到过问题,而且这些类路径条目变得非常大。

编辑:作为旁注,您可以使用 Maven 依赖项插件来生成依赖项列表。

  • 我不同意 Linux 中没有限制。对于较旧的 (2.6.5) 内核,我们绝对已经达到了命令行长度 128KB 的硬限制。 (5认同)

Qua*_*nic 0

请参阅有关最大 Linux 命令行长度的stackoverflow 答案。

最大命令行长度大约在 128KB 到 2MB 之间。

不过,任何一个参数的最大大小都要小得多,9000 个字符可能会出现问题。