BAEL-5632 add jar example

This commit is contained in:
Loredana Crusoveanu 2022-06-22 13:45:36 +03:00
parent 1199ce0b12
commit a746e8119d
3 changed files with 95 additions and 0 deletions

View File

@ -0,0 +1,19 @@
package com.baeldung.createjar;
import java.io.File;
import java.io.IOException;
import java.util.jar.*;
import com.baeldung.createjar.JarTool;
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();
}
}

View File

@ -0,0 +1,7 @@
package com.baeldung.createjar;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

View File

@ -0,0 +1,69 @@
package com.baeldung.createjar;
import java.io.*;
import java.util.jar.*;
public class JarTool {
private Manifest manifest = new Manifest();
public void addToManifest(String key, String value) {
manifest.getMainAttributes()
.put(new Attributes.Name(key), value);
}
public void addDirectoryEntry(JarOutputStream target, String parentPath, File dir) throws IOException {
String remaining = "";
if (parentPath.endsWith(File.separator))
remaining = dir.getAbsolutePath()
.substring(parentPath.length());
else
remaining = dir.getAbsolutePath()
.substring(parentPath.length() + 1);
String name = remaining.replace("\\", "/");
if (!name.endsWith("/"))
name += "/";
JarEntry entry = new JarEntry(name);
entry.setTime(dir.lastModified());
target.putNextEntry(entry);
target.closeEntry();
}
public void addFile(JarOutputStream target, String rootPath, String source) throws IOException {
BufferedInputStream in = null;
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);
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();
}
public JarOutputStream openJar(String jarFile) throws IOException {
JarOutputStream target = new JarOutputStream(new FileOutputStream(jarFile), manifest);
return target;
}
public void setMainClass(String mainFQCN) {
if (mainFQCN != null && !mainFQCN.equals(""))
manifest.getMainAttributes()
.put(Attributes.Name.MAIN_CLASS, mainFQCN);
}
public void startManifest() {
manifest.getMainAttributes()
.put(Attributes.Name.MANIFEST_VERSION, "1.0");
}
}