可以在运行时将目录添加到类路径中吗?
为了更好地理解 Java 中的工作原理,我想知道是否可以在运行时动态地将目录添加到类路径中。
例如,如果我使用 "java -jar mycp.jar" 启动 .jar 并输出 java.class.path 属性,则我可能会得到:
java.class.path: '.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java'
现在我可以在运行时修改这个类路径来添加另一个目录吗? (例如,在使用位于我要添加的目录中的 .jar 第一次调用类之前)。
In order to better understand how things works in Java, I'd like to know if I can dynamically add, at runtime, a directory to the class path.
For example, if I launch a .jar using "java -jar mycp.jar" and output the java.class.path property, I may get:
java.class.path: '.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java'
Now can I modify this class path at runtime to add another directory? (for example before making the first call to a class using a .jar located in that directory I want to add).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用以下方法:
但是您需要通过反射来执行此操作,因为该方法是受保护的:
请参阅 反射。特别是反射的缺点部分
You can use the following method:
But you'll need to do this with reflection since the method is
protected
:See the Java Trail on Reflection. Especially the section Drawbacks of Reflection
2014 年更新:这是来自 Jonathan Spooner 2011 年接受的答案中的代码,稍作重写以使 Eclipse 的验证器不再创建警告(弃用、原始类型)
Update 2014: this is the code from the accepted answer, by Jonathan Spooner from 2011, slightly rewritten to have Eclipse's validators no longer create warnings (deprecation, rawtypes)
是的,您可以使用
URLClassLoader
.. 请参阅示例 这里。不使用反射。-- 编辑 --
按照建议从链接复制示例。
Yes, you can use
URLClassLoader
.. see example here. Doesn't use reflection.-- edit --
Copying example from the link as suggested.