如何从Java进程中更改Java进程的CLASSPATH?
在你问我之前"你为什么要那样做?" 我马上解释一下.
当你运行Clojure REPL时,通常需要在你的CLASSPATH中加入更多的jar来加载Clojure源文件,我想这样做而不必重新启动Clojure本身(在Slime上使用它时这不是一个真正的选择)在Emacs上).
这就是原因,但我不希望这个问题被标记为奇怪的语言奇怪的编辑器,并被大多数可能有答案的Java开发人员所忽视.
java -classpath ../classes;../jar;. parserTester
Run Code Online (Sandbox Code Playgroud)
如何以编程方式获取上述命令中的功能?喜欢,是否可以运行:
java parserTester
Run Code Online (Sandbox Code Playgroud)
得到相同的结果?我尝试使用URLClassLoader但它修改了类路径并且没有添加它.
感谢名单!
感谢Milhous的回应.但这就是我想要做的事情.如何才能首先将jar放入类路径?我也试过使用自定义类加载器:(
这工作..但抱歉,我只需要运行它:java parserTester我想知道这样的事情是否可能???
它需要是如此bcoz我有一个单独的文件夹中的parserTester.java和.class.我需要保留文件结构.parserTester在单独的jar文件夹中使用jar.
背景
所以我试图在运行时在Mac OS X 上将jnilib(特别是JOGL)加载到Java中.我一直在关注相关的Stack Overflow问题:
我的最终目标是将特定于平台的JOGL文件打包到JAR中,并将它们解压缩到临时目录中并在启动时加载它们.我回过头来尝试使用硬编码路径加载JOGL:
File f = new File("/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/libjogl.jnilib");
System.load(f.toString());
f = new File ("/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/libjogl_awt.jnilib");
System.load(f.toString());
Run Code Online (Sandbox Code Playgroud)
尝试使用JOGL API时出现以下异常:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path
Run Code Online (Sandbox Code Playgroud)
但是当我java.library.path通过添加以下JVM选项指定时:
-Djava.library.path="/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/"
Run Code Online (Sandbox Code Playgroud)
一切正常.
题
是否可以System.load在Mac OS X上使用(或其他变体)作为在运行时调用的-Djava.library.path的替代?