1

我的一个 Eclipse 插件(OSGi 包)应该包含一个Database Elements.sql 文件的目录( )。我的build.properties节目:

bin.includes = META-INF/,\
           .,\
           Database Elements/

(......这对我来说看起来很正确。)

当我在交互式 Eclipse IDE 中构建和运行时,一切正常:调用Bundle.getEntry(String)Bundle.findEntries(String, String, bool)返回有效URL对象;我的测试很开心;我的代码很高兴。

当我通过无头 ant 脚本(使用 PDE 构建)构建时,这些相同的调用最终返回null. 我的测试失败了;我的代码中断。我发现Database Elements我的插件的 JAR 包中悄悄地但只是缺少它。(META-INF并且构建的类仍然可以正常工作。)我搜索了构建日志(甚至最终调用ant -verbose了构建脚本的相关部分),但没有提到任何有用的内容。

是什么赋予了?

4

1 回答 1

0

从 3.2 开始,在 PDE Build ant-script 生成过程中似乎存在一个错误(尽管我无法搜索 Bugzilla 引用),它从以下位置生成了这样的 antbuild.xml脚本片段bin.includes

<copy todir="${destination.temp.folder}/my_plugin" failonerror="true" overwrite="false">
    <fileset dir="${basedir}" includes="META-INF/,Database Elements/"           />
</copy>

相关的Ant 文档说它includes包含“以逗号或空格分隔的模式列表”。因此(因为我的目录名称包含一个空格并按字面意思复制到includes属性值中)我认为该copy任务试图包含一个名为的文件Database和一个名为Elements/. 两者都不存在,所以他们被悄悄地忽略了。我怀疑如果我的目录名称中有逗号,也会出现同样的问题,但我没有对此进行测试。

由于我以交互方式使用 Eclipse 3.5,我决定最终将无头构建的 Eclipse 实例与我的目标平台(目前仍为 3.2)分离,并将无头 PDE 构建更新到 3.5(通过尝试从我的交互式实例的插件)。现在,生成的build.xml内容改为:

<copy todir="${destination.temp.folder}/my_plugin" failonerror="true" overwrite="true">
    <fileset dir="${basedir}">
        <include name="META-INF/"/>
        <include name="Database Elements/"/>
    </fileset>
</copy>

这次的相关Ant 文档表明,个体中唯一的特殊字符include*?。实际上,该错误似乎已在 3.2 和 3.5 之间的某个时间得到修复:我的基于 3.5 的无头 PDE Build 现在生成了一个插件,其中包含Database Elements:我的测试很开心;我的代码很开心;我很高兴。

于 2010-05-06T16:14:10.637 回答