Linux中的类路径限制

时间:2012-06-28 11:16:16

标签: java linux

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

3 个答案:

答案 0 :(得分:4)

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

...
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
...

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

#!/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 $@

我们从未遇到过问题,这些类路径条目变得非常庞大。

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

答案 1 :(得分:0)

请参阅this stackoverflow answer有关最大linux命令行长度的信息。

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

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

答案 2 :(得分:0)

Java 程序中使用jar变量中指定的classpath文件中的某些类时, JVM 赢了“加载该类,直到您正在运行的程序明确需要该类(或者如果您从代码中明确加载该类 - 相同的想法)。在{em> JVM 找到正确的classpath文件之前,classpath检查所需的时间是jar检查时出现的唯一问题。但那应该不是问题。如果你的程序在测试中表现良好,你不应该担心这一点。