Eclipse將引用了第三方jar包的Java項目打包成jar文件的兩種方法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

方案一:用Eclipse自帶的Export功能

步驟1:準備主清單文件 “MANIFEST.MF”,

由于是打包引用了第三方jar包的Java項目,故需要自定義配置文件MANIFEST.MF,在該項目下建立文件MANIFEST.MF,內容如下:

Manifest-Version: 1.0
Class-Path: lib/commons-codec.jar lib/commons-httpclient-3.1.jar lib/commons-logging-1.1.jar lib/log4j-1.2.16.jar lib/jackson-all-1.8.5.jar
Main-Class: main.KillCheatFans

第一行是MAINIFEST的版本,第二行Class-Path就指定了外來jar包的位置,第三行指定我們要執行的MAIN java文件。

這里要注意幾點:

復制代碼
1、Class-Path: 和Main-Class: 后邊都有一個空格,必須加上,否則會打包失敗,錯誤提示為:Invalid header field;2、假設我們的項目打包后為KillCheatFans.jar,那么按照上面的定義,應該在 KillCheatFans.jar的同層目錄下建立一個lib文件夾(即lib文件和打包的jar文件
在同一個目錄下),并將相關的jar包放在里面。否則將會出現“Exception in thread "main" java.lang.NoClassDefFoundError”的錯誤;3、Main-Class后面是類的全地址,比如你的主文件是KillCheatFans.java,文件里打包為package com.main; 那么這里就寫com.main.KillCheatFans,
不要加.java后綴,主文件地址寫錯將會出現“找不到或無法加載主類”的錯誤;4、寫完Main-Class后一定要回車(即最后一行是空白行),讓光標到下一行,這樣你生成的jar包才能找到你的主class去運行,否則將會出現“jar中沒有主清單屬性”的錯誤。
復制代碼

?

步驟2:右擊Java工程選擇Export—>選擇JAR file—>Next

?

?

步驟3:選擇要打包的文件,不需要的文件不必打包,減小打包后的jar文件大小,并進行選項配置如下

?

這里有幾個選項:

* Export generated class files and resources 表示只導出生成的.class文件和其他資源文件
* Export all output folders for checked projects 表示導出選中項目的所有文件夾
* Export java source file and resouces 表示導出的jar包中將包含你的源代碼*.java,如果你不想泄漏源代碼,那么就不要選這項了
* Export refactorings for checked projects 把一些重構的信息文件也包含進去

?

步驟4:選擇我們在第一步中自定義的配置文件路徑,這一步很重要,不能采用默認選項

?

?

這里解釋一下配置項:

* Generate the manifest file:是系統幫我們自動生成MANIFEST.MF文件,如果你的項目沒有引用其他class-path,那可以選擇這一項。
* Use existing mainfest from workspace:這是可以選擇我們自定義的.MF文件,格式如上所寫,引用了第三方包時選用。
* Seal content:要封裝整個jar或者指定的包packet。
* Main class:這里可以選擇你的程序入口,將來打包出來的jar就是你這個入口類的執行結果。

?

最后Finish,即生成了我們要的jar文件。

?

運行該jar文件有兩種方式:

1. 在命令行下運行命令java -jar 你的jar文件名稱,比如我的執行如下:

?

如果在jar中有一些System.out.prinln語句(如上執行結果),運行后不想在控制臺輸出而是保存在文件中方便以后查看,可以用一下命令:
java -jar KillCheatFans.jar > log.txt (這時命令行窗口不會有任何輸出)
輸出信息會被打印到log.txt中,當然log.txt自動生成,并位于和KillCheatFans.jar一個目錄中。

?

2. 新建一個批處理文件,如start.bat,內容為:java -jar KillCheatFans.jar,放在jar文件同一目錄下即可,以后點擊自動運行即可,更加方便。

?

方案二:安裝Eclipse打包插件Fat Jar

???? 方案一對于含有較多第三方jar文件或含有第三方圖片資源等就顯得不合適,太繁瑣。這時可以使用一個打包的插件—Fat Jar。

???? Fat Jar Eclipse Plug-In是一個可以將Eclipse Java Project的所有資源打包進一個可執行jar文件的小工具,可以方便的完成各種打包任務,我們經常會來打jar包,但是eclipse自帶的打包jar似乎不太夠用,Fat Jar是eclipse的一個插件,特別是Fat Jar可以打成可執行Jar包,并且在圖片等其他資源、引用外包方面使用起來更方便。


安裝方法:

1. Eclipse在線更新方法
Help > Install New Software > Add,
name:Fat Jar
location:http://kurucz-grafika.de/fatjar

2. Eclipse插件手動安裝方法
下載地址:http://downloads.sourceforge.net/fjep/net.sf.fjep.fatjar_0.0.27.zip?modtime=1195824818&big_mirror=0
將解壓出的plugins中的文件復制到eclipse安裝目錄中的plugins目錄下,然后重啟eclipse即可。

使用方法:

步驟1:右擊工程項目選擇Buile Fat Jar

?

?

步驟2:配置jar文件存放目錄,主Main文件等,如下圖

?

?

步驟3:選擇所要用到的第三方jar包

?

?

最后Finish,即生成了我們要的jar文件,十分方便。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451074.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451074.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux-MySQL基本命令-SQL語句

服務端命令SQL 在數據庫系統中,SQL語句不區分大小寫(建議用大寫) ?SQL語句可單行或多行書寫,以“;”結尾 ?關鍵詞不能跨多行或簡寫 ?用空格和縮進來提高語句的可讀性 ?子句通常位于獨立行,便于編輯,提高可讀性 ?注釋&#x…

