很多情况都会需要运行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编程中,有时我们需要动态地加载外部JAR文件,并执行其中特定的类方法,这在插件系统、模块化应用或动态扩展性需求中尤为常见。本篇将详细讲解如何实现这一目标。 首先,理解JAR(Java Archive)文件是Java...
在Java编程环境中,有时我们需要将多个类打包成一个可执行的JAR(Java Archive)文件,以便于分发和执行。这个过程涉及到编译Java源代码、创建类路径(classpath)、构建MANIFEST.MF文件以及最终打包成JAR。下面我们...
在Java编程中,有时我们需要在运行时加载和执行外部的jar文件,这通常是出于灵活性、模块化或插件架构的需求。这个过程涉及到类加载器(Class Loaders)的概念,它是Java虚拟机(JVM)的一个核心特性。下面将详细...
通过上述步骤,我们可以有效地将Java程序中的多个Class文件打包成一个JAR文件。这种方式不仅简化了项目的分发流程,还提高了代码的安全性和可维护性。在实际操作过程中,还需要根据具体需求调整细节,例如自定义...
当我们运行一个JAR文件时,Java虚拟机(JVM)会加载其中的class文件并执行其中的代码。 修改JAR文件中的class文件涉及以下几个步骤: 1. **解压JAR文件**:使用解压缩工具(如WinRAR、7-Zip或命令行的jar命令)将...
在Java开发中,导出JAR文件是一个常见的需求,特别是在创建可执行的Java应用程序时。`test.jar`可能就是一个这样的可执行JAR文件。 这篇名为“java 导出jar文件 执行批处理”的博文,虽然没有提供具体内容,但我们...
在Java开发过程中,将源代码编译成可执行的程序时,我们经常需要将相关的类文件、资源文件等打包成一个独立的可执行文件,这就是Java的Jar(Java Archive)文件。Jar文件不仅可以方便地分发和运行Java应用程序,还...
Java开发过程中,有时我们需要查看或理解已编译的Class文件中的源代码,因为Java的编译过程会将源代码转化为字节码(.class文件)。在这种情况下,反编译工具就派上了用场。本篇文章将详细介绍Java的jar反编译工具...
这里需要注意的是命令中的`-jar`选项,它告诉Java运行时环境去读取该文件的`manifest.mf`文件,并从中找出`Main-Class`,然后执行该类的`main`方法。 #### 总结 通过上述步骤,可以在Linux环境下顺利地执行含有`...
这里的`-jar`选项告诉Java虚拟机(JVM)直接从JAR文件中加载主类并执行。 接下来,我们讨论如何在命令行下运行JUnit测试。JUnit是Java中最常用的单元测试框架,它提供了编写和运行测试用例的便利工具。如果你的项目...
在Java编程语言中,动态加载jar文件是一种关键的特性,它允许程序在运行时加载新的类库或组件,而不是在编译时静态地链接。这种技术对于实现插件式开发或者模块化系统至关重要,因为它提供了灵活性和可扩展性。下面...
为了让 Java 程序可以直接通过双击运行,我们需要创建一个可执行的 JAR 文件。这需要在 MANIFEST.MF 文件中指定 `Main-Class`,这是程序的入口点。假设 `Test.class` 是程序的主类,属于 `test` 包,MANIFEST.MF ...
Java打包JAR(Java Archive)文件是将多个类文件、资源文件和其他...总之,Java打包JAR文件是开发过程中的重要步骤,它使得代码的分发和执行变得更加方便。理解如何创建和使用JAR文件是每个Java开发者的基本技能之一。
Java Class和JAR文件是Java编程语言中至关重要的组成部分,它们与Java应用程序的运行密切相关。在深入探讨如何查看和理解这些文件之前,我们先来了解一下它们的基本概念。 **Java Class文件**: Java Class文件是...
在Java开发过程中,将项目打包成可执行的JAR...总的来说,将Java工程打包为可执行的JAR文件涉及选择合适的打包工具、配置主类、处理依赖以及运行方式的选择。根据不同的需求和工作环境,可以选择最适合的方法进行打包。
### Java加载.jar包详解 #### 一、Java 类加载机制概览 自 JDK 1.2 版本之后,Java 类加载机制发生了一个重要的变化,引入了一种名为**类加载委托**的概念。这一机制的核心思想在于,如果某个 `ClassLoader` 无法...
JAR文件包含编译后的.class文件,元数据(如MANIFEST.MF文件),以及其他资源文件,如图片、声音或配置文件。这些打包在一起的文件可以被Java虚拟机(JVM)作为一个单元来处理,提高了代码的可移植性和管理性。 在...
在Java中,创建可执行JAR文件通常涉及以下步骤: 1. **编写代码**:首先,你需要用Java编写程序,包含所有的类和方法。确保所有的类都正确地相互引用,并且有一个主类,其中包含了`public static void main(String...
在跨平台开发中,有时需要将不同编程语言的组件整合在一起,例如在C#应用中调用Java类或使用Java的jar包。本篇将详细阐述如何在C#环境中实现对Java类的调用以及使用Java的jar包。 首先,要理解C#与Java之间的互操作...
1. **类路径嵌入**:在构建可执行JAR时,可以将第三方JAR文件解压并将其内容合并到主JAR中。这样,所有类都位于同一个JAR中,可以正常加载。使用如Apache Maven的`maven-shade-plugin`或Gradle的`Shadow`插件可以...