返回顶部
首页 > 资讯 > 后端开发 > Python >Java以编程方式实现JAR文件的创建
  • 512
分享到

Java以编程方式实现JAR文件的创建

2024-04-02 19:04:59 512人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录jar文件的解剖创建一个 JarTool 类JAR描述符打开JAR文件进行编写将文件添加到JAR中一个工作实例总结大家好,我是指北君。 在这篇文章中,我们将介

大家好,我是指北君。

在这篇文章中,我们将介绍一下以编程方式创建jar文件的过程。在编写软件时,最终我们需要将其部署到生产状态。在某些情况下,使用带有独立文件的classpath是可以的。通常情况下,处理一个文件会更方便。在Java的情况下,标准的方法是使用JAR、WAR或EAR文件。

基本过程是编写清单,打开jar,添加内容,最后保存jar。

Jar文件的解剖

jar文件是ZIP文件格式的扩展,包含了一个清单文件。清单文件是JAR文件专用的特殊文件,可能包含各种设置。其中一些是主类、可选数据(即作者、版本等)和代码签名信息。

我们可以使用兼容zip的工具来查看和提取部分或全部存档。我们还可以包括一个jars或libs子目录,用于包含依赖性jar。由于jar是zip文件的扩展,我们可以包括任何文件或目录。

创建一个 JarTool 类

为了简化创建JAR文件的过程,我们创建了一个单独的、普通的旧Java对象(POJO)类,它封装了我们的操作。我们可以将条目放入清单文件,创建JAR文件,添加文件或目录。

我们还可以创建方法来执行从JAR中删除,甚至向现有的JAR追加条目,尽管这些操作需要完全读取和重写JAR。

JAR描述符

为了创建一个JAR文件,我们必须首先开始制定清单。

public class JarTool {    
    private Manifest manifest = new Manifest();

    public void startManifest() {
        manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSioN, "1.0");
    }
}

如果我们希望jar是可执行的,我们必须设置主类。

public void setMainClass(String mainFQCN) {
    if (mainFQCN != null && !mainFQCN.equals("")) {
        manifest.getMainAttributes().put(Attributes.Name.MAIN_CLASS, mainFQCN);
    }
}

另外,如果我们想指定额外的属性,我们可以把它们添加到清单中,比如说。

addToManifest("Can-Redefine-Classes", "true");

下面是这个方法。

public void addToManifest(String key, String value) {
     manifest.getMainAttributes().put(new Attributes.Name(key), value);
}

打开JAR文件进行编写

随着清单的完成,我们现在可以把条目写到JAR文件中。要做到这一点,我们必须首先打开JAR。

public JarOutputStream openJar(String jarFile) throws IOException {        
    return new JarOutputStream(new FileOutputStream(jarFile), manifest);
}

将文件添加到JAR中

在向JAR中添加文件时,Java使用Solaris风格的文件名,使用正斜杠作为分隔符(/)。注意,我们可以添加任何类型的文件,包括其他JAR文件或空目录。这对于包括依赖关系来说真的很方便。

另外,因为JAR文件是classpath的一种形式,我们必须指定我们希望在JAR中使用绝对路径的哪一部分。对于我们的目的,根路径将是我们项目的classpath。

了解了这一点,我们现在可以用这个方法完成我们的JarTool类。

public void addFile(JarOutputStream target, String rootPath, String source) 
  throws FileNotFoundException, IOException {
    String remaining = "";
    if (rootPath.endsWith(File.separator)) {
        remaining = source.substring(rootPath.length());
    } else {
        remaining = source.substring(rootPath.length() + 1);
    }
    String name = remaining.replace("\\","/");
    JarEntry entry = new JarEntry(name);
    entry.setTime(new File(source).lastModified());
    target.putNextEntry(entry);
    
    BufferedInputStream in = new BufferedInputStream(new FileInputStream(source));
    byte[] buffer = new byte[1024];
    while (true) {
        int count = in.read(buffer);
        if (count == -1) {
            break;
        }
        target.write(buffer, 0, count);
    }
    target.closeEntry();
    in.close();
}

一个工作实例

为了证明可执行jar的最低要求,我们将编写一个应用类,然后看看它是如何工作的。

public class Driver {
    public static void main(String[] args) throws IOException {
        JarTool tool = new JarTool();
        tool.startManifest();
        tool.addToManifest("Main-Class", "com.javanorth.createjar.HelloWorld");

        JarOutputStream target = tool.openJar("HelloWorld.jar");
        
        tool.addFile(target, System.getProperty("user.dir") + "\\src\\main\\java",
          System.getProperty("user.dir") + "\\src\\main\\java\\com\\javanorth\\createjar\\HelloWorld.class");
        target.close();
    }
}

HelloWorld类是一个非常简单的类,只有一个main()方法可以打印出文本。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

为了证明它的作用,我们有这个例子。

$ javac -cp src/main/java src/main/java/com/javanorth/createjar/HelloWorld.java
$ javac -cp src/main/java src/main/java/com/javanorth/createjar/JarTool.java
$ javac -cp src/main/java src/main/java/com/javanorth/createjar/Driver.java
$ java -cp src/main/java com/javanorth/createjar/Driver
$ java -jar HelloWorld.jar
Hello World!

在这里,我们已经编译了每个类,然后执行了Driver类,这将创建HelloWorld jar。最后,我们执行了这个jar,结果是打印出了 "Hello World "信息。

上面的命令应该从项目所在地执行。

总结

