37609

Сценарий для утилиты Apache Ant, реализующий компиляцию

Лабораторная работа

Информатика, кибернетика и программирование

Каждый этап должен быть выделен в отдельным блок сценария; все переменные и константы, используемые в сценарии должны, должны быть вынесены в отдельный файл параметров; MANIFEST.MF должен содержать информацию о версии и о запускаемом классе.

Русский

2013-09-24

76 KB

22 чел.

Ниу итмо

Лабораторная работа №4

    

Кафедра: ИПМ

Дисциплина: Основы программной инженерии

Выполнили: Манаков Роман

Непряхин Егор

Группа: 2121

2012


Задание

Написать сценарий для утилиты Apache Ant, реализующий компиляцию, текст, реализующий компиляцию, тестирование и упаковку в jar-архив кода проекта из лабораторной работы №3.

Каждый этап должен быть выделен в отдельным блок сценария; все переменные и константы, используемые в сценарии должны, должны быть вынесены в отдельный файл параметров; MANIFEST.MF должен содержать информацию о версии и о запускаемом классе.

Сценарий должен реализовывать следующие цели (target):

  •  compileкомпиляция исходных кодов проекта
  •  build компиляция исходных кодов и их упаковка в исполняемый jar-архив. Компиляцию исходных кодов реализовать посредством вызова цели compile.
  •  clean удаление скомпилированных классов и всех временных файлов (если они есть).
  •  testзапуска junit-тестов проекта. Перед запуском необходимо осуществить сборку проекта (цель build).
  •  xml - валидация всех xml-файлов в проекте..
  •  reportв случаи успешного прохождения тестов сохраняет отчет junit в формате xml, добавляет его в репозиторий svn и выполняет commit.

Apache Ant — утилита для автоматизации процесса сборки программного продукта. Управление процессом сборки происходит посредством XML-сценария.


Исходный код

Main.java

import java.util.*;

public class Main

{

   public static void main(String[] args)

   {

       ResourceBundle strings = ResourceBundle.getBundle("Strings", Locale.getDefault());

       TreeSet<Mark> marks = new TreeSet<Mark>();

       marks.add(new Mark(3, 5));

       marks.add(new Mark(0, 0));

       marks.add(new Mark(3, -4));

       marks.add(new Mark(-2, 2));

       marks.add(new Mark(-4, -3));

       marks.add(new Mark(0, -1));

       marks.add(new Mark(-4, 3));

       try{

           double r = (int) Integer.parseInt(args[0]);

           if (r < 0) {

               System.out.println(strings.getString("radiusError"));

               return;

           }

           Outline outline = new Outline(r);

           for (Mark m : marks)

           {

               if (outline.isInside(m) == 0)

                   System.out.println(m);

           }

       }

       catch (NumberFormatException e) {

           System.out.println(strings.getString("formatError"));

       }

       catch (ArrayIndexOutOfBoundsException e) {

           System.out.println(strings.getString("argumentError"));

       }

   }

}


Mark.java

public class Mark implements Comparable<Mark>

{

   public double x;

   public double y;

   public Mark(double x, double y)

   {

       this.x = x;

       this.y = y;

   }

   @Override

   public String toString()

   {

       return "(" + x + ", " + y + ")";

   }

   @Override

   public int compareTo(Mark o)

   {

       if ((x > o.x) || (x == o.x && y > o.y))

           return 1;

       else if (x < o.x || (x == o.x && y < o.y))

           return -1;

       else

           return 0;

   }

}

Outline.java

public class Outline

{

   public double r;

   public Outline(double r)

   {

       this.r = r;

   }

   public int isInside(Mark m) {

       double x = m.x;

       double y = m.y;

       boolean inTriangle = (y > 0 && y < - x + r/2) && (x < 0 && x > 0 - r/2);

       boolean inCircle = (x > 0 && x < r/2) && (y < 0 && y > -r/2) && (x*x + y*y < r*r/4);

       boolean inSquare = (x > 0 && x < r) && (y > 0 && y < r);

       if (inTriangle || inCircle || inSquare)

           return 1;

       return 0;

   }

}


OutlineTest.java

import org.junit.Test;

import java.util.ArrayList;

import static org.junit.Assert.*;

public class OutlineTest

{

   @Test

   public void testIsInside()

