2011-05-05 132 views
1

來啓動測試,我必須設置一個大的jar文件列表作爲類路徑的參數: -classpath a.var; b.jar; .... - 是否有其他方法指定庫? 例如是否可以設置文件作爲參數,並在文件中包含路徑所有庫 例如: -classpath MYFILE.TXT 和MYFILE.TXT包含../a.jar ../b.jar ..等如何設置類路徑參數

感謝,

+0

建立在一個罐子/戰爭/ .. – 2011-05-05 13:09:00

回答

1

午餐測試我強烈建議你使用Ant。

與螞蟻有<classpath>元素,它允許您指定「定目錄內的所有jar文件」:

<classpath> 
    <pathelement path="${classpath}"/> 
    <fileset dir="lib"> 
    <include name="**/*.jar"/> 
    </fileset> 
    <pathelement location="classes"/> 
    <dirset dir="${build.dir}"> 
    <include name="apps/**/classes"/> 
    <exclude name="apps/**/*Test*"/> 
    </dirset> 
    <filelist refid="third-party_jars"/> 
</classpath> 
2

您可以設置環境變量CLASSPATH(使用正確的語法你的shell要做到這一點,前bash,Windows XP等)。

您還可以創建某種形式的配置文件,爲您一直這樣做,例如.bashrc。這當然會影響每次在該配置文件下使用java命令。

如果您的主類在jar中,您也可以使用jar的清單來設置類路徑。 Sun/Oracle has a tutorial page on doing this。創建一個名爲Manifest.txt的文件。在該文件中添加一行:

類路徑:jar1名jar2名稱目錄名/ jar3名

其中各種jar1-name部分是在classpath實際罐子。

然後使用創建的jar:

罐子立方英尺MyJar.jar Manifest.txt MyPackage的/ *類

還是Ant Jar Task與清單屬性設置,或使用the Maven jar plugin或不過你的構建工作,獲取罐子的清單。

或繼續像當前一樣使用--classpath。

3

您可以以編程方式添加一條新路的類路徑:

String currentPath = System.getProperty("java.library.path"); 
System.setProperty("java.library.path", current + ":/path/to/my/libs"); 

// this forces JVM to reload "java.library.path" property 
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths"); 
fieldSysPath.setAccessible(true); 
fieldSysPath.set(null, null); 

您可以添加的路徑,所以沒有必要列出所有的罐子。這隻會改變您的JVM實例的類路徑,所以它不會影響其他Java應用程序。

更新:

:/是特定於UNIX LIB-路徑和文件夾路徑分隔符。對於多操作系統,您應該使用「path.separator」和「file.separator」system properties

+0

你能開發更多的請嗎?例如,我有lib1.jar,lib2.jar,... libi.jar,這些文件夾可以在不同的文件夾中找到,我該如何探索您的建議?謝謝 – user739991 2011-05-05 14:22:37

+0

添加更多路徑:'「:/ path/to/my/libs1:/ path/to/mylibs2:/ path/etc」 – 2011-05-05 15:54:51

2

由於Java 6,你可以在你的classpath中使用通配符:

java -classpath 'lib/*' 

注意,您必須引用類路徑字符串,以避免外殼擴展通配符。

+0

我認爲這相當於java -classpath lib/* – 2011-05-05 13:20:17

+0

@JB:不,這正是會是錯誤的。 – 2011-05-05 13:21:23

+0

@Michael Borgwardt:來自http://download.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html:「例如,類路徑條目foo/*指定目錄中的所有JAR文件命名爲foo「。 – 2011-05-05 13:23:21

2

從Java 6開始,您可以在classpath中使用通配符,將所有jar包含在目錄中。見http://download.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

+0

這非常方便,但也非常危險,因爲它依賴文件系統來處理罐子的排序順序。這可能會在存在衝突的類時導致令人討厭的類路徑錯誤,因爲不同的環境中可能會優先考慮不同的JAR。 – 2014-11-07 17:24:46