邋遢居

          我的Java天堂

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

          問(wèn)題

          這兩天在寫一個(gè)小東西。這個(gè)小東西是一個(gè)大東西的一部分。其實(shí)也就是其中的一兩個(gè)類。而這個(gè)大東西需要部署到一個(gè)特定的環(huán)境中去運(yùn)行。所以有一堆的限制條 件,比如什么配置文件啊,包名,版本之類的什么東西。稍微有點(diǎn)差錯(cuò)就沒(méi)有辦法運(yùn)行。需要正確得到這些東西需要一個(gè)很龐大且冗長(zhǎng)的構(gòu)建過(guò)程。而我寫的也就是 兩三個(gè)類,所以最直接的方式就是把我寫的java 文件編譯或的class 文件直接復(fù)制到j(luò)ar文件中。 完成這樣工作有好幾中方式,最直接的方式就是純手工打造


          GraphViz image

          PS: 這種方式費(fèi)時(shí)費(fèi)力,需要在不同的窗體間進(jìn)行切換。例如我現(xiàn)在就在Eclipse、WinRaR和Windows資源管理器間切換。

          解決過(guò)程

          如何避免這個(gè)過(guò)程呢,盡量不用人來(lái)參與其中。這個(gè)肯定就是讓一個(gè)小程序來(lái)把這幾個(gè)動(dòng)作連接起來(lái)。而且還要能夠方便變動(dòng)。比如我現(xiàn)在不想往a.jar 里面copy了。我想向b.jar 中復(fù)制了。所以就想到了腳本。對(duì)讓腳本來(lái)完成這樣的事情。第一反應(yīng)想到的是ant

          Ant 我的主角

            Ant 是 何須人,就不用我多說(shuō)了。其實(shí)我了解也不多,只是知道這個(gè)小螞蟻蠻力超大。下面就著手解決問(wèn)題。第一反應(yīng)就是找到一個(gè)直接copy的任務(wù),把 fileset中的文件復(fù)制到j(luò)ar文件中。但是遺憾的是我沒(méi)有能夠找到這樣一個(gè)Task.這個(gè)時(shí)候我的思維陷入了困境。下面該怎么辦?

          困境

          沒(méi)有現(xiàn)成的東西,沒(méi)有現(xiàn)成的能一步完成的東西?如何是好? 我是程序員,所以我我自己可以寫一個(gè)task來(lái)滿足這樣的需求啊。對(duì)啊,我可以自己寫的!正當(dāng)我為這個(gè)想法興奮不已時(shí),正卷起袖子準(zhǔn)備“大干”的時(shí)候。突然想起某人說(shuō)過(guò) 不要重新造輪子! 。所以就追問(wèn)了我自己一句: 角處會(huì)有什么呢?

          我的拐角

          既然Ant有蠻力,我可否利用一下他的蠻力呢?通過(guò)如下的這么一個(gè)流程來(lái)達(dá)到我的目的。


          GraphViz image

          這里用了一個(gè)temp文件夾作為中轉(zhuǎn),先解壓,copy需要的文件,最后jar一下獲得最后的更新好的jar。 最終獲得了如下的build.xml

          <target name="prepare">
                          
          <mkdir dir="${temp_dir}"/>
                  
          </target>
                  
                  
          <target name="build" depends="prepare">
                          
          <echo message="unzip">Uzip Jar file</echo>
                          
          <unjar dest="${temp_dir}" src="${comp_plugin}/${contain_plugin}">
                          
          </unjar>
                          
          <copy todir="${temp_dir}">
                                  
          <fileset dir="./bin">
                                          
                                  
          </fileset>
                          
          </copy>
                          
          <jar update="true"
                                  destfile
          ="c:/${contain_plugin}" 
                                  basedir
          ="${temp_dir}" >
                          
          </jar>
                  
          </target>
            

          調(diào)整的過(guò)程

          看上去,所有問(wèn)題都解決了。但是偏偏在使用的時(shí)候遇到了小問(wèn)題。我的jar包是要在osgi環(huán)境下工作的。所以特別依賴MANIFEST.MF文件。偏偏jar 這個(gè)任務(wù)默認(rèn)情況下會(huì)生成一個(gè)默認(rèn)的MANIFEST.MF文件。如果任由他胡來(lái)的話,就全蝦米了。所以要稍微調(diào)整一下。


          <jar update="true"
                                  destfile
          ="c:/${contain_plugin}" 
                                  basedir
          ="${temp_dir}" 
                                  manifest
          ="${temp_dir}/META-INF/MANIFEST.MF">
          </jar>
           

          這樣就可以了。大功告成!!

          posted on 2009-11-26 18:07 Jet Geng 閱讀(2451) 評(píng)論(3)  編輯  收藏 所屬分類: 生活點(diǎn)滴

          Feedback

          # re: 復(fù)制文件到已存在的Jar[未登錄](méi) 2009-11-26 21:01 小毅
          直接用winrar打開(kāi)jar文件,把要復(fù)制的文件直接拖到里面去就可以了 沒(méi)必要那么麻煩  回復(fù)  更多評(píng)論
            

          # re: 復(fù)制文件到已存在的Jar 2009-11-27 12:32 Jet Geng
          @小毅
          是的,你說(shuō)的這種方式是最直接的。但是如果我后續(xù)的還需要把這個(gè)文件copy到另外一個(gè)地方,在去啟動(dòng)一個(gè)中間件服務(wù),再對(duì)這個(gè)中間服務(wù)進(jìn)行一堆操作的時(shí)候。在多個(gè)窗體之間切換,文件選擇錯(cuò)誤,目錄考錯(cuò)等問(wèn)題還是有的。
          加入我所有東西都是通過(guò)ant來(lái)做。就會(huì)好很多了。  回復(fù)  更多評(píng)論
            

          # re: 復(fù)制文件到已存在的Jar 2010-01-18 15:33 MiaUI
          Thank you for the smashing topic referring to this good topic. I could not determine such kind of thesis proposal online and wanted to purchase the <a href="http://www.topthesis.com">thesis</a>. Thus, I really have a required material at this time.   回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 永登县| 方城县| 蛟河市| 阳曲县| 资源县| 容城县| 绥滨县| 长岛县| 济宁市| 清新县| 广丰县| 漳州市| 乌拉特中旗| 江油市| 沈丘县| 洪洞县| 竹北市| 普安县| 惠东县| 郸城县| 五寨县| 河津市| 唐河县| 得荣县| 当雄县| 中西区| 临武县| 门源| 天门市| 玉树县| 阿合奇县| 赣州市| 布拖县| 清水县| 昆山市| 垫江县| 徐水县| 车险| 科技| 平安县| 天门市|