使用Ant排除文件

时间:2011-10-18 10:28:27

标签: php ant build

我正在创建一个PHP项目,我希望分发2个版本:免费版和专业版。

增强功能都在一些文件中,所以我只需要“跳过”它们来创建免费版本 我的问题是:实现这一目标的最佳途径是什么? 我可以列出build.xml文件中的每个文件(最多20个),但它非常难看,而且如果我忘记更新列表,我会发布这些文件......

我考虑过使用contains关键字,但这会减慢我的构建速度吗?

修改
这是我的build.xml文件:

<project name="MyProject" default="build" basedir=".">
<property name="buildDir"   value="${basedir}/build"/>
<property name="componente" value="${basedir}/trunk/componente"/>
<property name="backend"    value="${componente}/backend"/>
<property name="frontend"   value="${componente}/frontend"/>

<target name="build" depends="cleanup, pro, free" />

<!-- Clean up the build directory output -->
<target name="cleanup">
    <echo>Clean up build directory</echo>
    <delete includeemptydirs="true">
        <fileset dir="${buildDir}" includes="**/*"/>
    </delete>
</target>

<!-- Create the pro package (no file exclusion) -->
<target name="pro">
    <echo>Build pro version</echo>
    <zip destfile="${buildDir}/pro.zip" basedir="${componente}" />
</target>

<!-- Create the free package (file exclusion) -->
<target name="free">
    <echo>Build free version</echo>
</target>

编辑2 我的专业文件位于不同的文件夹中,因为我使用的是MVC模式,所以我无法移动它们

3 个答案:

答案 0 :(得分:1)

引用Ant Manual

  

zip任务形成一个隐式FileSet,支持<fileset>(dir变为basedir)的大多数属性以及嵌套的<include><exclude><patternset>元素。< / p>

这意味着你可以做到

<zip destfile="${buildDir}/free.zip"
     basedir="${componente}"
     excludes="**/features/pro/**, **/other/**"/>

关于

  

编辑2我的专业文件位于不同的文件夹中,因为我正在使用MVC模式,所以无法移动它们

MVC根本不是文件夹布局。 It's about roles and responsibilities。它没有说明放置文件的位置。一些框架常规化了放置类文件的位置,但只要你的自动加载器可以找到类文件,它们确实无关紧要:所以是的,你可以移动它们。

答案 1 :(得分:0)

您只需使用文件集:

http://ant.apache.org/manual/Types/fileset.html

<fileset dir="${files.directory}" casesensitive="yes">
  <include name="**/*free.php"/>
  <exclude name="**/*pro.php"/>
</fileset>

当然,您必须在include / exclude元素中提供不同的名称。理想情况下,您可以将专业内容分离到不同的文件,只需排除整个目录。

答案 2 :(得分:0)

好吧,我找到了。 我在我的排除文件中添加了一个PHPDoc标签:
@category ProPackage

然后我在build.xml中添加了这些规则

<target name="free">
    <zip destfile="${buildDir}/pro.zip">
        <fileset dir="${componente}">
            <not>
                <containsregexp expression="@category[ \t]+ProPackage"/>
            </not>
        </fileset>
    </zip>
</target>

已经完成了!