在本教程中,我们看到了如何以编程方式创建一个jar文件,向其中添加文件,并最终执行。

到此这篇关于Java以编程方式实现JAR文件的创建的文章就介绍到这了,更多相关Java创建JAR文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java以编程方式实现JAR文件的创建

本文链接: https://lsjlt.com/news/164949.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java以编程方式实现JAR文件的创建
    目录Jar文件的解剖创建一个 JarTool 类JAR描述符打开JAR文件进行编写将文件添加到JAR中一个工作实例总结大家好,我是指北君。 在这篇文章中,我们将介...
    99+
    2024-04-02
  • Java在创建文件时指定编码的实现方法
    目录一、问题分析二、字符编码三 、问题解决前言:最近,学习了Java IO流的相关的知识,想通过读写文件的方式练习和巩固所学知识。在使用File类创建文件时,突然想到,我该如何指定文...
    99+
    2024-04-02
  • android编程实现为程序创建快捷方式的方法
    本文实例讲述了android编程实现为程序创建快捷方式的方法。分享给大家供大家参考,具体如下: private void addShortcut(){ Intent sho...
    99+
    2022-06-06
    程序 方法 Android
  • java中创建文件的方式有哪些
    在Java中创建文件的方式有以下几种: 使用File类:可以通过File类的构造函数创建一个File对象,然后调用其createN...
    99+
    2024-03-04
    java
  • java实现/创建线程的几种方式小结
    进程与线程 进程可以简单理解成一个可执行程序例如.exe,在Windows中的任务管理器中可以查看每一个进程,进程是一次程序的执行,是程序在数据集合上运行的过程,是系统资源调度的一...
    99+
    2024-04-02
  • java创建文件怎么指定编码格式
    在Java中创建文件时,可以使用OutputStreamWriter类来指定编码格式。以下是一个示例: import java.io...
    99+
    2023-10-26
    java
  • 反编译jar实现的三种方式
    目录工具准备三种方式1.使用fernflower反编译之后再编译2.使用javassist动态修改class3.通过引入原来的jar包,修改代码(推荐)总结工具准备 相同大版本的jd...
    99+
    2024-04-02
  • java创建写入文件的方式有哪些
    本篇内容主要讲解“java创建写入文件的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java创建写入文件的方式有哪些”吧!在本文中大量的使用到了try-with-resources语...
    99+
    2023-07-04
  • 【第三方库】PHP实现创建PDF文件和编辑PDF文件
    目录 引入Setasign/fpdf、Setasign/fpdi 解决写入中文时乱码问题 1.下载并放置中文语言包(他人封装):https://github.com/DCgithub21/cd_FPDF 2.编写并运行生成字体文件的程序文件...
    99+
    2023-09-07
    php pdf 后端
  • java中实现创建目录与创建文件的操作实例
    目录一、创建目录二、创建文件三、同时创建目录和文件补充知识:getParentFile()方法和getParent()的区别总结一、创建目录 mkdir()—&mdash...
    99+
    2023-01-18
    java创建目录创建文件目录和文件 Java创建文件和文件夹 java创建目录和文件
  • Java的线程与进程以及线程的四种创建方式
    目录问题描述case 代码截图数据库DOcontroller定义dao定义mapper实现mysql相关 properties配置数据库数据测试结果具体错误信息解决总结问题描述 这里...
    99+
    2024-04-02
  • Java多线程的创建方式
    这篇文章主要介绍“Java多线程的创建方式”,在日常操作中,相信很多人在Java多线程的创建方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java多线程的创建方式”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-20
  • 反编译jar实现的方式有哪些
    这篇文章主要介绍“反编译jar实现的方式有哪些”,在日常操作中,相信很多人在反编译jar实现的方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”反编译jar实现的方式有哪些”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-21
  • Java中创建并写文件的方式有几种
    这篇文章主要讲解了“Java中创建并写文件的方式有几种”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中创建并写文件的方式有几种”吧!在java中有很多的方法可以创建文件写文件,你是否...
    99+
    2023-06-16
  • Android编程实现创建,删除,判断快捷方式的方法
    本文实例讲述了Android编程实现创建,删除,判断快捷方式的方法。分享给大家供大家参考,具体如下: private void addShortcut() { In...
    99+
    2022-06-06
    方法 Android
  • Java实现读取Jar文件属性的方法详解
    目录一、题目描述-读取Jar文件属性1、题目2、解题思路3、代码详解一、题目描述-读取Jar文件属性 1、题目 做一个读取jar文件的内容和功能的工具。 2、解题思路 创建一个类:R...
    99+
    2022-11-13
    Java读取Jar文件属性 Java Jar文件属性 Java Jar文件
  • 关于Java创建线程的2种方式以及对比
    目录1. 继承Thread类2. 实现Runnable接口:创建线程的两种方式对比:线程的完整生命周期:总结Java中两种创建线程的方式: 1. 继承Thread类 重写run()方...
    99+
    2024-04-02
  • Java与Scala创建List与Map的实现方式
    目录Java与Scala创建List与MapJava自定义map与scala map对比1. 背景2. java代码Java与Scala创建List与Map //Java Lis...
    99+
    2024-04-02
  • C#异步编程Task的创建方式
    一、简介 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:Task支持线程的取消、完成、失败通知等交互性操作,但是T...
    99+
    2024-04-02
  • Java线程的三种创建方式
    目录1、Thread2、Runnable和Thread3、Runnable和Thread4、三者对比5、注意项1、Thread 继承Thread类,并重写run方法 class ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作