我们正在执行shell脚本的独立Java程序,它有一个提供类路径,路径等的comman脚本。在这个通用脚本中,我们现在添加了几个类路径,字符数大于9000。 它在测试环境中工作正常。它会在生产中引起任何问题吗?任何限制是在linux中设置类路径?什么是命令行输入的最大字符数...Linux中的类路径限制
回答
请参阅this stackoverflow answer关于最大linux命令行长度。
最大命令行长度大致在128KB到2MB之间。
但是,任何一个参数的最大尺寸要小得多,而9000个字符可能有问题。
当您在的Java程序使用从在classpath
变量指定的jar
文件中的一些班,JVM不会加载类,直到你正在运行的程序会明确需要一个类(或者,如果你从代码中明确加载该类 - 同样的想法)。当您有很长的classpath
时,可能出现的唯一问题是classpath
在JVM找到正确的jar
文件之前检查所需的时间。但这应该不成问题。如果你的程序在测试中表现良好,你不应该为此担心。
不,没有限制。在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 [email protected]
我们从来没有遇到的问题和这些类路径条目变得非常巨大。
编辑:作为一个方面说明,你可以使用maven依赖插件来生成依赖关系列表。
我不同意Linux没有限制。对于较老的(2.6.5)内核,我们绝对已经达到了命令行长度的128KB的硬限制。 – QuantumMechanic
... Linux永远不会让我惊叹。好,然后修正:真正的操作系统不应该给你任何问题。 :-)(我在上面做了必要的修改,感谢QuantumMechanic) –
- 1. Java类路径 - Linux
- 2. 限制路径长度限制
- 3. IndexedDB中的键路径无效:限制?
- 4. iOS UIWebView - 限制HTML路径
- 5. 根路径树枝限制
- 6. 限制导入到特定路径,不限制导入模块的路径
- 7. 在execl中的路径(linux)
- 8. 在Linux中的grep路径
- 9. 泽西岛中的限制路径媒体类型映射
- 10. Linux的javac命令在类路径
- 11. Linux中的硬限制和软限制
- 12. 在linux中更改路径
- 13. smartImage或smartFile的路径限制
- 14. KendoUI限制SVG和路径的尺寸
- 15. Rails:限制嵌套的资源路径
- 16. 燃料限制的最短路径
- 17. android:adb拉文件路径限制的windows?
- 18. Java类路径问题中的复制
- 19. 如何在Linux上设置类路径?
- 20. 转换Windows路径到Linux路径
- 21. Eclipse的错误:没有限制类路径容器
- 22. Linux上的chromedriver的路径
- 23. printf的路径在Linux上
- 24. 带全路径的Linux cp
- 25. Linux上的FileWrite路径
- 26. Firebase多路径更新中的路径数量是否有限制?
- 27. Linux中的绝对路径和相对路径
- 28. 在Linux中设置WAS服务器中的类路径
- 29. Azure blob存储文件路径限制
- 30. 会话cookie受路径限制?
错误,测试环境在那里验证一切工作正常,然后在生产中做同样的事情。如果你不相信你的测试环境,为什么你会有一个? –
环境变量的可用时间有限制,并且命令行可以有多长时间有限制。你*可以*达到那种长度的那两种(不知道炉旁任何操作系统的具体数字)。您可能想要开始使用[classpath wildcards](http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html)。 –
@JB:理论上,测试和生产环境应该是相同的,并且在理论上如果测试工作在测试中,它将在生产中工作。然而,理论与实践的区别在理论上,理论与实践并无区别。 –