如何为classpath设置参数

时间:2011-05-05 13:07:17

标签: java classpath

要启动测试,我必须设置一个大的jar文件列表作为classpath的参数: -classpath a.var; b.jar; .... - 还有其他方法来指定库吗? 例如,可以将文件设置为参数,文件包含所有库的路径 例如: -classpath myFile.txt 和myFile.txt包含../a.jar                         ../b.jar                          ..等等

感谢,

5 个答案:

答案 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语法来执行此操作,例如bashWindows 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。

然后使用:

创建你的jar
  

jar 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>