要启动测试,我必须设置一个大的jar文件列表作为classpath的参数: -classpath a.var; b.jar; .... - 还有其他方法来指定库吗? 例如,可以将文件设置为参数,文件包含所有库的路径 例如: -classpath myFile.txt 和myFile.txt包含../a.jar ../b.jar ..等等
感谢,
答案 0 :(得分:3)
您可以以编程方式向classpath添加新路径:
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 );
您可以添加路径,因此无需列出所有jar。这仅更改了JVM实例的类路径,因此不会影响其他Java应用程序。
<强>更新强>
:
和/
是特定于UNIX的lib-path和文件夹路径分隔符。对于多操作系统,您应该使用“path.separator”和“file.separator”system properties。
答案 1 :(得分:2)
您可以设置环境变量CLASSPATH(使用适当的shell语法来执行此操作,例如bash,Windows XP等)。
您还可以创建某种配置文件,始终为您执行此操作,即.bashrc。当然,这会影响每次在该配置文件下使用java
命令时。
如果您的主类在jar中,您还可以使用jar的清单来设置类路径。 Sun/Oracle has a tutorial page on doing this。创建一个名为Manifest.txt的文件。在该文件中添加以下行:
Class-Path:jar1-name jar2-name directory-name / jar3-name
其中各种jar1-name
部分是类路径上的实际jar。
然后使用:
创建你的jarjar cfm MyJar.jar Manifest.txt MyPackage / * .class
或者设置了清单属性的Ant Jar Task,或者使用the Maven jar plugin或者你的构建工作,获取jar的清单集。
或者继续使用--classpath,就像你现在一样。
答案 2 :(得分:2)
从Java 6开始,您可以在类路径中使用通配符:
java -classpath 'lib/*'
请注意,必须引用类路径字符串以避免shell扩展通配符。
答案 3 :(得分:2)
从Java 6开始,您可以在类路径中使用通配符,以将所有jar包含在目录中。请参阅http://download.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html。
答案 4 :(得分:1)
午餐测试我强烈建议您使用Ant。
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>