groovy - 提取 groovy jar
问题描述
我有一个 jar 文件,其中包含一些类,假设我想从该 jar 文件中运行一个特定的类A.class
。
在运行时,我在我的代码中添加该 jar 文件并提取其内容。从提取的文件夹中。之后,我正在创建GroovyClassloader
并将提取的文件夹路径添加到 groovy 类加载器的类路径中。之后,我在A.class
groovy 类加载器的帮助下加载。到此代码为止,我工作正常,但是当我尝试创建A.class
当时的代码实例时,将抛出该类而不是其他依赖类的异常A.class
,即,如果A.class
导入B.class
比创建A.class
代码实例时抛出异常B
找不到类。可能是因为类加载器不同。
任何人都可以建议我如何解决这个问题。
我的代码是:
new UnZip().unZipIt(<groovy/jar/path>,</unzip/dir/path>);
GroovyClassLoader gcl = new GroovyClassLoader();
gcl.addClasspath(<unzip/dir/path>);
Class<?> klass = gcl.loadClass("A");
klass.newInstance();
PS:jar 文件是 groovy 一个文件是在 java 代码中提取的。
解决方案
你不需要提取罐子。只需将 jar 添加到类路径中:gcl.addClasspath(<groovy/jar/path>);
gcl
下面的代码通过 url将 jar 添加到类加载器。但是,您可以通过文件路径添加它。
GroovyClassLoader gcl = new GroovyClassLoader();
gcl.addClasspath('http://central.maven.org/maven2/commons-io/commons-io/2.6/commons-io-2.6.jar');
Class<?> klass = gcl.loadClass("org.apache.commons.io.output.NullWriter");
def o = klass.newInstance();
println o.getClass()
推荐阅读
- php - 我的 PHP IPN 脚本不工作 - 是什么导致它失败?
- java - 将文件夹压缩成单独的部分(无需将所有部分一起提取)
- powershell - VSTS 自定义任务发布在代理机器上运行 powershell
- firebase - 迁移 Flutter 应用程序:实时数据库到 Firestore
- python - Flask 会话在 Angular App 的请求之间没有持续存在
- java - 带有运动的 JavaFx Webview
- google-slides - Google 幻灯片在不退出演示模式的情况下刷新
- react-native - React Navigation - StackNavigator 内场景的初始渲染高度或位置错误
- typescript - 打字稿:防止使用具有未定义值的接口作为右侧值
- python - 如何创建循环?