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 и научились автоматизировать процесс сборки проектов и сразу же проводить модульное тестирование.


 

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

80198. Усиление сигналов. Типы и параметры усилителей 99.11 KB
  Во многих радиоэлектронных устройствах имеют место колебания, частоты которых близки к нулю. Для усиления медленно меняющихся во времени сигналов применяют усилители постоянного тока (УПТ). Современные УПТ в основном выполняют в виде интегральных микросхем
80199. Цифровая модуляция. Виды цифровой модуляции 80.5 KB
  число различных его элементов которые преобразуются в последовательность элементов посылок сигнала {Unt} путем воздействия кодовых символов на высокочастотное несущее колебание UНt. Долгое время не находила практического применения изза сложности восстановления в приемнике опорного несущего колебания строго синфазного с несущей частотой принимаемого сигнала. Так как на практике при приеме сигнала сложно определить абсолютное значение начальной фазы то проще определять относительный фазовый сдвиг между двумя соседними символами....
80200. Основные принципы передачи и приема информации 146.5 KB
  В качестве сигнала можно использовать любой физический процесс изменяющийся в соответствии с переносимым сообщением. целесообразно ввести параметры передаваемого сигнала которые являются основными с точки зрения его передачи. Такими параметрами являются длительность сигнала Тс его ширина спектра Fc и динамический диапазон Dc. Длительность сигнала Тс является естественным его параметром определяющим интервал времени в пределах которого данный сигнал существует.
80201. Радиотехнические сигналы. Теория сигналов. Классификация. Основные характеристики сигналов 70.73 KB
  Изменение во времени напряжения, тока, заряда или мощности в электрических цепях называют электрическим колебанием. Используемое для передачи информации электрическое колебание является сигналом.
80202. Спектральное представление сигналов 109 KB
  Представление сигнала в виде ряда может использоваться и как исходное при его описании и анализе. Фурье свел единую функцию трудно поддающуюся математическому описанию к более удобным в обращении рядам гармонических тригонометрических функций которые в сумме дают исходную функцию. Представим периодический сигнал наиболее распространенной в теории сигналов тригонометрической синуснокосинусной формой ряда Фурье...
80203. Случайные сигналы. Корреляционный анализ сигналов 82.5 KB
  Отличительной чертой случайного сигнала является то что его мгновенные значения заранее не предсказуемы. Важно и то что чаще всего наблюдают относительно небольшие отклонения амплитудных значений случайного сигнала от некоторого среднего уровня; чем больше отклонения по абсолютному значению тем реже их наблюдают. Располагая сведениями о вероятностях флуктуации различного уровня удается создать математическую модель случайного колебания приемлемую для детального анализа случайного процесса. называемых реализациями случайного процесса...
80204. Модулированные сигналы. Радиосигналы с аналоговыми видами модуляции 192.5 KB
  Модулированные сигналы Под модуляцией понимают процесс медленный по сравнению с периодом несущего колебания при котором один или несколько параметров несущего колебания изменяют по закону передаваемого сообщения. Получаемые в процессе модуляции колебания называют радиосигналами. В современных цифровых системах передачи информации широкое распространение получила квадратурная амплитуднофазовая или фазоамплитуд ная ФАМ; mplitude phse modultion...
80205. Аналіз ринкових можливостей 123.5 KB
  Аналіз ринкових можливостей План Маркетингові можливості фірми. Маркетингові можливості фірми Будьякій організації слід самій вміти виявляти ринкові можливості. Маркетингова можливість фірми це найбільш привабливий напрям зосередження маркетингових зусиль за допомогою яких конкретна фірма може досягти найбільших переваг. Ринкові можливості Маркетингові Мета можливості...
80206. Інформація в маркетинговій діяльності 97 KB
  Інформація в маркетинговій діяльності План Система маркетингової інформації Процес маркетингового дослідження Система маркетингової інформації Загальний маркетинговий цикл включає в себе: маркетингові дослідження; планування; організацію маркетингу і контроль маркетингової діяльності. Маркетингова інформаційна система Процес маркетингового дослідження Мета маркетингових досліджень полягає у звязку споживачів і виробників шляхом маркетингової інформації для досягнення мети підприємства і визначення шляхів оптимального використання його...