Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行文件最新版本的Bash脚本?_Java_Regex_Bash_Maven - Fatal编程技术网

Java 运行文件最新版本的Bash脚本?

Java 运行文件最新版本的Bash脚本?,java,regex,bash,maven,Java,Regex,Bash,Maven,我正在使用ApacheMaven将我们的产品发布到生产环境中,到目前为止,创建的结果jar文件没有附加版本号。我想附加当前的pom.xml版本号(我知道怎么做),但是我需要我们的安装程序脚本(基本上是一个带有额外参数的java-jar命令)来默认访问安装程序的最新版本 假设我的部署文件名为foo.jar。我的脚本基本上是java-jarfoo.jar 相反,我希望我的部署目录包含foo-4.0.0.jar,foo-4.0.1.jar,foo-4.0.2.jar,等等 我想创建一个运行最高版本fo

我正在使用ApacheMaven将我们的产品发布到生产环境中,到目前为止,创建的结果jar文件没有附加版本号。我想附加当前的pom.xml版本号(我知道怎么做),但是我需要我们的安装程序脚本(基本上是一个带有额外参数的java-jar命令)来默认访问安装程序的最新版本

假设我的部署文件名为
foo.jar
。我的脚本基本上是
java-jarfoo.jar

相反,我希望我的部署目录包含
foo-4.0.0.jar
foo-4.0.1.jar
foo-4.0.2.jar
,等等

我想创建一个运行最高版本foo的bash脚本

我已经研究过按创建日期排序,但我可以立即想到可能效果不太好的场景。我曾考虑过在修改日期之前进行修改,然后手动触摸我想安装的文件,但这种想法也有点糟糕

显然,我需要拆分名称(可能使用正则表达式)并分离版本号(可能是名称中最后一个破折号和最后一个句点的子字符串?)并以某种方式对它们进行排序。排序可能是我最关心的…那就是重新关联文件

如果这太复杂,理论上我可以制作一个Java文件来实现这一点(我的主要语言是Java吗?),但理想情况下,它只是一个bash脚本

谢谢,您可以使用,指定要排序的分隔符和键集,例如

$ ls *.jar | sort -t- -k2 -V -r
将使用版本号(-V)排序,使用-t-将版本号与jar名称分离,并使用-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
传递给您,以获得最重要的条目。

您可以做一个
ls-ltr | head-1
,但为什么不在部署时创建一个软链接呢?然后脚本就可以调用软链接了..效果非常好。为了将其与我的示例联系起来,使用foo.jar,您需要执行
ls foo*.jar | sort-t--k2-V-r
,如果您想在bash中为变量赋值,您需要执行
LATESTVERSION=$(ls foo*.jar | sort-t--k2-V-r)