   {

       Outline outline;

       Mark[] marks = new Mark[] {

               new Mark(3, 5),

               new Mark(0, 0),

               new Mark(3, -4),

               new Mark(-2, -2),

               new Mark(-4, -3),

               new Mark(0, -1),

               new Mark(-4, 3)

       };

       outline = new Outline(0);

       for (Mark m : marks) {

           assertEquals(0, outline.isInside(m));

       }

       outline = new Outline(1);

       assertEquals(0, outline.isInside(marks[0]));

       assertEquals(0, outline.isInside(marks[1]));

       assertEquals(0, outline.isInside(marks[2]));

       assertEquals(0, outline.isInside(marks[3]));

       assertEquals(0, outline.isInside(marks[4]));

       assertEquals(0, outline.isInside(marks[5]));

       assertEquals(0, outline.isInside(marks[6]));

       outline = new Outline(6);

       assertEquals(1, outline.isInside(marks[0]));

       assertEquals(0, outline.isInside(marks[1]));

       assertEquals(0, outline.isInside(marks[2]));

       assertEquals(0, outline.isInside(marks[3]));

       assertEquals(0, outline.isInside(marks[4]));

       assertEquals(0, outline.isInside(marks[5]));

       assertEquals(0, outline.isInside(marks[6]));

   }

}


MarkTest.java

import org.junit.Test;

import static org.junit.Assert.*;

public class MarkTest

{

   @Test

   public void testCompareTo()

   {

       int actual;

       Mark a;

       Mark b;

       a = new Mark(0, 0);

       b = new Mark(0, 0);

       actual = a.compareTo(b);

       assertEquals(0, actual);

       a = new Mark(0, 1);

       b = new Mark(0, 0);

       actual = a.compareTo(b);

       assertEquals(1, actual);

       actual = b.compareTo(a);

       assertEquals(-1, actual);

       a = new Mark(-1, -2);

       b = new Mark(-2, -1);

       actual = a.compareTo(b);

       assertEquals(1, actual);

       actual = b.compareTo(a);

       assertEquals(-1, actual);

       actual = a.compareTo(a);

       assertEquals(0, actual);

   }

   @Test

   public void testToString() {

       String actual;

       actual = new Mark(0, 0).toString();

       assertEquals("(0.0, 0.0)", actual);

       actual = new Mark(-1.1, 10).toString();

       assertEquals("(-1.11, 10.0)", actual);

   }

}


build.xml

<project name="lab4" default="all">

   

   <target name="make.dirs">

       <mkdir dir="build"/>

       <mkdir dir="build/temp"/>

   </target>

   <target name="compile" depends="make.dirs">

       <javac srcdir="src" destdir="build/temp"/>

       <javac srcdir="tests" destdir="build/temp">

           <classpath>

               <fileset dir="lib">

                   <include name="**/*.jar"/>

               </fileset>

               <fileset dir="build/temp">

                   <include name="**/*.class"/>

               </fileset>

           </classpath>

       </javac>

   </target>

   

   <target name="build" depends="compile, native2ascii">

       <jar destfile="build/lab4.jar">

           <manifest>

               <attribute name="Main-Class" value="Main"/>

               <attribute name="Specification-Version" value="1.0"/>

           </manifest>

           <fileset dir="build/temp">

               <include name="**/*.class"/>

               <include name="**/*.properties"/>

               <exclude name="**/*Test.class"/>

           </fileset>

       </jar>

   </target>

   

   <target name="test" depends="build">

       <junit printsummary="yes" haltonfailure="no" failureproperty="junit.failure">

           <formatter type="xml" unless="junit.failure"/>

           <classpath>

               <pathelement path="build/temp"/>

               <pathelement location="lib/junit.jar"/>

           </classpath>

           

           <batchtest todir="project/trunk">

               <fileset dir="build/temp">

                   <include name="**/*Test.class"/>

               </fileset>

           </batchtest>

       </junit>

   </target>

   

   <target name="native2ascii">

       <native2ascii src="localization" dest="build/temp" ext=".properties"/>

   </target>

    

<xmlvalidate failonerror="no">

 <fileset dir="project/trunk" includes="**/*.xml"/>

 <xmlcatalog>

      <dtd

        publicId="-//ArielPartners//DTD XML Article V1.0//EN"

        location="com/arielpartners/knowledgebase/dtd/article.dtd"/>

 </xmlcatalog>

</xmlvalidate>

  

   <target name="report" depends="test">

       <exec executable="svn" dir="project/trunk">

           <arg value="add"/>

           <arg value="*.xml"/>

       </exec>

       <exec executable="svn" dir="project/trunk">

           <arg value="commit"/>

           <arg value="-m 'ant commit'"/>

       </exec>

   </target>

   

   <target name="clean" depends="report">

       <delete dir="build/temp"/>

   </target>

   

   <target name="all" depends="clean"/>

