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

PS:
這種方式費時費力,需要在不同的窗體間進(jìn)行切換。例如我現(xiàn)在就在Eclipse、WinRaR和Windows資源管理器間切換。
解決過程
如何避免這個過程呢,盡量不用人來參與其中。這個肯定就是讓一個小程序來把這幾個動作連接起來。而且還要能夠方便變動。比如我現(xiàn)在不想往a.jar
里面copy了。我想向b.jar
中復(fù)制了。所以就想到了腳本。對讓腳本來完成這樣的事情。第一反應(yīng)想到的是ant
Ant 我的主角
Ant
是
何須人,就不用我多說了。其實我了解也不多,只是知道這個小螞蟻蠻力超大。下面就著手解決問題。第一反應(yīng)就是找到一個直接copy的任務(wù),把
fileset中的文件復(fù)制到j(luò)ar文件中。但是遺憾的是我沒有能夠找到這樣一個Task.這個時候我的思維陷入了困境。下面該怎么辦?
困境
沒有現(xiàn)成的東西,沒有現(xiàn)成的能一步完成的東西?如何是好?
我是程序員,所以我我自己可以寫一個task來滿足這樣的需求啊。對啊,我可以自己寫的!正當(dāng)我為這個想法興奮不已時,正卷起袖子準(zhǔn)備“大干”的時候。突然想起某人說過 不要重新造輪子!
。所以就追問了我自己一句:拐
角處會有什么呢?
我的拐角
既然Ant有蠻力,我可否利用一下他的蠻力呢?通過如下的這么一個流程來達(dá)到我的目的。

這里用了一個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)整的過程
看上去,所有問題都解決了。但是偏偏在使用的時候遇到了小問題。我的jar包是要在osgi環(huán)境下工作的。所以特別依賴MANIFEST.MF文件。偏偏jar
這個任務(wù)默認(rèn)情況下會生成一個默認(rèn)的MANIFEST.MF文件。如果任由他胡來的話,就全蝦米了。所以要稍微調(diào)整一下。
<jar update="true"
destfile="c:/${contain_plugin}"
basedir="${temp_dir}"
manifest="${temp_dir}/META-INF/MANIFEST.MF">
</jar>
<jar update="true"
destfile="c:/${contain_plugin}"
basedir="${temp_dir}"
manifest="${temp_dir}/META-INF/MANIFEST.MF">
</jar>
這樣就可以了。大功告成!!