我們正在執行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:理論上,測試和生產環境應該是相同的,並且在理論上如果測試工作在測試中,它將在生產中工作。然而,理論與實踐的區別在理論上,理論與實踐並無區別。 –