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
上一篇: java 执行 class 文件
下一篇: java执行指定目录的class文件
推荐阅读
-
从Python程序中访问Java类的简单示例
-
全面解释java中StringBuilder、StringBuffer、String类之间的关系
-
Java日期时间API系列5-----Jdk7及以前的日期时间类TimeUnit在并发编程中的应用
-
Java日期时间API系列12-----Jdk8中java.time包中的新的日期时间API类,日期格式化,常用日期格式大全
-
Java中Date()类 日期转字符串、字符串转日期的问题
-
Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
-
Java中数组操作 java.util.Arrays 类常用方法的使用
-
Python中实例化class的执行顺序示例详解
-
Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate
-
Shell执行/调用Java/Jar程序例子的实例详解