如何使用 Apache Ant 提取文件名的一部分?

发布于 2024-12-09 03:01:18 字数 261 浏览 1 评论 0原文

我想从 Ant 脚本外部生成的文件名中提取版本号。

外部构建工具(PDE 构建)在众所周知的目录中创建一个 artifactid-1.2.3.201101010101.jar 形式的文件,但我无法事先告知版本控制信息。我需要将该文件名中的版本部分 (1.2.3.201101010101) 提取到 Ant 属性中以进行进一步处理,例如变量替换。

使用 ant-contrib 是可以接受的,但是我还没有找到提取此信息的方法。

I want to extract the version number from a file name generated outside of my Ant script.

An external build tool (PDE build) creates a file of the form artifactid-1.2.3.201101010101.jar in a well-known directory, but I can not tell the versioning information beforehand. I need to extract the version part (1.2.3.201101010101) from that file name into an Ant property for further processing, e.g. variable substitution.

Using ant-contrib is acceptable, however I have not found a way to extract this information.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悲喜皆因你 2024-12-16 03:01:18

这是使用 ant-contrib PropertyRegex 任务的解决方案。

  • 将文件名放入路径中。
  • 将路径转换为属性。
  • PropertyRegex 属性 (ant-contrib)。

您可以通过将属性值写入临时文件,然后使用带有过滤器链的 loadfile 从中提取工件 id 来避免 ant-contrib。请参阅这个答案< /a> 为例。

  <project default="get-revision-number">
        <taskdef resource="net/sf/antcontrib/antcontrib.properties">
                <classpath>
                        <pathelement location="c:/lib/ant-contrib/ant-contrib-1.0b3.jar"/>
                </classpath>
        </taskdef>

        <target name="get-revision-number">
                <path id="artifact.id.path">
                        <fileset dir=".">
                                <include name="artifactid-*.jar"/>
                        </fileset>
                </path>
                <property name="artifact.id.file" refid="artifact.id.path"/>
                <echo message="artifact.id.file: ${artifact.id.file}"/>
                <propertyregex property="artifact.id" input="${artifact.id.file}" regexp=".*artifactid-(.*).jar" select="\1" />
                <echo message="artifact.id: ${artifact.id}"/>
        </target>
  </project>

输出

$ ant
Buildfile: C:\tmp\build.xml

get-revision-number:
     [echo] artifact.id.file: C:\tmp\artifactid-1.2.3.201101010101.jar
     [echo] artifact.id: 1.2.3.201101010101

BUILD SUCCESSFUL
Total time: 0 seconds

Here's a solution using the ant-contrib PropertyRegex task.

  • Get the filename into a path.
  • Convert the path to a property.
  • PropertyRegex the property (ant-contrib).

You could avoid ant-contrib by writing the property value to a temporary file and then using loadfile with a filterchain to extract the artifact id from it. See this answer for an example.

  <project default="get-revision-number">
        <taskdef resource="net/sf/antcontrib/antcontrib.properties">
                <classpath>
                        <pathelement location="c:/lib/ant-contrib/ant-contrib-1.0b3.jar"/>
                </classpath>
        </taskdef>

        <target name="get-revision-number">
                <path id="artifact.id.path">
                        <fileset dir=".">
                                <include name="artifactid-*.jar"/>
                        </fileset>
                </path>
                <property name="artifact.id.file" refid="artifact.id.path"/>
                <echo message="artifact.id.file: ${artifact.id.file}"/>
                <propertyregex property="artifact.id" input="${artifact.id.file}" regexp=".*artifactid-(.*).jar" select="\1" />
                <echo message="artifact.id: ${artifact.id}"/>
        </target>
  </project>

Output

$ ant
Buildfile: C:\tmp\build.xml

get-revision-number:
     [echo] artifact.id.file: C:\tmp\artifactid-1.2.3.201101010101.jar
     [echo] artifact.id: 1.2.3.201101010101

BUILD SUCCESSFUL
Total time: 0 seconds
山川志 2024-12-16 03:01:18

使用 Ant 插件 Flaka 的直接解决方案:

<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka">

 <property name="filename" value="artifactid-1.2.3.201101010101.jar"/>

 <!-- simple echo -->
 <fl:echo>Version => #{replace('${filename}', '$1', '.+-(.+).jar')}</fl:echo>
 <!-- create property for further processing -->
 <fl:let>fileversion := replace('${filename}', '$1', '.+-(.+).jar')</fl:let>
 <echo>${fileversion} => ${fileversion}</echo>

</project>

输出

Buildfile: /home/rosebud/workspace/ant/demo.xml
  [fl:echo] Version => 1.2.3.201101010101
     [echo] ${fileversion} => 1.2.3.201101010101
BUILD SUCCESSFUL

A straight solution with Ant addon Flaka :

<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka">

 <property name="filename" value="artifactid-1.2.3.201101010101.jar"/>

 <!-- simple echo -->
 <fl:echo>Version => #{replace('${filename}', '$1', '.+-(.+).jar')}</fl:echo>
 <!-- create property for further processing -->
 <fl:let>fileversion := replace('${filename}', '$1', '.+-(.+).jar')</fl:let>
 <echo>${fileversion} => ${fileversion}</echo>

</project>

output

Buildfile: /home/rosebud/workspace/ant/demo.xml
  [fl:echo] Version => 1.2.3.201101010101
     [echo] ${fileversion} => 1.2.3.201101010101
BUILD SUCCESSFUL
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文