2012-08-16 38 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