<zipfileset>
タスク間でリソースのグループを再利用する唯一の方法として、私たちのカスタム (もちろん以前は機能していた) Ant タスクを変換しましたが<zip>
、カスタム タスクはリソース コレクションを使用することが判明しました。つまり、本質的に、代わりに で<fileset>
ラップしただけ<mappedresources>
です。
<project name="test" default="installers">
<target name="installers">
<union id="common">
<fileset prefix="." dir="." includes="1"/>
<mappedresources>
<fileset dir="." includes="2"/>
<globmapper from="*" to="3/*"/>
</mappedresources>
</union>
<generate-wix>
<resources refid="common"/>
</generate-wix>
</target>
</project>
カスタム タスクは次のようになります。WiX 固有のがらくたはすべて省略されています。
public class GenerateWixTask extends Task {
private Resources resources;
@Override
public void execute() throws BuildException {
// omitting root element setup
Iterator<?> resourceIterator = resources.iterator();
while (resourceIterator.hasNext()) {
Resource resource = (Resource) resourceIterator.next();
// This is the relative path with respect to the WiX install.
File filePath = new File(resource.getName());
//String fileName = filePath.getName();
// This is the file which will be used as the actual data.
//TODO: How to get this?
System.out.println("resource: " + resource.getName());
System.out.println(" which is a " + resource.getClass());
System.out.println(" name = " + resource.getName());
System.out.println(" location = " + resource.getLocation());
FileProvider provider = (FileProvider) resource.as(FileProvider.class);
if (provider != null) {
System.out.println(" file = " + provider.getFile());
}
}
// omitting code to write the XML
}
public void setResourcesref(Reference resourcesref) {
createResources().setRefid(resourcesref);
}
public Resources createResources() {
if (resources == null) {
resources = new Resources();
resources.setProject(getProject());
}
return resources;
}
}
これにより得られる出力は次のとおりです。
[generatewix] resource: 1
[generatewix] which is a class org.apache.tools.ant.types.resources.FileResource
[generatewix] name = 1
[generatewix] location =
[generatewix] file = C:\Data\test\1
[generatewix] resource: 3/2
[generatewix] which is a class org.apache.tools.ant.types.resources.MappedResource
[generatewix] name = 3/2
[generatewix] location =
MappedResource のソース コードを読むと、FileProvider はソース ファイルを非表示にするために特別に処理されます (コメントは悪用を防ぐためのように聞こえます... 私は正確にそれを悪用しようとしているわけではありません)。別のアプリケーションが読み取る XML ファイルを作成しているため、ファイルへのパス...
これに対する回避策はありますか?