Исключить файлы с помощью Ant - PullRequest
2 голосов
/ 18 октября 2011

Я создаю проект PHP, и я хотел бы распространять 2 версии: бесплатную и профессиональную.

Все расширенные функции находятся внутри некоторых файлов, поэтому мне нужно всего лишь "пропустить" их, чтобы создать бесплатную версию.
У меня вопрос: каков наилучший способ добиться этого?
я могуперечислять каждый файл в файле build.xml (их максимум 20), но это довольно уродливо, более того, если я забуду обновить список, я буду рекламировать эти файлы ...

Я подумал об использовании contains ключевое слово, но это замедлит мою сборку?

EDIT
Это мой файл 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 ]

1 голос
/ 18 октября 2011

Цитировать Руководство по муравьям :

Задача zip формирует неявный набор файлов и поддерживает большинство атрибутов <fileset> (dir становится basedir), а также вложенные элементы <include>, <exclude> и <patternset>.

Что означает, что вы можете сделать

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

Относительно

РЕДАКТИРОВАТЬ 2 Мои профессиональные файлы находятся в разных папках, и я не могу их переместить, так как я использую шаблон MVC

MVC вообще не относится к разметке папок. Это о ролях и обязанностях . Там ничего не сказано о том, куда положить файлы. Некоторые фреймворки унифицируют расположение файлов классов, но пока ваш автозагрузчик может находить файлы классов, действительно не имеет значения, где они находятся: так что да, вы можете перемещать их.

0 голосов
/ 25 октября 2011

хорошо, я нашел это. я добавил тег 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 голосов
/ 18 октября 2011

Вы можете просто использовать наборы файлов:

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. В идеале вы могли бы отделить профессионалы от другого файла и просто исключить весь каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...