[英]Classpath limitation in Linux
我們從shell腳本執行獨立的java程序,有一個comman腳本提到類路徑,路徑等。在這個通用腳本中,我們現在添加了幾個類路徑,字符數超過9000.它在測試中工作正常ENV。 它會在生產中引起任何問題嗎? 在linux中設置classpath有什么限制嗎? 命令行輸入的最大字符數是多少...
不,沒有限制。 在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依賴項插件生成依賴項列表。
當您在Java程序中使用classpath
變量中指定的jar
文件中的某些類時, JVM將不會加載該類,直到您運行的程序明確需要該類(或者如果您從代碼中明確加載該類 -同樣的想法)。 當你有一個很長的classpath
,唯一可能出現的問題是在JVM找到正確的jar
文件之前檢查classpath
所需的時間。 但那應該不是問題。 如果你的程序在測試中表現良好,你不應該擔心這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.