ant - 使用 ant 获取 list 文件的条目

标签 ant manifest multiline

我正在尝试开发一个 Ant 宏定义,它获取作为参数传递的 list 文件中的 Require-Bundle 属性的用逗号分隔的值。我想要获得的是这样的:

Require-Bundle=org.eclipse.ui,org.eclipse.ui.ide,org.eclipse.ui.views...

我在代码中面临的问题是,它没有考虑属性是否在多行中有多个值,这是我的代码:

<macrodef name="getDependencies">
    <attribute name="file" />
    <attribute name="prefix" default="ant-mf." />
    <sequential>
        <loadproperties>
            <file file="@{file}" />
            <filterchain>
                <linecontains>
                    <contains value="Require-Bundle" />
                </linecontains>
                <prefixlines prefix="@{prefix}" />
            </filterchain>
        </loadproperties>
    </sequential>
</macrodef>

但这就是我得到的:

[echoproperties] ant-mf.Require-Bundle=org.eclipse.ui,

任何帮助将不胜感激。

最佳答案

您的 list 文件很可能如下所示:

Require-Bundle: org.eclipse.ui,
 org.eclipse.ui.ide,
 org.eclipse.ui.views,
 ...

不幸的是,Java list 文件并不完全是 Java 属性文件。 list 文件可以具有跨多行的属性,而属性文件不能具有多行值。 <loadproperties>任务无法处理多行属性。

相反,您需要一个了解 Manifest 文件的 Ant 任务。在另一个问题中,Richard Steele provides Ant script从 Jar 文件加载 Manifest 文件。您可以调整该示例以仅获取 Require-Bundle属性。

关于ant - 使用 ant 获取 list 文件的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23932960/

相关文章:

regex - sed 多行搜索替换

java - 在Java正则表达式中如何匹配换行符

google-chrome - 无法通过 ANT 运行测试

ant - 是否可以从 Ant 启动 Gradle 任务?

java - Ant 构建问题 : nested exception is java. lang.NoClassDefFoundError:org/apache/tiles/request/servlet/ServletApplicationContext

android - 在 manifest.xml 中注册一个具有许多操作的接收器

android - 我不在 list 文件中使用联系人权限。但我在应用程序信息屏幕上获得了联系许可

java - ANT:如何修改构建文件中的 java.library.path

Android,是否可以不同地设置项目构建目标和最低 SDK 版本?

latex -\right) 不适用于 LaTeX 多行方程