我编写了 Java“包装器”应用程序,该应用程序从 Web 下载实际的应用程序 JAR。基本上它是一个自动更新程序。然后,应用程序 JAR 由包装器 JAR 加载并执行其入口点函数,如下所示:
Class<?> classObject = this.getClassObject();
Method method = classObject.getMethod("run", String[].class);
method.invoke( classObject.newInstance(), (Object)this.getArgs().toArray( new String[0] ));
如果像这样加载应用程序 JAR,那么应用程序 JAR 和包装器 JAR 似乎都共享相同的依赖项。有没有办法让它们之间不共享依赖关系?
我打算自动更新。与安装的应用程序 JAR 相比,包装器 JAR 可能具有不同版本的依赖项。这意味着,如果某个依赖项有更新,我必须更新包装器和应用程序 jar,这违背了自动更新系统的目的。
最佳答案
通过添加 Shadow jar 插件并将这些冲突的依赖项重新定位到另一个命名空间来解决它。
关于java - 一种禁用动态加载的 JAR 之间共享 Gradle 依赖关系的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60966500/