确定动态加载的jar的加载器jar

时间:2017-05-11 15:15:43

标签: java

如何确定动态加载jar的jar名称?可能吗?我尝试过使用ClassLoader的许多变种但没有成功。

提前致谢。

让我解释为什么我需要"装载机罐的名称"。在我们的容器中,我们有以下几行:

URLClassLoader classLoader = new URLClassLoader(new URL[] { artifact.getFile().toURI().toURL() });
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(classLoader, artifact.getArtifact().getFile().toURI().toURL());
Class<?> processorClass = classLoader.loadClass(className);
Object processorClassInstance =  processorClass.newInstance();

当加载的类被实例化时,上面的newInstance,它的属性文件在类所在的jar外部。配置文件位于以容器jar命名的目录中,该容器jar包含执行上述代码行的类。因此,如果部署的容器jar被称为RedcapTDP.jar,则配置文件位于&#34; C:... \ RedcapTDP&#34;中。当部署RedcapTDP.jar时,它会动态加载配置的maven工件,而maven工件又会从RedcapTDP目录中读取它的配置文件。

我希望说清楚!

1 个答案:

答案 0 :(得分:1)

  

如何确定动态加载jar的jar名称?有可能吗?

从字面上看,不,这显然是不可能的。事实上,它甚至没有意义。 Java没有&#34;加载&#34; Jars,尽管它可能会加载jar中包含的一个或多个类。当它这样做时,是加载类的VM,而不是加载它的任何jar。

更自由地解释一下,也许你会问&#34;我如何确定 class ,它依赖于我的jar中的一个类导致我的类被加载,并且如何确定从哪个jar文件中加载了其他类?&#34;但是,除非你的控制超出了jar中的类,否则这也是不可能的。

loading 是类初始化之前的一个单独步骤,类初始化是第一个有机会执行类中包含的任何代码的点。因此,当您的课程首次有机会查询任何内容时,课程加载不再持续。此外,类不一定是从jar中加载的,并且无论如何,它们不包含有关它们被加载的源的信息。

我或许可以进一步思考你可能要提出的问题,但是我没有看到对问题的任何解释,这些解释提供的答案不同于&#34;不,这是不可能的。 #34;