中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么以編程方式實現JAR文件的創建

發布時間:2022-07-22 11:53:20 來源:億速云 閱讀:131 作者:iii 欄目:開發技術

這篇“Java怎么以編程方式實現JAR文件的創建”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java怎么以編程方式實現JAR文件的創建”文章吧。

Jar文件的解剖

jar文件是ZIP文件格式的擴展,包含了一個清單文件。清單文件是JAR文件專用的特殊文件,可能包含各種設置。其中一些是主類、可選數據(即作者、版本等)和代碼簽名信息。

我們可以使用兼容zip的工具來查看和提取部分或全部存檔。我們還可以包括一個jars或libs子目錄,用于包含依賴性jar。由于jar是zip文件的擴展,我們可以包括任何文件或目錄。

創建一個 JarTool 類

為了簡化創建JAR文件的過程,我們創建了一個單獨的、普通的舊Java對象(POJO)類,它封裝了我們的操作。我們可以將條目放入清單文件,創建JAR文件,添加文件或目錄。

我們還可以創建方法來執行從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文件中。要做到這一點,我們必須首先打開JAR。

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

將文件添加到JAR中

在向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文件的創建”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贡嘎县| 永康市| 万荣县| 鹤峰县| 屏山县| 舒兰市| 丰宁| 涡阳县| 吉隆县| 莱西市| 营口市| 扶绥县| 和田县| 绥棱县| 临朐县| 洞头县| 邵武市| 清新县| 平罗县| 噶尔县| 开远市| 松潘县| 新和县| 塘沽区| 莫力| 新宁县| 大渡口区| 名山县| 射洪县| 册亨县| 云霄县| 东乡族自治县| 祥云县| 雷波县| 吉安县| 哈尔滨市| 凉城县| 兴仁县| 昌黎县| 嘉善县| 定安县|