Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ant, заметка для FAQ 
:(
    Опции темы
chief39
Дата 5.4.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 5
Всего: 77



Цитата(Lamer George @ 12.9.2005, 18:38 Найти цитируемый пост)
ant -buildfile build.xml stop

на всяк случ. мож кому легче будет smile :
вместо -buildfile можно -f :
Код

ant -f build.xml stop

если есть в текущей папке файл build.xml - то ант сам его хватанёт.
ant stop
Если такого нету - тогда следует файл явно указать.
то есть
Код

ant -f build-system.xml stop


В общем та же идеология замечательной утилитки make (которую, я, дурак, раньше недолюбливал)

По поводу частичной сборки: так же как и make - компилит несуществующие или "освежает" старые. Зачастую clean можно не делать.
Когда пересобирал проект - очень пригодилось - поменял мааахонький кусочек - оно его перекомпилило - и всё smile не сидишь по 5 минут в монитор не втыкаешь smile



--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
аЛексус
Дата 6.4.2006, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.3.2006
Где: Алматы

Репутация: 1
Всего: 1



Другие программы можно запускать с помощью таска <apply>. Я например запускаю компилятор делфи.

Код

<target name="compile" description="Compiles">
    <apply executable="dcc32.exe" verbose="true">
        <fileset dir="${basedir}" includes="*.dpr"/>
    </apply>
</target>

PM MAIL WWW ICQ   Вверх
jer1
Дата 6.4.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 24.1.2005
Где: Харьков Украина

Репутация: нет
Всего: 5



hi, вот хочу аЛексус первый плюсик поставить, как это можно сделать?
--------------------
:w!q
PM MAIL   Вверх
tux
Дата 6.4.2006, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 11
Всего: 132



Цитата(jer1 @ 6.4.2006, 13:59 Найти цитируемый пост)
hi, вот хочу аЛексус первый плюсик поставить, как это можно сделать?

Не вопрос.
PM MAIL Skype GTalk Jabber YIM   Вверх
аЛексус
Дата 6.4.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.3.2006
Где: Алматы

Репутация: 1
Всего: 1



Кстати есть одно дополнение для тех кто собирает проекты делфи на Анте.
Если ваш файл сборки будет не в той же директории где и *.dpr, то он не будет нормально компилировать в том случае если есть dcc32.cfg. Я эту проблему решил путем разделения файла сборки на два: один основной, а другой только для компиляции.
Основной файл выглядит примерно так:
Код

<target name="copy" description="Copies build.xml" depends="CVS checkout">
<!-- Copies to Applications -->
    <copy file="build.xml"  todir="${cch.dir}\Administrator"/>
    <copy file="build.xml"  todir="${cch.dir}\Ambulance"/>
    <copy file="build.xml"  todir="${cch.dir}\Cash"/>
    <copy file="build.xml"  todir="${cch.dir}\DB_Drugstore"/>
    <copy file="build.xml"  todir="${cch.dir}\Diagnostics"/>
    <copy file="build.xml"  todir="${cch.dir}\Drugstore"/>
    <copy file="build5.xml" todir="${cch.dir}\Users"/>
    </target>

    <target name="compile" description="Compiles source" depends="copy">
<!-- Compiles Applications -->
        <sequential>
        <delete>
            <fileset dir="${bin.dir}" includes="**/*.exe"/>
            <fileset dir="${bin.dir}" includes="**/*.log"/>
        </delete>
        <parallel threadCount="5">
        <ant dir="${cch.dir}\Administrator" output="${bin.dir}\CCH\Administrator\dcc32.log"/>
        <ant dir="${cch.dir}\Ambulance"     output="${bin.dir}\CCH\Ambulance\dcc32.log"/>
        <ant dir="${cch.dir}\Cash"          output="${bin.dir}\CCH\Cash\dcc32.log"/>
        <ant dir="${cch.dir}\Diagnostics"   output="${bin.dir}\CCH\Diagnostics\dcc32.log"/>
        <ant dir="${cch.dir}\Drugstore"     output="${bin.dir}\CCH\Drugstore\dcc32.log"/>
        <ant dir="${cch.dir}\Users" antfile="build5.xml" output="${bin.dir}\CCH\Users\dcc32.log"/>
        </parallel>
        </sequential>
    <buildnumber/>
    </target>  


А второй, который копируется в раб. директории я указал выше.

если у кого-нить есть какие-нибудь замечания или советы, жду!
да и обратите внимание на <parallel> и <sequential>, очень полезные штуки, значительно уменьшает время сборки!
PM MAIL WWW ICQ   Вверх
tux
Дата 12.4.2006, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 11
Всего: 132



В дополнение ссылка на статью по Ant - http://www.opennet.ru/base/dev/ant_10.txt.html.
PM MAIL Skype GTalk Jabber YIM   Вверх
vaz
Дата 18.4.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Все таки не могу решить проблему. Мне необходимо с помощью другой программы обработать исходник и поменять содержимое doclet тега. Проблема состоит в том, что данную операцию нужно сделать только для изменившихся исходников, которые определит ant и делать мне это нужно непосредственно перед компиляцией каждого из изменившихся исходников.
В принципе в <javac> task можно включить опцию debug="on" и вывести в файл результаты компиляции, где и будут перечислены компилирующиеся файлы. Но во-первых, его парсить нужно и во-вторых, получаешь набор исходников, которые уже откомпилированы. А мне необходимо непосредственно перед компиляцией обработать изменившийся исходник.


Цитата

А ты уверен, что он компилит только измененные? Ведь Ant даже отследить этого не может - никакой иcтории изменений не ведется. 

Есть одна маленькая загвоздка, на которую никто из осваивающих ant не обращает внимание, а потом теряет время.
!!! Если структура каталогов в точности не соответствует структуре пакетов, то ant будет компилить все подряд вне зависимсоти от того каких ты опций в task'e не понаставишь. Другими словами, дерево каталогов, в которые будут ложиться классы будет сформировано согласно структуре пакетов, а исходники могут лежать в дереве каталогов, которое не соответствует в точности дереву каталогов классов. Ведь сравнение изменившегося исходника ведется по классу, который должен лежать в подобной структуре каталогов. Поэтому нужно обязательно проверить соответствие дерева каталогов классов и дерево каталогов исходников на соответствие. Тогда ant будет компилировать только изменившиеся исходники.
И еще хорошо бы воспользоваться task'ом <depend>.

Цитата

<parallel> и <sequential>, очень полезные штуки, значительно уменьшает время сборки! 

не хочется лезть в документацию, но интересно знать за счет чего это происходит. 
PM MAIL   Вверх
sandello
Дата 18.4.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: 2
Всего: 2



Цитата(vaz @  18.4.2006,  13:15 Найти цитируемый пост)
Все таки не могу решить проблему. Мне необходимо с помощью другой программы обработать исходник и поменять содержимое doclet тега. Проблема состоит в том, что данную операцию нужно сделать только для изменившихся исходников, которые определит ant и делать мне это нужно непосредственно перед компиляцией каждого из изменившихся исходников.

Можешь описать задачу, которая привела к такой необходимости?

Цитата(vaz @  18.4.2006,  13:15 Найти цитируемый пост)
В принципе в <javac> task можно включить опцию debug="on" и вывести в файл результаты компиляции, где и будут перечислены компилирующиеся файлы. Но во-первых, его парсить нужно и во-вторых, получаешь набор исходников, которые уже откомпилированы. А мне необходимо непосредственно перед компиляцией обработать изменившийся исходник.

Меняешь файлы и компилируешь повторно. Идея плохая, но работать должно.

Хотелось бы дополнить начинателя:
Тег property: однажды сознанная property уже никогда не меняет своего значения. Это, в принципе, есть в статье на opennet

Тег condition: позволяет реализовать ветвление. Пример:
Код

<condition property="name" value="ok_value">
  <length string="${prop}" length="0"/>
</condition>

В случае успешной провеки условия в теле элемента condition будет установлена переменная name (значение "ok_value"). Если условие не верно, переменная установлена не будет. Поэтому, если нужно построить конструкцию if ... else ..., то для этого достаточно после condition добавить тег proprety, в котором установить значение для неверного условия.
   

Это сообщение отредактировал(а) sandello - 18.4.2006, 14:50


--------------------
user posted image
PM MAIL Jabber   Вверх
vaz
Дата 19.4.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Цитата
 http://forum.vingrad.ru/index.php?showtopi...st&p=706527
Все таки не могу решить проблему. Мне необходимо с помощью другой программы обработать исходник и поменять содержимое doclet тега. Проблема состоит в том, что данную операцию нужно сделать только для изменившихся исходников, которые определит ant и делать мне это нужно непосредственно перед компиляцией каждого из изменившихся исходников.


Цитата

Можешь описать задачу, которая привела к такой необходимости?


Задача следующая: есть increaseVersion.jar который увеличивает версию в java исходнике, в теге @version. Увеличивает по заданному правилу для определеленного формата x.xx или x.x. Если в какой-то исходник вносится изменение, то его версию нужно увеличить при следующей компиляции. Естественно ant найдет все изменившиеся исходники и скомпилирует только их. Но мне нужно перед тем как он их найдет увеличить версию. Если увеличивать версию после компиляции, то эти файлы снова окажутся измененными и ant их будет компилировать вечно.
Можно ли каким-то образом вклинить запуск этого jar'ника в таск <javac> и непосредственно перед компиляцией увеличивать версию только тех исходников, в которые вносились изменения?
Система контроля версий в данном случае не подходит по нескольким причинам:
- версия класса должна меняться в исходнике после каждого изменения/компиляции а не после коммита
- библиотека небольшая и разрабатывается и собирается одним человеком, т.е. отсутствуют там всякие мерджи версионные ветки
- откаты тоже не нужны
- ну и система контроля версий и место дополнительное ест и время потихоньку тоже. 
PM MAIL   Вверх
sandello
Дата 19.4.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: 2
Всего: 2



Цитата(vaz @  19.4.2006,  12:46 Найти цитируемый пост)
Если в какой-то исходник вносится изменение, то его версию нужно увеличить при следующей компиляции. Естественно ant найдет все изменившиеся исходники и скомпилирует только их. Но мне нужно перед тем как он их найдет увеличить версию. Если увеличивать версию после компиляции, то эти файлы снова окажутся измененными и ant их будет компилировать вечно.

Ты немного не понял. Я предлагал сделать что-то вроде:
Код

<target name="compile_and_increase_version>
  <!-- первая компиляцияю. Основная цель - определение списка изменных файлов -->
  <javac .../>
  
  <!-- определяем нужные файлы по выходу javac, вносим изменения в них -->
  <.../>

  <!-- собираем правильные исходники -->
  <javac .../>
</target>


А вот на счет системы контроля версии - ты не прав. Именно она очень удобна для этой задачи. На примере Subversion могу предложить несколько вариантов:
1. С использованием Keywords - тогда в каждый файл можно затолкать номер ревизии
2. С использованием svn status можно получить список изменных файлов без компиляции

Я реализовал 3 вариант :-) Основная особенность - выбор, что будем увеличивать (version.subversion.patch.bugfix), решаю я. Для этого у ant'овского скрипта торчат наружу одноименные цели. Каждая такая цель увеличивает цифирку в определенной строке специального файла. Дальше - дело техники :-)
  

