欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java执行jar中的class类

程序员文章站 2022-05-01 19:17:43
...

很多情况都会需要运行jar,网上资料很多,大致分为三种方法:

一、直接达成可执行的jar。

二、定义lib path,使用命令执行。

三、定时classloader,手动加载jar。

 

第一种方案比较简单,就不做介绍。

 

第二种方案比较适用于jar都集中在一个目录下,命令如下:

java -Djava.ext.dirs="../3rdLib"  -cp . com.aspire.bdc.component.codegenerate.main.StartGenerate 

使用的是 -Djava.ext.dirs参数来加载jar。

 

第三种方案,比较灵活,可以加载不同目录下的jar,代码如下:

首先定义一个ClassLoaderUtil

package com.whty.onest;

import java.io.File;
import java.io.PrintStream;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;

public final class ClassLoaderUtil
{
  private static Method addURL = initAddMethod();

  private static URLClassLoader system = (URLClassLoader)ClassLoader.getSystemClassLoader();

  private static final Method initAddMethod()
  {
    try
    {
      Method add = URLClassLoader.class
        .getDeclaredMethod("addURL", new Class[] { URL.class });
      add.setAccessible(true);
      return add;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }

  private static final void loopFiles(File file, List<File> files)
  {
    if (file.isDirectory()) {
      File[] tmps = file.listFiles();
      for (File tmp : tmps) {
        loopFiles(tmp, files);
      }
    }
    else if ((file.getAbsolutePath().endsWith(".jar")) || (file.getAbsolutePath().endsWith(".zip"))) {
      files.add(file);
    }
  }

  public static final void loadJarFile(File file)
  {
    try
    {
      addURL.invoke(system, new Object[] { file.toURI().toURL() });
      System.out.println("加载JAR包:" + file.getAbsolutePath());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static final void loadJarPath(String path)
  {
    List files = new ArrayList();
    File lib = new File(path);
    loopFiles(lib, files);
    for (File file : files)
      loadJarFile(file);
  }
}

 然后新建一个测试类ServerStart:在main方法中执行libpath

public class ServerStart
{
  public static void main(String[] args)
  {
    try
    {
      ClassLoaderUtil.loadJarPath(System.getProperty("user.dir") + "/lib");

      System.out.println(FeiZoPanClient.uploadFile("/home/edu2/page.txt"));
      System.out.println(FeiZoPanClient.uploadFile("/home/edu2/resource.war"));
      System.out.println(FeiZoPanClient.uploadFile("/home/edu2/resource.txt"));
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}

 最后执行使用java命令执行java ServerStart