在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

創(chuàng)建jar文件的過(guò)程

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-08 15:36 ? 次閱讀

在這篇文章中,我們將介紹一下以編程方式創(chuàng)建jar文件的過(guò)程。在編寫(xiě)軟件時(shí),最終我們需要將其部署到生產(chǎn)狀態(tài)。在某些情況下,使用帶有獨(dú)立文件的classpath是可以的。通常情況下,處理一個(gè)文件會(huì)更方便。在Java的情況下,標(biāo)準(zhǔn)的方法是使用JAR、WAR或EAR文件。

基本過(guò)程是編寫(xiě)清單,打開(kāi)jar,添加內(nèi)容,最后保存jar。

Jar文件的解剖

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

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

創(chuàng)建一個(gè) JarTool 類(lèi)

為了簡(jiǎn)化創(chuàng)建JAR文件的過(guò)程,我們創(chuàng)建了一個(gè)單獨(dú)的、普通的舊Java對(duì)象(POJO)類(lèi),它封裝了我們的操作。我們可以將條目放入清單文件,創(chuàng)建JAR文件,添加文件或目錄。

我們還可以創(chuàng)建方法來(lái)執(zhí)行從JAR中刪除,甚至向現(xiàn)有的JAR追加條目,盡管這些操作需要完全讀取和重寫(xiě)JAR。

JAR描述符

為了創(chuàng)建一個(gè)JAR文件,我們必須首先開(kāi)始制定清單。

public class JarTool {    
    private Manifest manifest = new Manifest();

    public void startManifest() {
        manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
    }
}

如果我們希望jar是可執(zhí)行的,我們必須設(shè)置主類(lèi)。

public void setMainClass(String mainFQCN) {
    if (mainFQCN != null && !mainFQCN.equals("")) {
        manifest.getMainAttributes().put(Attributes.Name.MAIN_CLASS, mainFQCN);
    }
}

另外,如果我們想指定額外的屬性,我們可以把它們添加到清單中,比如說(shuō)。

addToManifest("Can-Redefine-Classes", "true");

下面是這個(gè)方法。

public void addToManifest(String key, String value) {
     manifest.getMainAttributes().put(new Attributes.Name(key), value);
}

打開(kāi)JAR文件進(jìn)行編寫(xiě)

隨著清單的完成,我們現(xiàn)在可以把條目寫(xiě)到JAR文件中。要做到這一點(diǎn),我們必須首先打開(kāi)JAR。

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

將文件添加到JAR中

在向JAR中添加文件時(shí),Java使用Solaris風(fēng)格的文件名,使用正斜杠作為分隔符(/)。注意,我們可以添加任何類(lèi)型的文件,包括其他JAR文件或空目錄。這對(duì)于包括依賴(lài)關(guān)系來(lái)說(shuō)真的很方便。

另外,因?yàn)镴AR文件是classpath的一種形式,我們必須指定我們希望在JAR中使用絕對(duì)路徑的哪一部分。對(duì)于我們的目的,根路徑將是我們項(xiàng)目的classpath。

了解了這一點(diǎn),我們現(xiàn)在可以用這個(gè)方法完成我們的JarTool類(lèi)。

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

一個(gè)工作實(shí)例

為了證明可執(zhí)行jar的最低要求,我們將編寫(xiě)一個(gè)應(yīng)用類(lèi),然后看看它是如何工作的。

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") + "srcmainjava",
          System.getProperty("user.dir") + "srcmainjavacomjavanorthcreatejarHelloWorld.class");
        target.close();
    }
}

HelloWorld類(lèi)是一個(gè)非常簡(jiǎn)單的類(lèi),只有一個(gè)main()方法可以打印出文本。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

為了證明它的作用,我們有這個(gè)例子。

$ 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!

在這里,我們已經(jīng)編譯了每個(gè)類(lèi),然后執(zhí)行了Driver類(lèi),這將創(chuàng)建HelloWorld jar。最后,我們執(zhí)行了這個(gè)jar,結(jié)果是打印出了 "Hello World "信息。

上面的命令應(yīng)該從項(xiàng)目所在地執(zhí)行。

總結(jié)

