將nutch源代碼進行修改後,將項目和第三方jar包打成一個總體ar包的方法和感悟

打jar包的思路,參照上一篇資料Eclipse將引用了第三方jar包的Java項目打包成jar文件的兩種方法html

之因此再作筆記是由於:我在打好jar包後,在Linux下運行
java

[root@nutch-five test]# java -jar crawl-test.jar apache

報錯信息爲:windows

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/util/Tooloop

意思就是說:咱們的第三方jar包並未起做用spa

最開始,一直覺得是打包的方法有誤。翻來覆去折騰了好幾個小時。最終老大提了另外一種思路,他以爲用ant打包可能會容易一些。可是,在網上找了些資料看了一下,發現挺麻煩的。最終沒有作這種方法。.net

繼續查錯,我也懷疑過是否是hadoop jar包的問題,我認爲多是hadoop-core.jar下的META-INF文件下內容程序找不到。事實上,也不是這個緣由,上邊的想法都只是猜想而已。hadoop-core.jar的結構和其餘第三方jar包的結構徹底一致。code

沒辦法,最後不知道怎麼腦殼一抽~纔想到怎麼不在windows下的dos中測一下。這一次,發現打的jar包是能夠運行的。htm

到了這兒,老大問我,爲何在Linux下不行,在Windows下能夠?其實,當時一高興,我也沒思考過這個問題:所打的jar包,爲何在windows下能夠運行成功,可是在Linux下卻不能夠。blog

老大提了思路,他說:會不會是,路徑的問題。由於windows下的路徑分隔符和Linux下的路徑分隔符有區別。我恍然~~這種可能性很是大!!!

我每次對於windows和Linux的路徑、轉義字符等一系列的區別老是傻傻分不清楚。雖然知道它們有區別,可是每次都記不住。致使,每次在遇到這些問題時,都會浪費大量的時間作無用功~~~~

此次的感觸是:

一、要堅持,有時候但願就在你絕望到將要放棄的時候出現。

二、思惟要活躍,想問題不要侷限在很小的框子內,天馬行空最好。有時候,看似不相關的兩個事情,當你換一種思路來看時,它正好能解決你的問題。

三、要不斷地回顧。回顧以前的想法,回顧以前的作法,看看本身疏忽了哪些關鍵點。有時候思路和方向都沒有錯,錯就錯在細節上。可本身還糾結的認爲,或許思路和方向都錯得太遠了。

四、遇到問題了,不能僅僅是解決問題,並且要知道爲何。想明白,而後下次注意。

結合前輩們的相關資料:

多項目相互依賴的Java程序打包並引入外部Jar包方式

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

簡單jar打包示例 合併第三方jar包打包操做

下面列出詳細的打包過程:

一、在咱們所須要打包的項目下新建文件夾META-INF。個人項目名稱爲nutch源代碼的項目名稱branch-1.7

二、META-INF下新建文件MANIFEST.MF。文件內容相似:

Manifest-Version: 1.0 
Main-Class: com.pacong.convert.auto.propertes.ConvertAutoProperties 
Class-Path: lib/xxx.jar lib/yyy.jar lib/zzz.jar
相關文章
相關標籤/搜索