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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Осваиваю CruiseControl & Ant 
:(
    Опции темы
PavelT100
Дата 20.1.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написал build.xml для Ant который апдейтит проект из CVS и компилирует его на С++.
примерно такой:
Код

<project name="JTViewer" default="all">
    <target name="all" depends="JTViewer"/>
    <taskdef name="texttoccxml"  classname="com.gb.bci.ant.taskdefs.TextToCCXml"/>
    <taskdef name = "vc7" classname = "com.arrizza.ant.taskdefs.VC7"/>
    <property name="out.dir" value="c:/prj"/>
    <property name="project" value="JTViewer"/>
    <property file="${out.dir}/global.properties"/>

    <target name="DeleteCompile" description="Delete files" >
      <echo message = "Delete ${out.dir}/${project}/${target.dir}" />
      <delete includeemptydirs="true">
            <fileset dir="${out.dir}/${project}/${target.dir}" includes="**/*"/>
        </delete>
    </target>
    <target name="UpdateCVS">
      <echo message = "Update ${out.dir}/${project}" />
      <cvs dest="${out.dir}/${project}" command="update"/>
    </target>
    <target name = "JTViewer" depends="DeleteCompile,UpdateCVS">
          <echo message = "*** Building ${log.name} ***" />
      <vc7 compilerfolder = "${vstudio.dir}"
          projectrootfolder = "${out.dir}"
          projectfolder = "${project}"
          project = "jt viewer"
          buildmode = "${target.dir}"
          logfile = "${out.dir}/${project}.log"
              failonerror = "false"
      />
    <texttoccxml srcfile="${out.dir}/${project}.log"
          destfile="${out.dir}/${project}-log.xml"
          target="${project}"
          task="configure"
          isError="${configure.failed}"/>    
</target>
</project>

 

где C:\PRJ\global.properties
Код

vstudio.dir=C:/Program Files/Microsoft Visual Studio .NET 2003/Common7/IDE/
log.name=JTViewer
target.dir=Debug

 

и config.xml для CruiseControl
Код

<cruisecontrol>
    <project name="JTV" buildafterfailed="false">
        <modificationset quietperiod="60">
            <cvs localworkingcopy="C:/PRJ/JTViewer" />
        </modificationset>

        <schedule interval="60">
            <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"/>
        </schedule>
        <log>
            <merge dir="projects/${project.name}/target/test-results"/>
        </log>        
        <publishers>
    <!-- reportsuccess = "never" -->
           <email buildresultsurl = ""
                mailhost="mail.microsoft.com"
                subjectprefix="[JTViewer AUTO BUILD]"
                 skipusers="true"
           >
           <always address="[email protected]" />
           </email>
         </publishers>
    </project>
</cruisecontrol>

 

Но теперь всегда шлется письмо, при каждой компиляции. А мне хотелось, чтобы письма слались только когда при компиляции возникли ошибки. Можно ли это сделать ? Если я ставлю свойство reportsuccess = "never" для email, то письма будут слаться только когда произошел сбой при BUILD, а меня всегда BUILD SUCCESS даже если компиляци произошла с ошибкой.

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



В Ant"е при ошибке билда явно вызывайте фэйл

Код

<fail message="Shit happens :("/>


Ну или в vc7 свойство failonerror поставьте в true

Это сообщение отредактировал(а) SoulKeeper - 20.1.2009, 18:19
PM MAIL   Вверх
PavelT100
Дата 21.1.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(SoulKeeper @ 20.1.2009,  18:17)
В Ant"е при ошибке билда явно вызывайте фэйл

Код

<fail message="Shit happens :("/>


Ну или в vc7 свойство failonerror поставьте в true

Пробовал и то и другое. При запуске только ant действительно писалось BUILD FAILED. Но при работе CruiseControl письмо приходит с Build Successful если reportsuccess = "never" отсутствует и не приходит вовсе если присутствует.
PM MAIL   Вверх
SoulKeeper
Дата 21.1.2009, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Версия CC какая? У меня с 2.7.3 все нормально...
PM MAIL   Вверх
PavelT100
Дата 21.1.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(SoulKeeper @ 21.1.2009,  14:58)
Версия CC какая? У меня с 2.7.3 все нормально...

CruiseControl Version 2.8.1 Compiled on November 30 2008 2335
PM MAIL   Вверх
PavelT100
Дата 22.1.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(SoulKeeper @ 20.1.2009,  18:17)
В Ant"е при ошибке билда явно вызывайте фэйл

Код

<fail message="Shit happens :("/>


Ну или в vc7 свойство failonerror поставьте в true

Извиняюсь за ламерство, но объясните еще раз - куда надо ставить fail. Что значит "при ошибке билда" ? Я записал вот так:
Код

<project name="JTViewer" default="JTViewer">
      <taskdef name="texttoccxml"  classname="com.gb.bci.ant.taskdefs.TextToCCXml"/>
      <taskdef name = "vc7" classname = "com.arrizza.ant.taskdefs.VC7"/>
      <property name="out.dir" value="c:/prj"/>
      <property name="project" value="JTViewer"/>
      <property file="${out.dir}/global.properties"/>
      
    <target name="DeleteCompile" description="Delete files" >
      <echo message = "Delete ${out.dir}/${project}/${target.dir}" />
      <delete includeemptydirs="true">
         <fileset dir="${out.dir}/${project}/${target.dir}" includes="**/*"/>
      </delete>
    </target>
    <target name="UpdateCVS">
      <echo message = "Update ${out.dir}/${project}" />
      <cvs dest="${out.dir}/${project}" command="update"/>
    </target>
    <target name = "JTViewer" depends="DeleteCompile,UpdateCVS">
          <echo message = "*** Building ${log.name} ***" />
      <vc7 compilerfolder = "${vstudio.dir}"
          projectrootfolder = "${out.dir}"
          projectfolder = "${project}"
          project = "jt viewer"
          buildmode = "${target.dir}"
          logfile = "${out.dir}/${project}.log"
          failonerror = "false" />        
    <fail message="Error in build."/>

    <texttoccxml srcfile="${out.dir}/${project}.log"
          destfile="${out.dir}/${project}-log.xml"
          target="${project}"
          task="configure"
          isError="${configure.failed}"/>    
   </target>    
</project>

и при этом мне ant всегда выдает 
BUILD FAILED
D:\CC\build.xml:27: Error in build.
 независимо от того были ошибки при компиляции или не было. Я видимо вообще в танке.

PM MAIL   Вверх
SoulKeeper
Дата 22.1.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Код

<vc7 compilerfolder = "${vstudio.dir}"
          projectrootfolder = "${out.dir}"
          projectfolder = "${project}"
          project = "jt viewer"
          buildmode = "${target.dir}"
          logfile = "${out.dir}/${project}.log"
          failonerror = "true" />  <---- Сюда



А вот этот таск что-то подозрительно называется...
Он случаем не переписывает логи круиз контрола?

Код

<texttoccxml srcfile="${out.dir}/${project}.log"
          destfile="${out.dir}/${project}-log.xml"
          target="${project}"
          task="configure"
          isError="${configure.failed}"/>   

PM MAIL   Вверх
PavelT100
Дата 22.1.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо. Сделал в build.xml failonerror = "true" />. Теперь при запуске ant при неуспешной компиляции выдается BUILD FAILED
D:\CC\build.xml:26: *** VC7 failed *** Target='c:/prj/JTViewer/jt viewer.sln'
 
но при запуске CruiseControl приходят всегда письма с темой [JTViewer AUTO BUILD] JTV build.15 Build Successful. А если я ставлю 
reportsuccess = "never" config.xml, то письма совсем не приходят.

Сделал таже 
Код

<texttoccxml srcfile="${out.dir}/${project}.log"
          destfile="${out.dir}/${project}-ANTlog.xml"
          target="${project}"
          task="configure"
          isError="${configure.failed}"/> 


тогда при успешной компиляции при запуске ant появляется лог JTViewer-antlog.xml, а при неуспешной файл этот вообще не появляется. При запуске СС появляется лог JTViewer-log.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<build time="0 hours 00 minuts 00 seconds">
<target name="JTViewer" time="ignored">
<task location="ignored" name="configure" time="ignored">
 <message priority="info"><![CDATA[------ Rebuild All started: Project: JT Viewer, Configuration: Debug Win32 ------]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[Deleting intermediate files and output files for project 'JT Viewer', configuration 'Debug|Win32'.]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[stdafx.cpp]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[W_MEMORY.CPP]]></message>
 <message priority="info"><![CDATA[W_INTL.CPP]]></message>
 <message priority="info"><![CDATA[Generating Code...]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[supergridctrl.cpp]]></message>
 <message priority="info"><![CDATA[listeditctrl.cpp]]></message>
 <message priority="info"><![CDATA[hoverbuttongroup.cpp]]></message>
 <message priority="info"><![CDATA[hoverbutton.cpp]]></message>
 <message priority="info"><![CDATA[comboinlistview.cpp]]></message>
 <message priority="info"><![CDATA[colorcomboinlistview.cpp]]></message>
 <message priority="info"><![CDATA[anibutton.cpp]]></message>
 <message priority="info"><![CDATA[waitwindow.cpp]]></message>
 <message priority="info"><![CDATA[waitdlg.cpp]]></message>
 <message priority="info"><![CDATA[optionsdlg.cpp]]></message>
 <message priority="info"><![CDATA[mainfrm.cpp]]></message>
 <message priority="info"><![CDATA[jt viewerview.cpp]]></message>
 <message priority="info"><![CDATA[jt viewerdoc.cpp]]></message>
 <message priority="info"><![CDATA[jt viewer.cpp]]></message>
 <message priority="info"><![CDATA[gotodlg.cpp]]></message>
 <message priority="info"><![CDATA[formats.cpp]]></message>
 <message priority="info"><![CDATA[finddlg.cpp]]></message>
 <message priority="info"><![CDATA[filtersdlg.cpp]]></message>
 <message priority="info"><![CDATA[filedialogex.cpp]]></message>
 <message priority="info"><![CDATA[dbstructure.cpp]]></message>
 <message priority="info"><![CDATA[Generating Code...]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[dbstructlist.cpp]]></message>
 <message priority="info"><![CDATA[comparelistctrl.cpp]]></message>
 <message priority="info"><![CDATA[comparedialog.cpp]]></message>
 <message priority="info"><![CDATA[blobwaitdlg.cpp]]></message>
 <message priority="info"><![CDATA[blobdialog.cpp]]></message>
 <message priority="info"><![CDATA[Generating Code...]]></message>
 <message priority="info"><![CDATA[Compiling resources...]]></message>
 <message priority="info"><![CDATA[Linking...]]></message>
 <message priority="warn"><![CDATA[LINK : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification]]></message>
 <message priority="info"><![CDATA[ ]]></message>
 <message priority="info"><![CDATA[Build log was saved at "file://c:\PRJ\JTVIEWER\Debug\BuildLog.htm" ]]></message>
 <message priority="warn"><![CDATA[JT Viewer - 0 error(s), 1 warning(s) ]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[---------------------- Done ----------------------]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[    Rebuild All: 1 succeeded, 0 failed, 0 skipped]]></message>
 <message priority="info"><![CDATA[ ]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[------ Rebuild All started: Project: JT Viewer, Configuration: Debug Win32 ------]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[Deleting intermediate files and output files for project 'JT Viewer', configuration 'Debug|Win32'.]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[stdafx.cpp]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[W_MEMORY.CPP]]></message>
 <message priority="info"><![CDATA[W_INTL.CPP]]></message>
 <message priority="info"><![CDATA[Generating Code...]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[supergridctrl.cpp]]></message>
 <message priority="info"><![CDATA[listeditctrl.cpp]]></message>
 <message priority="info"><![CDATA[hoverbuttongroup.cpp]]></message>
 <message priority="info"><![CDATA[hoverbutton.cpp]]></message>
 <message priority="info"><![CDATA[comboinlistview.cpp]]></message>
 <message priority="info"><![CDATA[colorcomboinlistview.cpp]]></message>
 <message priority="info"><![CDATA[anibutton.cpp]]></message>
 <message priority="info"><![CDATA[waitwindow.cpp]]></message>
 <message priority="info"><![CDATA[waitdlg.cpp]]></message>
 <message priority="info"><![CDATA[optionsdlg.cpp]]></message>
 <message priority="info"><![CDATA[mainfrm.cpp]]></message>
 <message priority="info"><![CDATA[jt viewerview.cpp]]></message>
 <message priority="info"><![CDATA[jt viewerdoc.cpp]]></message>
 <message priority="info"><![CDATA[jt viewer.cpp]]></message>
 <message priority="info"><![CDATA[gotodlg.cpp]]></message>
 <message priority="info"><![CDATA[formats.cpp]]></message>
 <message priority="info"><![CDATA[finddlg.cpp]]></message>
 <message priority="info"><![CDATA[filtersdlg.cpp]]></message>
 <message priority="info"><![CDATA[filedialogex.cpp]]></message>
 <message priority="info"><![CDATA[dbstructure.cpp]]></message>
 <message priority="info"><![CDATA[Generating Code...]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[dbstructlist.cpp]]></message>
 <message priority="info"><![CDATA[comparelistctrl.cpp]]></message>
 <message priority="info"><![CDATA[comparedialog.cpp]]></message>
 <message priority="info"><![CDATA[blobwaitdlg.cpp]]></message>
 <message priority="info"><![CDATA[blobdialog.cpp]]></message>
 <message priority="error"><![CDATA[c:\PRJ\JTVIEWER\blobdialog.cpp(151) : fatal error C1010: unexpected end of file while looking for precompiled header directive]]></message>
 <message priority="info"><![CDATA[Generating Code...]]></message>
 <message priority="info"><![CDATA[ ]]></message>
 <message priority="info"><![CDATA[Build log was saved at "file://c:\PRJ\JTVIEWER\Debug\BuildLog.htm" ]]></message>
 <message priority="warn"><![CDATA[JT Viewer - 1 error(s), 0 warning(s) ]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[---------------------- Done ----------------------]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[    Rebuild All: 0 succeeded, 1 failed, 0 skipped]]></message>
 <message priority="info"><![CDATA[ ]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[------ Rebuild All started: Project: JT Viewer, Configuration: Debug Win32 ------]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[Deleting intermediate files and output files for project 'JT Viewer', configuration 'Debug|Win32'.]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[stdafx.cpp]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[W_MEMORY.CPP]]></message>
 <message priority="info"><![CDATA[W_INTL.CPP]]></message>
 <message priority="info"><![CDATA[Generating Code...]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[supergridctrl.cpp]]></message>
 <message priority="info"><![CDATA[listeditctrl.cpp]]></message>
 <message priority="info"><![CDATA[hoverbuttongroup.cpp]]></message>
 <message priority="info"><![CDATA[hoverbutton.cpp]]></message>
 <message priority="info"><![CDATA[comboinlistview.cpp]]></message>
 <message priority="info"><![CDATA[colorcomboinlistview.cpp]]></message>
 <message priority="info"><![CDATA[anibutton.cpp]]></message>
 <message priority="info"><![CDATA[waitwindow.cpp]]></message>
 <message priority="info"><![CDATA[waitdlg.cpp]]></message>
 <message priority="info"><![CDATA[optionsdlg.cpp]]></message>
 <message priority="info"><![CDATA[mainfrm.cpp]]></message>
 <message priority="info"><![CDATA[jt viewerview.cpp]]></message>
 <message priority="info"><![CDATA[jt viewerdoc.cpp]]></message>
 <message priority="info"><![CDATA[jt viewer.cpp]]></message>
 <message priority="info"><![CDATA[gotodlg.cpp]]></message>
 <message priority="info"><![CDATA[formats.cpp]]></message>
 <message priority="info"><![CDATA[finddlg.cpp]]></message>
 <message priority="info"><![CDATA[filtersdlg.cpp]]></message>
 <message priority="info"><![CDATA[filedialogex.cpp]]></message>
 <message priority="info"><![CDATA[dbstructure.cpp]]></message>
 <message priority="info"><![CDATA[Generating Code...]]></message>
 <message priority="info"><![CDATA[Compiling...]]></message>
 <message priority="info"><![CDATA[dbstructlist.cpp]]></message>
 <message priority="info"><![CDATA[comparelistctrl.cpp]]></message>
 <message priority="info"><![CDATA[comparedialog.cpp]]></message>
 <message priority="info"><![CDATA[blobwaitdlg.cpp]]></message>
 <message priority="info"><![CDATA[blobdialog.cpp]]></message>
 <message priority="error"><![CDATA[c:\PRJ\JTVIEWER\blobdialog.cpp(151) : fatal error C1010: unexpected end of file while looking for precompiled header directive]]></message>
 <message priority="info"><![CDATA[Generating Code...]]></message>
 <message priority="info"><![CDATA[ ]]></message>
 <message priority="info"><![CDATA[Build log was saved at "file://c:\PRJ\JTVIEWER\Debug\BuildLog.htm" ]]></message>
 <message priority="warn"><![CDATA[JT Viewer - 1 error(s), 0 warning(s) ]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[---------------------- Done ----------------------]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[    Rebuild All: 0 succeeded, 1 failed, 0 skipped]]></message>
 <message priority="info"><![CDATA[ ]]></message>
 <message priority="info"><![CDATA[]]></message>
 <message priority="info"><![CDATA[]]></message>
</task>
</target>
</build>



PM MAIL   Вверх
PavelT100
Дата 27.1.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот как я решил эту задачу, на мой взгляд, не эффективно, но по другому я не знаю, как.  Все сделал средствами Ant. СС только следит за CVS и если там что-то изменилось запускает ant вместе с его build.xml. В build.xml берется проект из CVS, компилирует его, затем запускается внешняя программа, я напиал ее на JS которая анализирует лог компиляции и если компиляция произошла с ошибками, то создается некий файл error.txt. После этого делается проверка на файл error.txt и поылается письмо.
Код

   <target name = "sendemail" depends="JTViewer, myTarget.check" if="myTarget.run">
    <echo message = "Send Email" />
    <mail mailhost="mail.microsoft.com" subject="Ant build" files="${out.dir}/${project}.log">
        <from address="[email protected]"/>
        <to address="[email protected]"/>
        <message>The ${project} build has completed</message>
    </mail>
   </target>
    <target name="myTarget.check" depends="ExecJSMain">
     <condition property="myTarget.run">
           <and>
              <available file="${out.dir}\error.txt"/>
           </and>
     </condition>
    </target>
   <target name = "ExecJSMain">
    <echo message = "ExecJSMain" />
    <exec dir="${out.dir}" executable="wscript.exe">
      <arg line="ex.js"/>
    </exec>
   </target>

Поставленная цель выполнена. Но покритикуйте меня, пожалуйста. Как все-таки такую задачу решить чистыми средствами CC & Ant без JS ?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0918 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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