Why does headless PDE Build omit directories I've specified in build.properties's bin.includes?
One of my Eclipse plug-ins (OSGi bundles) is supposed to contain a directory (Database Elements
) of .sql files. My build.properties
shows:
bin.includes = META-INF/,\
.,\
Database Elements/
(...which looks right to me.)
When I build and run from within my interactive Eclipse IDE, everything works fine: calls to Bundle.getEntry(String)
and Bundle.findEntries(String, String, bool)
return valid URL
objects; my tests are happy; my code is happy.
When I build via headless ant script (using PDE Build), those same calls end up returning null
. My tests break; my code breaks. I find that Database Elements
is quietly but simply missing from my plug-in's JAR开发者_JAVA技巧 package. (META-INF
and the built classes still make it in there fine.) I scoured the build log (even eventually invoking ant -verbose
on the relevant portion of the build script) but saw no mention of anything helpful.
What gives?
It appears there was a bug (though I was unable to search up a Bugzilla citation) in the PDE Build ant-script generation process as of 3.2 that produced an ant build.xml
script fragment like this from the bin.includes
:
<copy todir="${destination.temp.folder}/my_plugin" failonerror="true" overwrite="false">
<fileset dir="${basedir}" includes="META-INF/,Database Elements/" />
</copy>
The relevant Ant documentation says that includes
contains a "comma- or space-separated list of patterns". Thus (since my directory name contains a space and was copied literally into the includes
attribute value) I think the copy
task was trying to include a file named Database
and a directory named Elements/
. Neither existed, so they were quietly ignored. I suspect the same problem would have bitten if I had a comma in my directory name, but I did not test this.
Since I use Eclipse 3.5 interactively, I decided to finally decouple my headless build's Eclipse instance from my target platform (which remains at 3.2 for the moment) and to update my headless PDE Build to 3.5 (by attempting to produce a minimal PDE Build configuration from my interactive instance's plug-ins). Now, the generated build.xml
contains this instead:
<copy todir="${destination.temp.folder}/my_plugin" failonerror="true" overwrite="true">
<fileset dir="${basedir}">
<include name="META-INF/"/>
<include name="Database Elements/"/>
</fileset>
</copy>
The relevant Ant documentation this time indicates that the only special characters in an individual include
are *
and ?
. Indeed, the bug seems to have been fixed sometime between 3.2 and 3.5: my 3.5-based headless PDE Build now produces a plugin that contains Database Elements
; my tests are happy; my code is happy; I'm happy.
精彩评论