Это сообщение отредактировал(а) sandello - 19.4.2006, 11:57


--------------------
user posted image
PM MAIL Jabber   Вверх
vaz
Дата 19.4.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



svn только начинаю осваивать и толком данную задачу быстро не решу. Попробую третий вариант :-), может у тебя есть простой пример? 
PM MAIL   Вверх
sandello
Дата 20.4.2006, 06:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: 2
Всего: 2



Лови работающий скрипт
Код

<?xml version="1.0" encoding="UTF-8"?>
<project name="Project build" default="build" basedir=".">
  <taskdef resource="svntask.properties">
    <classpath>
      <filelist dir="${basedir}/lib" files="svnant.jar svnClientAdapter.jar svnjavahl.jar"/>
    </classpath>
  </taskdef>

  <target name="init">
    <!--<property file="build.properties"/>-->
    <property name="version_file" value="version"/>

    <property name="module.name" value="radius3tm"/>
    <property name="module.dir" value="."/>
    <property name="module.dir.vc" value="${module.dir}"/>
    <property name="module.dir.src" value="${module.dir}/src"/>
    <property name="module.dir.dtd" value="${module.dir}/dtd"/>
    <property name="module.dir.lib" value="${module.dir}/lib"/>
    <property name="dir.jboss.client" value="${module.dir.lib}"/>

    <property name="version_java" value="${module.dir.src}/com/company/project/Version.java"/>
  </target>


  <target name="increment_build" depends="init">
    <propertyfile file="version">
      <entry key="build.number" type="int" operation="+" value="1"/>
    </propertyfile>
    <propertyfile file="${version_file}">
      <entry key="nostable" value="+"/>
    </propertyfile>
  </target>

  <target name="increment_version" depends="init,increment_build">
    <propertyfile file="${version_file}">
      <entry key="version.number" type="int" operation="+" value="1"/>
      <entry key="subversion.number" value="0"/>
      <entry key="patch.number" value="0"/>
      <entry key="bugfix.number" value="0"/>
      <entry key="nostable" value=""/>
    </propertyfile>
  </target>

  <target name="increment_subversion" depends="init,increment_build">
    <propertyfile file="${version_file}">
      <entry key="subversion.number" type="int" operation="+" value="1"/>
      <entry key="patch.number" value="0"/>
      <entry key="bugfix.number" value="0"/>
      <entry key="nostable" value=""/>
    </propertyfile>
  </target>

  <target name="increment_patch" depends="init,increment_build">
    <propertyfile file="${version_file}">
      <entry key="patch.number" type="int" operation="+" value="1"/>
      <entry key="bugfix.number" value="0"/>
      <entry key="nostable" value=""/>
    </propertyfile>
  </target>

  <target name="increment_bugfix" depends="init,increment_build">
    <propertyfile file="${version_file}">
      <entry key="bugfix.number" type="int" operation="+" value="1"/>
      <entry key="nostable" value=""/>
    </propertyfile>
  </target>

  <target name="configure" depends="init">
    <property file="${version_file}"/>

    <property name="module.version" value="${version.number}.${subversion.number}.${patch.number}.${bugfix.number}"/>
    <property name="module.build" value="${build.number}"/>
  </target>

  <target name="prepare_src" depends="init,configure,pre_version_control">
    <property file="${version_file}"/>
    <!--property file="${build_file}"/-->
    <!--property file="${build_file}"/-->
    <!--property file="${build_file}"/-->
    <!--property file="${build_file}"/-->
    <replaceregexp file="${version_java}" match="build=\d*;" replace="build=${build.number};" byline="true"/>
    <replaceregexp file="${version_java}" match="version=\d*;" replace="version=${version.number};" byline="true"/>
    <replaceregexp file="${version_java}" match="subversion=\d*;" replace="subversion=${subversion.number};"
                   byline="true"/>
    <replaceregexp file="${version_java}" match="patch=\d*;" replace="patch=${patch.number};" byline="true"/>
    <replaceregexp file="${version_java}" match="bugfix=\d*;" replace="bugfix=${bugfix.number};" byline="true"/>
    <replaceregexp file="${version_java}" match="nostable=&quot;\+?&quot;;" replace="nostable=&quot;${nostable}&quot;;" byline="true"/>
    <replaceregexp file="${version_java}" match="module=&quot;.*&quot;;" replace="module=&quot;${module.name.base}&quot;;" byline="true"/>
  </target>


  <!-- информацию из VC получили, подставляем в имена -->
  <target name="pre_version_control" depends="init,configure,version_control_status">
    <echo message="${vc.root}"/>
    <echo message="'${vc.branch}'"/>

    <condition property="module.name.base" value="${module.name}-${vc.branch}">
      <not>
        <length string="${vc.branch}" length="0"/>
      </not>
    </condition>
    <property name="module.name.base" value="${module.name}"/>
    <echo message="${module.name.base}"/>

    <condition property="module.name.ver" value="${module.name.base}-build-${module.build}">
      <equals arg1="${nostable}" arg2="+"/>
    </condition>
    <property name="module.name.ver"
              value="${module.name.base}-release-${version.number}_${subversion.number}_${patch.number}_${bugfix.number}"/>
    <echo message="${module.name.ver}"/>

    <condition property="module.file.suffix" value="${module.version}-${module.build}-src">
      <equals arg1="${nostable}" arg2="+"/>
    </condition>
    <property name="module.file.suffix" value="${module.version}-src"/>


    <property name="module.file" value="${module.name.base}-${module.file.suffix}"/>

    <echo message="${module.file}"/>
  </target>


  <!-- Готовим архив исходников -->
  <target name="make_archive" depends="init,configure,pre_version_control,version_control">

    <property name="archive.dir" value="build/${module.file}"/>
    <property name="archive.name" value="${module.file}.tar.gz"/>

    <property name="archive.dir.src" value="${archive.dir}/src"/>
    <property name="archive.dir.dtd" value="${archive.dir}/dtd"/>
    <property name="archive.dir.lib" value="${archive.dir}/lib"/>

    <delete dir="${archive.dir}"/>
    <mkdir dir="${archive.dir.src}"/>
    <mkdir dir="${archive.dir.lib}"/>
    <mkdir dir="${archive.dir.dtd}"/>


    <copy todir="${archive.dir.src}">
      <fileset dir="${module.dir.src}"/>
    </copy>
    <copy todir="${archive.dir.lib}">
      <fileset dir="${module.dir.lib}"/>
      <fileset dir="${dir.jboss.client}"
               includes="jboss-client.jar jbosssx-client.jar jnp-client.jar jboss-j2ee.jar jboss-common-client.jar jboss-transaction-client.jar"
          />
    </copy>
    <copy todir="${archive.dir.dtd}">
      <fileset dir="${module.dir.dtd}"/>
    </copy>
    <chmod file="${archive.dir.src}/build.sh" perm="+x"/>
    <tar destfile="${archive.dir}.tar.gz" compression="gzip" basedir="${archive.dir}"/>
  </target>

  <target name="version_control_status" depends="init,configure">
    <delete file="build.properties"/>
    <svn>
      <update file="build.properties"/>
    </svn>
    <property file="build.properties"/>