webAPI token驗證

ASP.NET WebApi 實現Token驗證 https://www.cnblogs.com/dukang1991/p/5627584.html轉載于:https://www.cnblogs.com/KQNLL/p/9757025.html

評論:中國企業向Faceook學習什么

摘要:古人云:“迨天之未陰雨,徹彼桑土,綢繆牖戶。且不論究竟誰會成為中國的Facebook,伴隨著Facebook因上市帶來的又一輪火熱,不妨先來看看中國企業最需要向Facebook學習什么。古人云:“迨天之未…

java ++i、i++、i++ + ++i、i++ + i++原理

先上代碼: public static void main(String args[]) {int A 1;int B 10;int C 100;int D 1000;System.out.println(A);System.out.println(B);System.out.println(C C);System.out.println(C);System.out.println(D D);System.out.println(D);} 在來運行結果…

一個判斷session是否過期的小技巧

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Session一直是我們做web項目經常使用的,以前沒太注意,這次又細致的看了下! 1.session其實就是一個Ma…

擴展方法

擴展方法是寫在靜態類中,且方法是靜態方法。 不限制參數的數量。 不限制返回類型。 不限制可使用擴展方法的類型。 和普通方法編寫相似,唯一不同的是每一個擴展方法都必須有一個固定的參數。statc void Method( this DataType name&#xff0…

cpu執行命令方式

(一)有序處理器 早期的處理器為有序處理器(In-order processors),有序處理器處理指令通常有以下幾步: 指令獲取如果指令的輸入操作對象(input operands)可用(例如已經在寄存器中了&#xff09…

jQuery基礎-事件

只能添加一個處理函數,后面的會覆蓋前面 會有兼容性差異 冒泡 會依次檢查父元素 截獲冒泡 或者 最大的缺陷 并且在IE和NetSpace里面分別為冒泡和捕獲兩種 多個處理函數 依次執行 捕獲--->自己--->冒泡 true 只捕獲,不冒泡 false 只冒泡 從父元素的…

別的AI還在打游戲,這個AI已經當上“超級馬里奧”游戲策劃了|GECCO最佳論文

AI打游戲已經不是什么新鮮事了,“沉迷”Dota 2、星際爭霸、LOL的AI一個接一個的出現。 但是你也許不知道,相比這些“游戲玩家”AI,還有一位優秀的AI,直接當起了“游戲策劃”,做的還是膾炙人口的“超級馬里奧”。 &…

單點登錄的三種實現方式

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 單點登錄SSO(Single Sign On)說得簡單點就是在一個多系統共存的環境下,用戶在一處登錄后,…

快速判斷數組中每個對象同一屬性值是否相同

做批量查詢的時候,要確定數組中的多個對象下的字符串是否能全部匹配,這時需要在匹配的名稱對象中通過字段記錄該名稱是否匹配。 const search [ { name: B, isExistence: false },{ name: C, isExistence: false } ]; 這時要確定 search 是否全部匹配上…

java對象占用內存大小?

一個不包含任何內部成員變量的空Object大約占33byte,若增加成員變量,則增加相應大小的內存占用。 測算方式:設置jvm的堆大小為1m,在堆中不停new不含任何成員變量的OOMObject對象,直到堆內存溢出。如下圖,在…

Java程序員面試中的多線程問題

很多核心Java面試題來源于多線程(Multi-Threading)和集合框架(Collections Framework),理解核心線程概念時,嫻熟的實際經驗是必需的。這篇文章收集了 Java 線程方面一些典型的問題,這些問題經常被高級工程師所問到。 0.Java 中多線程同步是什…

SpringBoot2使用WebFlux函數式編程

本文只是簡單使用SpringBoot2使用WebFlux的函數式編程簡單使用,后續會繼續寫關于Webflux相關的文章。 最近一直在研究WebFlux,后續會陸續出一些相關的文章。 首先看一下Srping官網上的一張圖,對比一下SpringMvc和Spring WebFlux,如…

單點登錄原理與簡單實現

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、單系統登錄機制 1、http無狀態協議 web應用采用browser/server架構,http作為通信協議。http是無狀態協議,瀏…

java接口類支持多繼承

一個類只能extends一個父類,只能有一個父類,但可以implements多個接口。java通過使用接口的概念來取代C中多繼承。與此同時,一個接口則可以同時extends多個接口,卻不能implements任何接口。Java中的接口是支持多繼承的。

xmind-HTTP協議

轉載于:https://www.cnblogs.com/margot921/p/9764788.html

彈性布局

彈性布局 一、Flex布局是什么? Flex是Flexible Box的縮寫,意為”彈性布局”,用來為盒狀模型提供最大的靈活性。任何一個容器都可以指定為Flex布局。 二、基本概念 采用Flex布局的元素,稱為Flex容器(flex container&…

Java-Type簡單分類

&#xff08;1&#xff09;ParameterizedType&#xff1a; 參數化類型&#xff0c;例如List<T>。 &#xff08;2&#xff09;GenericArrayType&#xff1a; 泛型數組類型&#xff0c;例如T[]。 &#xff08;3&#xff09;TypeVariable&#xff1a; 泛型的類型變量&a…

解決dataTable 報錯:cannot read property “style“ of undefined

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 其實這錯&#xff0c;我之前也遇到過&#xff0c;只是太久了&#xff0c;沒有記錄下來&#xff0c; 今天看到群里朋友也遇到這個錯誤&a…