拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 以编程方式创建 JAR 文件

以编程方式创建 JAR 文件

白鹭 - 2022-07-05 2171 0 2

一、简介

在简短的这篇文章中,以编程方式创建创建文件的过程。在编写软件时,最终我们需要在将其放置到生产状态的情况下,可以使用各种文件的类路径。通常操作,处理文件的方法是更方便。对于 Java,执行此文件的标准使用 JAR、WAR 或 EAR。

内容基本流程是写manifest,打开jar,添加,最后关闭jar。

2.罐子文件剖析

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

我们可能会使用与 zipRar 的工具()来查看和提取部分或全部文件。我们目录还可以包含一个文件或库。或目录。

3. 创建一个JarTool

为了创建对象的 JAR 过程,我们创建了一个普通的 Java(POJO),来创建我们的文件,我们可能将包含一个旧目录的操作文件,或文件或文件。

我们还可以创建方法来从 JAR 中执行删除,甚至将附件附加到现有的 JAR 中,尽管这些操作需要完全运行和运行 JAR。

3.1。 JAR 清单

为了创建 JAR 文件,我们必须首先开始清单:

public class JarTool {
 private Manifest manifest = new Manifest();
 public void startManifest() {
 manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
 }
 }

如果希望罐子是主程序的,我们必须设置类:

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);
 }

3.2.打开JAR进行写作

清单完成后,我们现在可以将文件写入 JAR 文件。

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

3.3.将文件添加到Jar

将文件添加到 JAR 时,Java 使用 Solaris 添加依赖样式的名称使用正斜字体作为空白目录,请注意,我们可以使用任何类型的任何文件,包括其他 JAR 文件或或用于包含此样式项非常方便。

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

了解了这一点,我们现在可以用这个完成我们的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();
 }

4. 一个工作示例

争取工作样片是罐子里的最低要求,我们将写一个应用程序,然后看看它是如何的:

public class Driver {
 public static void main(String[] args) throws IOException {
 JarTool tool = new JarTool();
 tool.startManifest();
 tool.addToManifest("Main-Class", "com.baeldung.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\\baeldung\\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/baeldung/createjar/HelloWorld.java
 $ javac -cp src/main/java src/main/java/com/baeldung/createjar/JarTool.java
 $ javac -cp src/main/java src/main/java/com/baeldung/createjar/Driver.java
 $ java -cp src/main/java com/baeldung/createjar/Driver
 $ java -jar HelloWorld.jar
 Hello World!

在这里打印,我们编写了各种类,然后执行Driver类,创建HelloWorldjar。最后,我们执行了jar,这会导致“Hello World”消息。

上面的命令应该从项目位置执行。

5. 落幕

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


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *