不能将内容发布到不同的位置



我有一个java项目和一个ANT脚本要构建,然后用一个简单的复制命令将项目分发到其他项目。

我希望在ant脚本的头文件中只命名要复制到文件的位置,而不是为依赖于此项目的每个项目都指定显式的复制任务。

我在ANT中找不到像数组这样的东西,那么将一些东西分发到多个目录的最干净的方法是什么?

根据我在Martin的回答下的评论,我想把我的解决方案版本作为另一种选择。我用了Martin回答中的属性名来说明。

<target name="deploy" >
    <property name="dest.dirs" value="/dir/one,/dir/two,/dir/thr/ee" />
    <for list="${dest.dirs}" param="dest.dir" parallel="true" delimiter="," >
        <sequential>
            <copy todir="@{dest.dir}" >
                <fileset dir="${srd.dir}" />
            </copy>
        </sequential>
    </for>
</target>

请注意"for"是一个Ant-Contrib任务,它在后面使用了Macrodef,所以你应该使用@{}来引用"dest.dir";"dest.dirs"将被分隔符分割成一个列表(可能是String[])。这里我们使用逗号分隔它(分隔符的默认值是逗号)。我还添加了"parallel",使它可以同时复制文件到所有的"dest.dirs",但是,如果要复制的项目很大,你应该删除"parallel"。

请查看http://ant-contrib.sourceforge.net/tasks/tasks/for.html更多信息请访问http://ant-contrib.sourceforge.net/tasks/tasks/foreach.html。

我不相信你有很多可行的选择:copy任务只接受一个目录。

  1. 创建自己的复制任务,获取目录列表
  2. 执行一个脚本/程序进行复制。
  3. 让子项目做拉。

我真的很犹豫是否要把一个项目推到其他项目上,因为这假设了那些项目将使用新推的代码。在我看来,"子"项目应该决定他们是否需要新版本。

对我来说,这听起来更像是一个依赖管理问题,最好用Ivy/Maven/Gradle(或其他类似Maven的)来处理。

说了这么多,听起来你想做选项1,创建一个接受目标目录列表的自定义Ant任务;扩展现有的复制任务以获得其所有功能可能非常简单——只需添加一个"todirs"属性。

您可以考虑在您的复制任务中使用scriptmapper, enablemultiplemappings为true。

首先,在属性中列出目标目录并从中创建filelist。(您可以使用dirset,但用于文件列表的API更简单。)然后运行副本,使用scriptmapper设置多个目的地。

<property name="dest.dirs" value="/dir/one,/dir/two,/dir/thr/ee" />    
<filelist id="dests" dir="/" files="${dest.dirs}" />
<copy todir="/" enablemultiplemappings="yes">
    <fileset dir="${srd.dir}" />
    <scriptmapper language="javascript">
        <![CDATA[
            // Obtain a reference to the filelist
            var filelist = project.getReference( "dests" );
            var dests = filelist.getFiles( project );
            for ( var i = 0; i < dests.length; i++ )
            {
                self.addMappedName( dests[i] + "/" + source );
            }
        ]]>
    </scriptmapper>
</copy>

相关内容

  • 没有找到相关文章

最新更新