<!--
    <svn>
      <status path="${module.dir}" textStatusProperty="vc.testStatus.textStatus"
              propStatusProperty="vc.testStatus.propStatus" lastChangedRevisionProperty="vc.testStatus.lastCommitRevision"
              revisionProperty="vc.testStatus.revision" lastCommitAuthorProperty="vc.testStatus.lastCommitAuthor"/>
    </svn>
    <echo message="${vc.testStatus.textStatus}"/>
    <condition property="vc.testStatus" value="ok">
      <and>
        <equals arg1="vc.testStatus.textStatus" arg2="normal"/>
        <equals arg1="vc.testStatus.propStatus" arg2="normal"/>
      </and>
    </condition>
-->

    <tempfile property="temp.file" destDir="${basedir}" prefix="tmpprop"/>
    <!--<propertyfile file="${temp.file}" message="vc.root=${vc.root.keyword}"/>-->
    <propertyfile file="${temp.file}">
      <entry key="vc.root" value="${vc.root.keyword}"/>
      <entry key="vc.branch" value="${vc.root.keyword}"/>
      <entry key="vc.project" value="${vc.root.keyword}"/>
      <!--<entry key="vc.root" value="$HeadURL: svn+ssh://localhost/usr/local/SVN/Project/trunk/build.properties $"/>-->
      <!--<entry key="vc.branch" value="$HeadURL: svn+ssh://localhost/usr/local/SVN/Project/trunk/build.properties $"/>-->
    </propertyfile>
    <replaceregexp file="${temp.file}" match="vc.root=\$HeadURL\\: (.*\/Project.*)\/build.properties \$$" replace="vc.root=\1"/>
    <replaceregexp file="${temp.file}" match="vc.branch=\$HeadURL\\: .*\/Project.*\/(trunk|branches)(\/(.*?))?\/build.properties \$$" replace="vc.branch=\3"/>
    <replaceregexp file="${temp.file}" match="vc.project=\$HeadURL\\: (.*\/Project).*\/build.properties \$$" replace="vc.project=\1"/>
    <property file="${temp.file}"/>
    <echo message="${vc.root}"/>
    <echo message="${vc.branch}"/>
    <echo message="${vc.project}"/>
    <delete file="${temp.file}"/>
  </target>

  <target name="version_control" depends="init,configure,version_control_status,pre_version_control">
    <input message="Enter commit message" addproperty="vc.commitmsg"/>
    <echo message=" ${vc.commitmsg}"/>
    <svn>
      <commit dir="${module.dir.vc}" message="${module.name.ver}
      ${vc.commitmsg}"/>
    </svn>
    <svn>
      <copy srcURL="${vc.root}" destURL="${vc.project}/tags/${module.name.ver}" message="${module.name.ver}
      ${vc.commitmsg}"/>
    </svn>
  </target>

  <target name="build" depends="init,increment_build,prepare_src,make_archive">
    <property name="task" value="build"/>
  </target>

  <!--<target name="nb" depends="build">-->
    <!--<property name="task" value="build"/>-->
  <!--</target>-->

  <target name="version" depends="init,increment_version,prepare_src,make_archive">
    <property name="task" value="version"/>
  </target>

  <target name="subversion" depends="init,increment_subversion,prepare_src,make_archive">
    <property name="task" value="subversion"/>
  </target>

  <target name="patch" depends="init,increment_patch,prepare_src,make_archive">
    <property name="task" value="patch"/>
  </target>

  <target name="bugfix" depends="init,increment_bugfix,prepare_src,make_archive">
    <property name="task" value="bugfix"/>
  </target>

  <!--<target name="test">-->
    <!--<echo message=""/>-->
  <!--</target>-->
