首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Perl中的属性文件中读取JAR值,然后将其与本地版本进行比较

从Perl中的属性文件中读取JAR值,然后将其与本地版本进行比较
EN

Stack Overflow用户
提问于 2012-11-28 02:48:24
回答 2查看 280关注 0票数 1

用perl做这件事可能有点困难,但我希望有人至少能帮我找到完成这件事的正确方向。

目前我们有一台Nexus服务器,它保存着我们所有的.jar文件。其中一个应用程序需要使用在.properties文件中定义的第三方通用jars。

属性文件如下所示

代码语言:javascript
运行
复制
commons-logging=commons-logging-1.1.1.jar
commons-io=commons-io-2.3.jar
httpcore=httpcore-4.2.1.jar

我被要求创建一个Perl脚本,它将浏览这个属性文件,然后将该版本(即commons-logging-1.1.1.jar)与位于其他地方的版本进行比较。如果属性文件中的版本不同,它会将新的.jar文件复制到公共jar位置。

C:\commons中的一个示例是commons-logging-1.1.0

在属性文件中,指定commons-logging=commons-logging-1.1.1.jar是必需的。然后,perl脚本将读取.properties文件,确定commons-logging-1.1.1与commons文件夹中的commons-logging-1.1.0不同,并将其替换。

我们也可以使用maven来做这样的事情,但我不确定我们如何才能做到这一点,这样开发人员就可以定义属性文件中需要什么jar,并在特定的文件夹中替换它。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-28 03:51:34

很难知道你在这方面有什么问题。也许这个程序会有帮助呢?

代码语言:javascript
运行
复制
use strict;
use warnings;

open my $fh, '<', '.properties' or die $!;

while (<$fh>) {
  if (/^([\w-]+)=\1-([\d.]+)\.jar$/) {
    my ($lib, $ver) = ($1, $2);
    print qq(Library "$lib" needs version $ver\n);
  }
  else {
    warn "Error in .properties line $.: $_";
  }
}

输出

代码语言:javascript
运行
复制
Library "commons-logging" needs version 1.1.1
Library "commons-io" needs version 2.3
Library "httpcore" needs version 4.2.1
票数 1
EN

Stack Overflow用户

发布于 2012-11-29 14:08:12

听起来像是要求您编写一个依赖项管理客户端。

我建议使用Apache ivy,它有一个方便的command-line client

示例

这个常春藤命令:

代码语言:javascript
运行
复制
java -jar ivy.jar -ivy ivy.xml -retrieve "lib/[artifact]-[revision](-[classifier]).[ext]"

创建一个"lib“目录,其中填充了常春藤文件中列出的jars:

代码语言:javascript
运行
复制
├── ivy.xml
└── lib
    ├── commons-io-2.3.jar
    ├── commons-logging-1.1.1.jar
    └── httpcore-4.2.1.jar

这种方法的真正优点是,ivy还将下载传递依赖项。

此外,ivy将缓存之前下载的文件。这意味着只需删除一个旧目录并让ivy创建一个包含jars的新目录会更简单。(而不是费力比较文件)

ivy.xml

代码语言:javascript
运行
复制
<ivy-module version="2.0">
    <info organisation="myorg" module="mymodule" />
    <dependencies>
        <dependency org="commons-logging" name="commons-logging" rev="1.1.1" conf="default"/>
        <dependency org="commons-io" name="commons-io" rev="2.3" conf="default"/>
        <dependency org="org.apache.httpcomponents" name="httpcore" rev="4.2.1" conf="default"/>
    </dependencies>
</ivy-module>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13590995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档