Java:创建和写入一个jar文件并执行

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:创建和写入一个jar文件并执行相关的知识,希望对你有一定的参考价值。

1. 声明

当前内容主要为学习和复习使用java方式生产一个jar并使用命令行执行

主要为使用JarOutputStream方式创建jar文件

2.基本demo

1.首先准备一个java文件(Hello.java)

public class Hello {
	public static void main(String[] args) {
		System.out.println("hello create my jar file");
	}
}

2.找到项目编译路径并找到该Hello.class文件的位置
在这里插入图片描述
3.开始写代码并将这个Hello.class作为启动目标类

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.jar.Attributes;
import java.util.jar.Attributes.Name;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;

/**
 * 
 * @author hy
 * @createTime 2021-06-20 09:42:23
 * @description 像某个jar中写入内容
 *
 */
public class WriteJarTest {
	public static void main(String[] args) {
		// 注意jarFile主要使用来读取jar文件的,不能创建jarFile
		String writeJarPath = "C:\\\\Users\\\\admin\\\\Desktop\\\\java的测试\\\\read-write-jar-test\\\\my.jar";
		Manifest manifest = new Manifest();
		Attributes mainAttributes = manifest.getMainAttributes();
		// 配置MANIFEST.MF文件的内容
		mainAttributes.put(new Name("Manifest-Version"), "1.0.0");
		mainAttributes.put(new Name("Main-Class"), "com.hy.test.Hello");

		String classPath = "D:\\\\eclipse-workspace\\\\JarReadAndWriteTest\\\\bin\\\\com\\\\hy\\\\test\\\\Hello.class";
		File file = new File(classPath);
		try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(writeJarPath), manifest);
				FileInputStream fis = new FileInputStream(file)) {
			// 这里需要获取多个class文件,然后创建并得到各种byte

			JarEntry jarEntry = new JarEntry("com/hy/test/Hello.class");
			byte[] bytes = new byte[1024];
			// 读取单个文件的比特到当前的byte中
			int len = fis.read(bytes);
			byte[] copyOfRange = Arrays.copyOfRange(bytes, 0, len);
			// 放入一个com/hy/test/Hello.class(注意这里不能使用com\\\\hy\\\\test\\\\Hello.class替换,否则执行报错)
			jos.putNextEntry(jarEntry);
			// 开始向当前的单个实体中写入数据(当前Hello.class的比特)
			jos.write(copyOfRange);
			// 关闭这个jar实体,可以开启其他的jar实体
			jos.closeEntry();

			//jar文件写入完毕
			jos.finish();

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println("创建一个jar文件成功");

	}
}

注意:Main-Class就是这个运行的类,其他的可以参考之前的博文

3. 创建jar和运行

在这里插入图片描述

在这里插入图片描述
查看其中的MANIFEST.MF和Hello.class发现都是正常的

执行:
在这里插入图片描述

执行成功!

4. 主要遇到的问题

  1. 发现找不到Hello.class但是打包很正常(就是不能使用\\\\而只能使用/作为jar中的文件分隔符)
  2. 写入的时候需要先jos.putNextEntry(jarEntry);然后在write,最后关闭这个entry(class)

以上是关于Java:创建和写入一个jar文件并执行的主要内容,如果未能解决你的问题,请参考以下文章

如何用java把数据写入到excel

如何使用Java创建Excel(.xls 和 .xlsx)文件 并写入数据

springboot创建一个可执行的jar

使用java如何直接往word文件中写入内容最好有详细的介绍和源代码

关闭并重新启动可执行文件后,无法修改或删除由我的 .jar 可执行文件创建的文本文件

大数据开发之词频统计传参打包成jar包发送到Hadoop运行并创建可执行文件方便运行