</project>


Добавлено @ 06:19 
Он еще много чего интересного делает :-) 


--------------------
user posted image
PM MAIL Jabber   Вверх
vaz
Дата 20.4.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Хороший пример, попробую обстричь его для своих целей. 
PM MAIL   Вверх
drHip
Дата 27.9.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 30.5.2007

Репутация: нет
Всего: нет



Цитата

Компиляция JSP
(необходимы библиотеки jasper.jar и jasper-runtime.jar)


Все добавил, нашел еще и commoms-logging.jar
но

Код

Compiling 18 source files to E:\Java\Portal\exploded
java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
    at org.apache.jasper.JspC.<clinit>(JspC.java:98)
Exception in thread "main" 



смотрю в jasper, package org.apache.juli.logging существует, а самого LogFactory нет
И где его искать?

Tomcat 6.0, Ant 1.7.0

Добавлено через 11 минут и 19 секунд
вот что еще нашел, но перевести это не смог

Цитата

Package org.apache.juli.logging Description

Overview

This implementation of commons-logging uses a commons-logging.jar specific to a particular logging framework, instead of discovery. This takes out the guessing, is simpler, faster and more robust. Just like you chose a logging implementation, you should also use a matching commons-logging - for example you download log4j.jar and commons-logging-log4j.jar, or use jdk logging and use commons-logging-jdk.jar.

A similar packaging is used by Eclipse SWT - they provide a common widget API, but each platform uses a different implementation jar - instead of using a complex discovery/plugin mechanism.

This package generates commons-logging-jdk14.jar - i.e. the java.util implementation of commons-logging api.

PM MAIL   Вверх
batigoal
Дата 29.9.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 11
Всего: 151



drHip, я пробовал тогда под Ant 1.6. В понедельник поэкспериментирую с семеркой, попробуем разобраться.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java tools & IDE's | Следующая тема »


 




[ Время генерации скрипта: 0.1130 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.