簡體   English   中英

Linux中的類路徑限制

[英]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依賴項插件生成依賴項列表。

請參閱有關最大linux命令行長度的stackoverflow答案

最大命令行長度大致在128KB到2MB之間。

但是,任何一個參數的最大大小都要小得多,並且9000個字符可能會有問題。

當您在Java程序中使用classpath變量中指定的jar文件中的某些類時, JVM將不會加載該類,直到您運行的程序明確需要該類(或者如果您從代碼中明確加載該類 -同樣的想法)。 當你有一個很長的classpath ,唯一可能出現的問題是在JVM找到正確的jar文件之前檢查classpath所需的時間。 但那應該不是問題。 如果你的程序在測試中表現良好,你不應該擔心這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM