5

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

4

3 回答 3

4

不,没有限制。在 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
...

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

#!/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 依赖插件来生成依赖项列表。

于 2012-06-28T11:26:33.923 回答
0

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

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

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

于 2012-06-28T11:22:42.593 回答
0

当您在Java程序中使用变量jar中指定的文件中的某些类时, JVM不会加载该类,直到您正在运行的程序显式需要该类(或者如果您从代码中显式加载该类 - 相同主意)。当你有一个很长的文件时,唯一可能出现的问题是在JVM找到正确的文件之前检查所需的时间。但这应该不是问题。如果您的程序在测试中表现良好,则不必担心这一点。classpathclasspathclasspathjar

于 2012-06-28T11:24:28.360 回答