</project>

Вывод

В результате выполнения данной лабораторной работы мы изучил основы Ant и научились автоматизировать процесс сборки проектов и сразу же проводить модульное тестирование.


 

А также другие работы, которые могут Вас заинтересовать

22800. Походження назви «Україна» та «українці» 41.5 KB
  Походження назви Україна та українці Назва Україна щодо українських земель вперше зустрічається в Київському літописі 1187 р. За тих часів назва Україна поширювалася на Київщину Переяславщину Чернігівщину. Про походження назви Україна існує кілька припущень. Надєждін пояснив значення слова Україна.
22801. Ранній залізний вік на території України 63 KB
  Протягом тисячолітнього існування в Північному Причорномор'ї античні містадержави справили значний вплив на розвиток місцевих племен: скіфів сарматів слов'ян. Етногенез словян. Перші писемні згадки про словян. Існує кілька концепцій походження словян з яких найпоширеніша така: витоки слов'янської історії сягають щонайменше II тис.
22802. Походження Русі 28 KB
  Основними ознаками будьякої середньовічної держави в тому числі Київської Русі були: розміщення населення не за національним у той період за племінним принципом а за територіальним поява влади не пов'язаної з волевиявленням народу збирання данини для утримання цієї влади династичний спадковий характер влади вождя.
22803. Основні етапи розвитку Києворуської держави 29 KB
  До часів правління Аскольда вчені відносять і першу спробу введення християнства як офіційної релігії у Київській Русі. Володимир починає своє правління посадовивши синів і старших дружинників у містах Русі. У період правління Ярослава Мудрого розширюються кордони Київської Русі: від Чорного моря і пониззя Дунаю на півдні аж до Фінської затоки на півночі від Закарпаття на заході до верхів'їв Волги та Дону на сході. в Київській Русі встановлюється форма правління яку називають тріумвіратом Ярославичів Ізяслава Святослава та Всеволода.
22804. Київська Русь періоду розквіту. Володимир Великий. Ярослав Мудрий 34.5 KB
  Володимир Великий. Ставши Великим князем київським Володимир багато зробив аби зміцнити державу встановити лад і порядок. За часів Володимира в загальних рисах завершилося формування держави. Видатний політик і адміністратор Володимир здійснив серію реформ.
22805. Зовнішня політика Київської Русі та ГВК 25 KB
  Зовнішня політика Київської Русі та ГВК Починаючи із заснування Київської Русі вона досить активно займалася зовнішньою політикою у різних напрямках: політичному економічному релігійному та культурному. перервало зв'язки північносхідних земель Русі з Європою. Для Київської Русі була характерна договірна торгівля значне місце посідав звичайний обмін товар на товар .Отже і в період існування Київської Русі і під час розвитку ГалицькоВолинського князівства зовнішня політика проводилася досить активно і різнобічно.
22806. Причини та наслідки занепаду ГВК 24 KB
  останнього правителя ГалицькоВолинської держави Юрія II була успадкована князями литовської династії Гедиміновичів. Так припинила своє існування ГалицькоВолинська держава. Роль ГалицькоВолинського князівства надзвичайно велика. ГалицькоВолинське князівство відкрило широкий шлях західноєвропейським культурним впливам на Україну зберігаючи при цьому кращі традиції української національної культури.
22807. Хмельниччина 125 KB
  Це час коли ряд блискучих перемог зрушив все українське суспільство мобілізував широку підтримку для Хмельницького і перетворив суто козацьке повстання на загальноукраїнський антипольський рух. 1648 Хмельницький на чолі невеликого загону реєстрових і запорізьких козаків напав на польську залогу на острові Базавлук на Дніпрі і знищив її. Це звільнило Запорізьку Січ від польського контролю притягнуло запорожців на бік Хмельницького обраного гетьманом. Не сподіваючись поважніших труднощів польські полководці Великий гетьман М.
22808. Руїна. Становище України в другій половині XVII ст. 24.5 KB
  Серед козацьких ватажків виникли гострі розходження щодо того чи лишатися Україні під Москвою чи ж шукати покровителів серед інших сусідніх держав. Чи стане Україна унікальним суспільством вільних козаківземлеробів як цього хотіли селяни й рядове козацтво чи ж козацька старшина просто займе місце шляхти відтак повернувши розхитаний суспільний устрій знаті що відповідало б типовим для доби моделям Серед українців ще десятиліттями по смерті Хмельницького точилися запеклі суперечки навколо цих питань.