gpt4 book ai didi

java - 我如何创建一个对象类来执行从 Maven 存储库下载 .jar 依赖项

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:20 27 4
gpt4 key购买 nike

根据上面的标题,我需要有关如何创建对象类以从 Maven 存储库下载 .jar 依赖项的帮助。我有一个 JAR 文件,其中包含三个类,其中包括: CommandHandler.class; KeyStroke.classMain.class 以及每个类都有其依赖项,需要下载免费的 Maven 存储库。现在,我的问题是如何创建一个对象来执行在主程序逻辑开始执行之前下载依赖项所需的所有必要任务。因为我相信如果没有依赖项,我的上述类实现可能会遇到严重的异常...请提供任何帮助/建议/提示,我们将不胜感激。提前致谢。

最佳答案

如果你想在运行时动态加载一个jar,可以执行以下操作。在下面的示例中,我假设依赖的jar是spring-context,如下所示:

    <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.1.RELEASE</version>
<scope>provided</scope>
</dependency>

我得到了那个jar的url,http://maven.aliyun.com/nexus/content/groups/public/org/springframework/spring-context/4.3.1.RELEASE/spring-context-4.3.1.RELEASE.jar?spm=0.0.0.0.kG1Pdw&file=spring-context-4.3.1.RELEASE.jar

然后,有一个类Target依赖于DateFormatter类,该类包含在spring-context中,并且有一个名为start的方法。

import org.springframework.format.datetime.DateFormatter;

public class Target {

private static DateFormatter dateFormatter;

public void start(){
System.out.println(this.getClass().getClassLoader());
dateFormatter=new DateFormatter();
System.out.println(dateFormatter);
}
}

接下来,我们将上面的代码编译打包为一个名为target.jar的jar,存放在D:\\test\\target.jar

接下来,我们应该在另一个jar中声明一个类为BootStrap,该类将调用Target实例的start方法。BootStarp类将通过相同的classloader(即URLClassLoader实例)动态加载target.jarspring-context jar文件,因此,方法start Target实例中的可以访问spring-context中定义的DateFormatter类。

public class BootStrap {


public static void main(String[] args) throws Exception{
URL url = new URL("http://maven.aliyun.com/nexus/content/groups/public/org/springframework/spring-context/4.3.1.RELEASE/spring-context-4.3.1.RELEASE.jar?spm=0.0.0.0.kG1Pdw&file=spring-context-4.3.1.RELEASE.jar");
URL url2= (new File("D:\\test\\target.jar").toURI().toURL());
URLClassLoader classLoader = new URLClassLoader(new URL[]{url,url2});
Class<?> clz = classLoader.loadClass("com.zhuyiren.Target");
Object main = clz.newInstance();
Method test = clz.getMethod("start");
test.invoke(main);
}
}

最后,运行BootStrap main方法。有两件重要的事情:

  1. BootStrap 类和 Target 类不属于同一个 jar 文件。
  2. target.jar 未存储在 CLASSPATH 路径中。

我们可以看到结果:

java.net.URLClassLoader@e9e54c2
org.springframework.format.datetime.DateFormatter@4dd8dc3

这意味着我们成功访问了spring-context jar文件中定义的DateFormatter实例,并且spring-context没有存储在CLASSPATH中,甚至没有存储在本地文件系统中。

关于java - 我如何创建一个对象类来执行从 Maven 存储库下载 .jar 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45651384/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com