当前位置: 首页 > 科技观察

Java以编程方式创建JAR文件

时间:2023-03-12 04:40:41 科技观察

大家好,我是北军。在本文中,我们将介绍以编程方式创建jar文件的过程。在编写软件时,最终我们需要将其部署到生产环境中。在某些情况下,使用带有单独文件的类路径很好。通常使用一个文件更方便。对于Java,标准方法是使用JAR、WAR或EAR文件。基本流程是编写manifest,打开jar,添加内容,最后保存jar。Jar文件剖析jar文件是包含清单文件的ZIP文件格式的扩展。清单文件是特定于JAR文件的特殊文件,可能包含各种设置。其中一些是主类、可选数据(即作者、版本等)和代码签名信息。我们可以使用zip兼容工具来查看和提取部分或全部档案。我们还可以包括一个jars或libs子目录来包含依赖的jar。由于jar是zip文件的扩展,我们可以包含任何文件或目录。创建JarTool类为了简化创建JAR文件的过程,我们创建了一个单一的普通旧Java对象(POJO)类来封装我们的操作。我们可以将条目放入清单文件、创建JAR文件、添加文件或目录。我们还可以创建方法来执行从JAR中删除,甚至将条目附加到现有JAR,尽管这些操作需要完全读取和重写JAR。JAR描述符为了创建JAR文件,我们必须首先指定清单。publicclassJarTool{privateManifestmanifest=newManifest();publicvoidstartManifest(){manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION,"1.0");}}如果我们希望jar是可执行的,我们必须设置主类。publicvoidsetMainClass(StringmainFQCN){if(mainFQCN!=null&&!mainFQCN.equals("")){manifest.getMainAttributes().put(Attributes.Name.MAIN_CLASS,mainFQCN);此外,如果我们想指定其他属性,我们可以将它们添加到清单中,例如。addToManifest("可以重新定义类","true");这是方法。publicvoidaddToManifest(Stringkey,Stringvalue){manifest.getMainAttributes().put(newAttributes.Name(key),value);}打开JAR文件进行写入清单完成后,我们现在可以将条目写入文件中的JAR。为此,我们必须首先打开JAR。publicJarOutputStreamopenJar(StringjarFile)throwsIOException{returnnewJarOutputStream(newFileOutputStream(jarFile),manifest);}将文件添加到JARJava在将文件添加到JAR时使用Solaris样式的文件名,使用正斜杠作为分隔符(/).请注意,我们可以添加任何类型的文件,包括其他JAR文件或空目录。这对于包含依赖项非常方便。另外,因为JAR文件是类路径的一种形式,所以我们必须指定要在JAR中使用绝对路径的哪一部分。出于我们的目的,根路径将是我们项目的类路径。知道了这一点,我们现在可以用这个方法完成我们的JarTool类。publicvoidaddFile(JarOutputStreamtarget,StringrootPath,Stringsource)throwsFileNotFoundException,IOException{Stringremaining="";如果(rootPath.endsWith(File.separator)){剩余=source.substring(rootPath.length());}else{remaining=source.substring(rootPath.length()+1);}字符串名称=remaining.replace("\\","/");JarEntry条目=newJarEntry(名称);entry.setTime(newFile(source).lastModified());target.putNextEntry(入口);BufferedInputStreamin=newBufferedInputStream(newFileInputStream(source));字节[]缓冲区=新字节[1024];while(true){intcount=in.read(buffer);如果(计数==-1){中断;}target.write(buffer,0,count);}target.closeEntry();in.close();}证明可执行jar的工作示例至少,我们将编写一个应用程序类并查看它是如何工作的。publicclassDriver{publicstaticvoidmain(String[]args)throwsIOException{JarTooltool=newJarTool();tool.startManifest();tool.addToManifest("主类","com.javanorth.createjar.HelloWorld");JarOutputStreamtarget=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()方法。公共类HelloWorld{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");}}为了证明它有效,我们有这个例子。$javac-cpsrc/main/javasrc/main/java/com/javanorth/createjar/HelloWorld.java$javac-cpsrc/main/javasrc/main/java/com/javanorth/createjar/JarTool.java$javac-cpsrc/main/javasrc/main/java/com/javanorth/createjar/Driver.java$java-cpsrc/main/javacom/javanorth/createjar/Driver$java-jarHelloWorld.jarHelloWorld!在这里,我们编译了每个类,然后执行了将创建HelloWorldjar的Driver类。最后,我们执行了jar,结果打印了“HelloWorld”消息。上面的命令应该从项目位置执行。总结在本教程中,我们了解了如何以编程方式创建jar文件、向其中添加文件并最终执行它。