您好,登錄后才能下訂單哦!
這篇“Java怎么以編程方式實現JAR文件的創建”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java怎么以編程方式實現JAR文件的創建”文章吧。
jar文件是ZIP文件格式的擴展,包含了一個清單文件。清單文件是JAR文件專用的特殊文件,可能包含各種設置。其中一些是主類、可選數據(即作者、版本等)和代碼簽名信息。
我們可以使用兼容zip的工具來查看和提取部分或全部存檔。我們還可以包括一個jars或libs子目錄,用于包含依賴性jar。由于jar是zip文件的擴展,我們可以包括任何文件或目錄。
為了簡化創建JAR文件的過程,我們創建了一個單獨的、普通的舊Java對象(POJO)類,它封裝了我們的操作。我們可以將條目放入清單文件,創建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。
public JarOutputStream openJar(String jarFile) throws IOException { return new JarOutputStream(new FileOutputStream(jarFile), manifest); }
在向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 "信息。
上面的命令應該從項目所在地執行。
以上就是關于“Java怎么以編程方式實現JAR文件的創建”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。