我如何创建一个 object class 来执行从 Maven 存储库下载 .jar 依赖项

How can i create an object class to perform downloading of .jar dependencies from maven repository

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

如果你想在运行时动态加载一个jar,你可以按照operation.In下面的例子做,我假设依赖的jar是spring-context,像这样:

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

我得到了那个罐子的 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

然后,有一个class Target依赖于class 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 中将 class 声明为 BootStrap,它将调用 Target instance.The [=25 的方法 start =] class 将通过相同的 classloader 动态加载 target.jarspring-context jar 文件,这是一个 URLClassLoader 实例,因此,方法 start in Target 实例可以访问 DateFormatter class 中定义的 spring-context.

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主要method.There有两件重要的事情:

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

我们可以看到结果:

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

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