2012-08-16 36 views
2

我正在使用Apache Maven將產品發佈到Production,並且從現在開始,生成的生成的jar文件沒有附加版本號。我想追加當前的pom.xml版本號(我知道該怎麼做),但是我需要我們的安裝腳本(基本上是帶有額外參數的java -jar命令)來默認訪問最新版本的安裝程序。Bash腳本來運行文件的最新版本?

說我的部署文件被稱爲foo.jar。我的劇本基本上是java -jar foo.jar

相反,我想我的部署目錄包含foo-4.0.0.jarfoo-4.0.1.jarfoo-4.0.2.jar

我想創建一個運行foo的最高版本bash腳本。

我看過按創建日期排序,但我可以立即想到可能無法很好解決的情況。我考慮過修改日期,然後手動輸入我想要安裝的文件,但是這種想法也很糟糕。

很明顯,我需要拆分名稱(可能與正則表達式)並隔離版本號(可能是最後一個短劃線和名稱中的最後一個段的子字符串?),並以某種方式對它們進行排序。排序可能是我最關心的問題......並重新關聯文件。

如果這太複雜了,理論上我可以創建一個Java文件來做到這一點(我的主要語言變得清晰了,是Java?),但理想情況下它只是一個bash腳本。

感謝

+1

你可以做一個'ls -ltr |頭1「,但相反,爲什麼不創建一個部署的軟鏈接呢?該腳本可以只是調用軟鏈接.. – aishwarya 2012-08-16 16:30:15

回答

5

您可以使用sort,指定分離器和設置鍵,例如排序的

$ ls *.jar | sort -t- -k2 -V -r 

將使用版本號(-V)排序的反向罐子(-r)排序,使用-T-從罐子名分離的版本號,並在排序使用-k2(版本號)

在我的測試目錄第二場,我得到:

a-2.2 
a-2.1 
a-2.0 
a-1.50 
a-1.10 
a-1.3.1 
c-1.3.0.1 
a-1.3 
a-1.2.9 
b-1.2.8 
a-1.2 

看起來不錯。

通過head -1管道以上給你最高的條目。

+0

這非常奏效。爲了將它與我的例子結合起來,使用foo.jar,你會想要做'ls foo * .jar | sort -t- -k2 -V -r',如果你想在bash中賦值給一個變量,你可以執行'LATESTVERSION = $(ls foo * .jar | sort -t- -k2 -V -r) ' – 2012-08-16 18:37:34