2011-10-18 188 views
2

我創建一個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> 

EDIT 2 我的親文件在不同的文件夾,因爲我」我不能移動它們m使用MVC模式

+0

你試過了嗎?它有用嗎?它減慢了你的構建? – hakre

回答

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> 

添加了這些規則,就完成了!

0

您可以簡單地使用文件集:

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

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

當然,你必須提供在包含/排除的元素不同的名稱。理想情況下,你可以將專業版分離到不同的文件,並簡單地排除整個目錄。

+0

是的,我知道,但它很容易出錯,因爲我的文件不在同一個目錄中,我傾向於忘記東西:P – tampe125

+0

@ tampe125然後你需要組織一些東西。這是排除/包含文件的默認ant機制。你甚至可以使用其他標準,如文件內容或修改日期等,但最終你將不得不使用這個任務。 – FailedDev

+0

是的,但我使用的是MVC模式,所以事情分成幾個文件夾。 – tampe125

1

引述Ant Manual

拉鍊任務形成的隱式文件集和支持<fileset>大多數屬性(DIR變得BASEDIR)以及嵌套<include><exclude><patternset>元件。

這意味着你可以做

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

關於

編輯2個我的親文件在不同的文件夾,並由於我使用MVC模式

我動不了他們

MVC根本不是關於文件夾佈局。 It's about roles and responsibilities。它沒有提到放置文件的位置。有些框架規定了放置類文件的位置,但只要自動加載器能夠找到類文件,它們確實無關緊要,所以可以移動它們。