Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программное обеспечение > Eclipse+ant. Условная сборка


Автор: ksnk 25.1.2009, 20:02
Чего-то я туплю. 

Использую Eclipce. Ну и ANT для сборки проекта. Понадобилось внести в сборщик какую-то логику.
К примеру, если файла нету - его создать. Сейчас пока наделал список задач по созданию того или иного компонента и вручную его дергаю. Думаю, что что-то я делаю не то smile

Должно бы получится чего-то такое - один таргет, который в зависимости от наличия файла, даты файла, фазы луны и настроения шефа сделает или не сделает некий список задач.

Итого - чего у меня есть:

Вот пара задач на создание каких-то файлов

Создача сборного javascript'а.
Код

    <target name="create_site_js">
    <echo append="false" file="tmp1.tmp">$(function(){    
</echo>
        <echo append="false" file="tmp2.tmp">
})
</echo>
        <concat destfile="js\site.js" eol="crlf" force="no">
            <filelist dir="." files="tmp1.tmp"/>
            <filelist dir="${common_dir}/js/site.src" files="storepos.js"/>
            <filelist dir="${common_dir}/js/site.src" files="ajaxdebug.js"/>
            <filelist dir="${common_dir}/js/site.src" files="ajaxform.js"/>
            <filelist dir="${common_dir}/js/site.src" files="ajaxlink.js"/>
            <filelist dir="${common_dir}/js/site.src" files="ajaxpage.js"/>
            <filelist dir="." files="tmp2.tmp"/>
            <filelist dir="${common_dir}/js/site.src" files="cookie.js"/>
            <filelist dir="${common_dir}/js/site.src" files="chkImg.js"/>
            <filelist dir="${common_dir}/js/site.src" files="windowO.js"/>
            <filelist dir="${common_dir}/js/site.src" files="menu.js"/>
        </concat>
        <delete file="tmp1.tmp"/>
        <delete file="tmp2.tmp"/>
    </target>    


Ее надо запускать только в случае, если файлы, используемые для сборки поменялись.  Как это написать, чтобы список этих файлов держать в одном месте?

Создача затычки для файла конфигурации.
Код

<target name="create_config" >
    <echo append="false" file="${test_dir}/engine/config.php"><![CDATA[<?php]]></echo>
    <echo append="true" file="${test_dir}/engine/config.php">    
        define('TAB_PREF','${dir}'); // префикс базы данных
        $the_host="localhost";
        $the_pass="";
        $the_login="root";
        $the_db="ns";
</echo>
        <echo append="true" file="${test_dir}/engine/hosts.php"><![CDATA[?>]]></echo>
</target>

Ее надо запускать только если файла конфигурации нету...

С документацией по ANT'у я, вроде, знаком, однако чего-то в этой жизни так и не догнал...

Добавлено через 6 минут и 55 секунд
P.S. А тут, случайно, более подходящей конференции нету? Там где люди в ANT не просто мануальные примеры гоняют, а какую-то навороченную логику?

Автор: ksnk 25.1.2009, 21:31
Со второй задачей кое-как справился
Код

        <condition property="config.exists">
            <available file="${test_dir}/engine/config.php"/>
        </condition>
        <antcall target="create_config"/>

правда "логику" пришлось вытащить аж в таргет "create_config"

Код

<target name="create_config" unless="config.exists">
    ...

Все равно как-то коряво... 

Автор: LSD 26.1.2009, 14:08
Чой-то я не понял, в чем вопрос. Есть тот же http://ant-contrib.sourceforge.net/ где есть условный оператор и синтаксис поприятней:
Код
<target name="DistributeJavaDocs">
  <if>
    <equals arg1="${skipJavaDocs}" arg2="true" />
    
    <then>
      <echo message="Skipping Javadoc section" />
    </then>
    
    <else>
      <mkdir dir="${dir.build.javadocs}"/>
      <property name="javadocs.file" value="${dir.dist.javadocs}/javadocs.tar"/>
      <mkdir dir="${dir.dist.javadocs}"/>
      <touch file="${javadocs.file}"/>
      <exec executable="${svn.command}" failifexecutionfails="true" logerror="true" >
        <arg value="add"/>
        <arg value="${dir.dist.javadocs}"/>
        <arg value="${javadocs.file}"/>
      </exec>
      <javadoc destdir="${dir.build.javadocs}" 
               sourcepath="${dir.src}" 
               verbose="false" 
               failonerror="false" 
               package="yes" 
               packagenames="com.db.*"
               windowtitle="${proj.name} API"/>

      <tar destfile="${javadocs.file}" basedir="${dir.build.javadocs}" />
    </else>
    
  </if>
</target>

Автор: ksnk 28.1.2009, 19:52
LSD, То есть это уже не "голый" Ant, а чего-то еще плюс... ?

Хм... посмотрим, пожуем ...

Спасибо!

Добавлено через 11 минут и 1 секунду
А собственно ant-contrib-0.3.jar где нормальные люди берут? Ну, те нормальные люди, которые пр Java слыхом не слыхивали и Eclips'ом, преимущественно гвозди забивают...
По ссылке download мне предложили укачать охрененно мудрый архив с офигенно большим количеством xml и прочей фигни... Куда мне ее запихать?  smile

Добавлено через 13 минут и 11 секунд
Торможу... jar нашелся на сайте...  smile

Автор: ksnk 28.1.2009, 20:28
Заработало! остался только дурацкий вопрос  - как бы вставить этот jar в сборку/настройку ant, чтобы не приходилось его каждый раз указывать в сборщике?

Добавлено через 1 минуту и 31 секунду
В смысле, не писать странную конструкцию
Код

    <taskdef resource="net/sf/antcontrib/antcontrib.properties">
      <classpath>
        <pathelement location="D:\Program Files\eclipse\plugins\ant-contrib-1.0b3.jar" />
      </classpath>
    </taskdef>

? 
Есть, же какие-то runtime-настройки Anta в Eclipse...

Автор: ksnk 28.1.2009, 20:45
Хотя classpath поменял и писать придется всего одну строку... А совсем ничего не писать разработчики чего-йто не советуют...

Автор: LSD 29.1.2009, 16:13
Найди каталог: eclipse\plugins\org.apache.ant_1.7.0.v200803061910\lib (название может немного отличаться). И положи туда ant-contrib.jar. И после этого можно будет ограничиться:
Код

<taskdef resource="net/sf/antcontrib/antlib.xml"/>

Автор: ksnk 29.1.2009, 19:39
LSD, Ну, я залез в Window->Preferences->Ant->Runtime->Classpath->AntHomeEntries. Там "addJar" и добавил  ant-contrib.jar. Теперь тоже пишу одну строчку. А вот уже ее, вроде, никак не убить ... 
Ну да и ладно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)