在本教程中,我們看到了如何以編程方式創(chuàng)建一個(gè)jar文件,向其中添加文件,并最終執(zhí)行。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2975

    瀏覽量

    105147
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    5013

    瀏覽量

    88075
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    570

    瀏覽量

    24822
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4827

    瀏覽量

    69052
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    關(guān)于JAVA不能打包成jar包的問(wèn)題

    前幾天在對(duì)JAVA文件打包成jar包時(shí),遇到一些問(wèn)題,至今未能解決,記錄下來(lái),還望大家指教。   在將多個(gè)CLASS文件打包成jar包時(shí),比如我要把放在/mysoft/bin目錄下的類(lèi)
    發(fā)表于 12-09 11:57

    請(qǐng)問(wèn)如何打jar包和運(yùn)行jar包?

    什么:      用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目錄](méi) 文件名 ...
    發(fā)表于 07-05 01:08

    基于vuforia的圖像識(shí)別Jar的使用

    Jar包整合入安卓程序中。首先,新建一個(gè)安卓應(yīng)用程序。將提供的Jar包和so庫(kù)復(fù)制粘貼到程序的libs文件夾中(若無(wú)此文件夾則新建)。然后,在需要調(diào)用圖像識(shí)別Activity的時(shí)候,只
    發(fā)表于 09-20 11:58

    JAR文件包及jar命令詳解

    制作可執(zhí)行的JAR文件包及jar命令詳解常常在網(wǎng)上看到有人詢(xún)問(wèn):如何把 java 程序編譯成 .exe 文件。通常回答只有兩種,一種是制作一個(gè)可執(zhí)行的
    發(fā)表于 07-12 08:37

    jar命令與jar包簡(jiǎn)單介紹

    JAR包是Java中所特有一種壓縮文檔,其實(shí)大家就可以把它理解為.zip包。當(dāng)然也是有區(qū)別的,JAR包中有一個(gè)META-INF\MANIFEST.MF文件,當(dāng)你找成JAR包時(shí),它會(huì)自動(dòng)
    發(fā)表于 07-12 08:37

    基于FPGA的mif文件創(chuàng)建與使用

     mif文件創(chuàng)建與使用是在基于FPGA的系統(tǒng)設(shè)計(jì)中引入ROM的關(guān)鍵環(huán)節(jié)。對(duì)mif文件創(chuàng)建與使用展開(kāi)詳細(xì)討論,給出兩種可行性方法,并引入實(shí)例在MAX+PLUS Ⅱ環(huán)境下做了
    發(fā)表于 12-13 17:47 ?42次下載

    jar與war之間不得不說(shuō)的事

    ava編譯好之后生成class文件,但如果直接發(fā)布這些class文件的話(huà)會(huì)很不方便,所以就把許多的class文件打包成一個(gè)jarjar中除
    的頭像 發(fā)表于 12-12 15:32 ?5236次閱讀
    <b class='flag-5'>jar</b>與war之間不得不說(shuō)的事

    介紹Python中文件創(chuàng)建與寫(xiě)入的基本方法

    Python 文件寫(xiě)入和創(chuàng)建是 Python 開(kāi)發(fā)中必須掌握的技能之一。在本文中,我們將介紹 Python 中文件創(chuàng)建與寫(xiě)入的基本方法
    的頭像 發(fā)表于 04-27 09:22 ?3390次閱讀

    python創(chuàng)建文件對(duì)象

    2.1. 創(chuàng)建文件對(duì)象 **open() 函數(shù)用于創(chuàng)建文件對(duì)象,基本語(yǔ)法格式如下:** open(文件名[,打開(kāi)方式]) 注意: 如果只是文件名,代表在當(dāng)前目錄下的
    的頭像 發(fā)表于 06-21 17:19 ?1627次閱讀
    python<b class='flag-5'>創(chuàng)建文件</b>對(duì)象

    安全存儲(chǔ)文件創(chuàng)建

    安全存儲(chǔ)文件創(chuàng)建 使用安全存儲(chǔ)時(shí)首先需要創(chuàng)建并初始化該安全文件。 如果在創(chuàng)建安全文件之前,/data/tee目錄下沒(méi)有dirf.db
    的頭像 發(fā)表于 11-21 15:02 ?611次閱讀
    安全存儲(chǔ)<b class='flag-5'>文件</b>的<b class='flag-5'>創(chuàng)建</b>

    codeblocks怎么創(chuàng)建c文件

    在 CodeBlocks 中,你可以按照以下步驟創(chuàng)建一個(gè)新的 C 文件: 步驟 1: 打開(kāi) CodeBlocks 首先,你需要打開(kāi) CodeBlocks IDE。你可以在開(kāi)始菜單或快捷方式上找到它
    的頭像 發(fā)表于 11-26 10:21 ?4941次閱讀

    如何創(chuàng)建重疊的封裝文件

    創(chuàng)建重疊的封裝文件是一種常用的軟件設(shè)計(jì)模式,它允許程序員使用多層次的連接和封裝來(lái)保護(hù)數(shù)據(jù)和功能。下面介紹如何創(chuàng)建重疊的封裝文件。 重疊的封裝是一種軟件設(shè)計(jì)模式,可用于
    的頭像 發(fā)表于 01-07 16:51 ?625次閱讀

    e2 studio創(chuàng)建lib文件及使用

    e2 studio創(chuàng)建lib文件及使用
    的頭像 發(fā)表于 01-18 08:06 ?585次閱讀
    e2 studio<b class='flag-5'>創(chuàng)建</b>lib<b class='flag-5'>文件</b>及使用

    實(shí)際上手體驗(yàn)maven面對(duì)沖突Jar包的加載規(guī)則

    一、 問(wèn)題背景 相信大家在日常的開(kāi)發(fā)過(guò)程中都遇到過(guò)Jar包沖突的問(wèn)題,emm,在最近處理業(yè)務(wù)需求時(shí)我也遇到了不同版本jar包沖突導(dǎo)致項(xiàng)目加載出錯(cuò)的問(wèn)題。主要是一個(gè)完整的項(xiàng)目會(huì)不可避免的使用第三方
    的頭像 發(fā)表于 08-08 11:22 ?290次閱讀
    實(shí)際上手體驗(yàn)maven面對(duì)沖突<b class='flag-5'>Jar</b>包的加載規(guī)則

    springboot的項(xiàng)目如何既要用jar包啟動(dòng),同時(shí)還可以為不同的機(jī)房設(shè)置不同的配置文件

    作者:京東科技 李意文 1、首先先把配置文件jar中抽離 示例代碼: ? org.apache.maven.plugins maven-jar-plugin 3.2.0
    的頭像 發(fā)表于 10-19 16:48 ?584次閱讀
    springboot的項(xiàng)目如何既要用<b class='flag-5'>jar</b>包啟動(dòng),同時(shí)還可以為不同的機(jī)房設(shè)置不同的配置<b class='flag-5'>文件</b>
    主站蜘蛛池模板: 在线观看精品国产入口 | 久久亚洲精品国产精品婷婷 | 午夜色婷婷 | 视频在线观看免费网站 | 手机看片1024精品日韩 | yy6080三级理论韩国日本 | 一级a爱片久久毛片 | 免费在线公开视频 | 亚洲综合啪啪 | 亚洲欧美成人在线 | 狠狠摸狠狠操 | 樱桃磁力bt天堂 | 性配久久久 | 给个网站可以在线观看你懂的 | 精品卡一卡二 卡四卡视频 精品噜噜噜噜久久久久久久久 | 久操久操| 乱高h辣黄文np公交车 | 精品毛片视频 | 丁香狠狠色婷婷久久综合 | 久久波多野结衣 | 国产女人伦码一区二区三区不卡 | 天堂网www天堂在线网 | 狠狠色丁香婷婷综合 | 天天干国产 | 久久狠狠躁免费观看 | 免费播放欧美毛片欧美aaaaa | 色噜噜亚洲精品中文字幕 | 黄 色 大 片 网站 | 色优优| 天天干天天摸天天操 | 色又色| 天天cao在线| 一级特级片 | 亚洲国产精品日韩专区avtube | 国产色爽女小说免费看 | 国产精品久久久久久久久免费hd | 手机看片福利久久 | 亚洲最新 | 色妞色综合久久夜夜 | 在线天堂中文 | 久久久久999 |