1

用 perl 做这可能有点太难了,但我希望有人至少可以帮助我找到正确的方向来完成这个。

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

属性文件如下所示

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 并将其替换到特定文件夹中。

任何帮助将不胜感激。

4

2 回答 2

1

很难知道您对此有什么问题。也许这个程序会有所帮助?

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 $.: $_";
  }
}

输出

Library "commons-logging" needs version 1.1.1
Library "commons-io" needs version 2.3
Library "httpcore" needs version 4.2.1
于 2012-11-27T19:51:33.513 回答
0

听起来你被要求编写一个依赖管理客户端。

我建议使用 Apache ivy,它有一个方便的命令行客户端

例子

这个常春藤命令:

java -jar ivy.jar -ivy ivy.xml -retrieve "lib/[artifact]-[revision](-[classifier]).[ext]"

创建一个“lib”目录,其中包含 ivy 文件中列出的 jars:

├── ivy.xml
└── lib
    ├── commons-io-2.3.jar
    ├── commons-logging-1.1.1.jar
    └── httpcore-4.2.1.jar

这种方法的真正优势在于 ivy 还将下载传递依赖项。

此外,常春藤将缓存以前下载的文件。这意味着删除一个旧目录并让 ivy 创建一个包含 jar 的新目录会更简单。(而不是去比较文件的努力)

常春藤.xml

<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>
于 2012-11-29T06:08:12.043 回答