37609

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

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

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

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

Русский

2013-09-24

76 KB

23 чел.

Ниу итмо

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


 

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

35424. Общее понятие о языке и речи 400.5 KB
  Общее понятие о языке и речи 1. Виды и функции речи 1. Основные психологические теории рассматривающие процесс формирования речи 1. Преформистская теория развития речи 1.
35425. Зигмунд Фрейд: психодинамическое направление в теории личности 350 KB
  Точка зрения Роджерса на природу человека 9. Любое переживание в сознании человека в данный момент времени следует рассматривать как результат процесса избирательной сортировки в значительной степени регулируемого внешними сигналами. Более того определенное содержание переживания осознается лишь в течение короткого периода времени а затем погружается на уровень предсознательного или бессознательного по мере того как внимание человека перемещается на другие сигналы. Фрейд не первым обратил внимание на значение бессознательных процессов в...
35426. Основные направления развития представлений об эмоциях 256.5 KB
  Основные проблемы психологии эмоций 1.Определение эмоций 1. Предметность эмоций 1. Функции эмоций 1.
35427. Феномен мотивации 245.5 KB
  Феномен мотивации 1. Понятия потребности мотива мотивации. Специфика собственно человеческой мотивации 3. Отличительные характеристики мотивации человека 3.
35428. Понятие об ощущении. Роль ощущений в жизнедеятельности людей 223.5 KB
  Любое изменение в среде которое доступно для зрения слуха и других модальностей психологически презентируется в виде ощущения. Если на вкус мы не можем определить продукт сахар мед значит речь идет только об ощущениях. Болевые сигналы почти всегда презентируются как ощущения так как âпостроитьâ образ боли может только человек с очень богатым воображением. âИначе как через ощущения мы ни о каких формах вещества и ни о каких формах движения ничего узнать не можем.
35429. Общее понятие о восприятии. Отличие восприятия от ощущений 264.5 KB
  Отличие восприятия от ощущений 2. Физиологические основы восприятия 3. Свойства восприятия: предметность целостность константность структурность осмысленность избирательность 4. Закономерности восприятия: апперцепция роль моторных компонентов внимание и восприятие 5.
35430. Общие представления о памяти. Круг явлений памяти. Патологии памяти 270 KB
  Процессы памяти проявляются на всех уровнях жизни, поэтому память также называют “общеорганической функцией” (Э. Геринг, Р. Земон); она включает не только процессы сохранения индивидуального опыта, но и механизмы передачи наследственной информации
35431. ПСИХОДИАГНОСТИКА ХАРАКТЕРА И МОТИВАЦИИ 335.5 KB
  В выражении âэто характерно для негоâ содержится смысл что определенные действия поступки человека являются для него типичными закономерными. Еще в IV веке Аристотель сделал попытку описать характер как центральное личностное образование определяющее лицо индивидуальность человека. Характер человека имеет оценочное значение. В психологии характер определяется как совокупность устойчивых индивидуальных свойств человека складывающихся и проявляющихся в деятельности и общении обусловливающая типичные для него способы поведения и...
35432. Психодиагностика. ОБЩЕЕ ПОНЯТИЕ О ПСИХОМЕТРИИ И ОБЛАСТИ ЕЕ ПРИМЕНЕНИЯ 332.5 KB
  Под ВЫБОРКОЙ понимается случайным образом формируемое из генеральной или выборочной совокупности множество заданий или испытуемых. В совокупности сведений характеризующих валидность теста содержится информация об адекватности применяемой модели деятельности с точки зрения отражения в ней изучаемой психологической особенности о степени однородности заданий субтестов включенных в тест их сопоставимости при количественной оценке результатов теста в целом. для проверки нет ли упущений: преобразуйте этот список в перечень заданий...