我正在创建一个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模式,所以我无法移动它们
答案 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)
@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>
已经完成了!