37609

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

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

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

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

Русский

2013-09-24

76 KB

16 чел.

Ниу итмо

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


 

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

2671. История Кыргызстана 683 KB
  История Кыргызстанаэ Первобытнообщинный строй. Первые следы человеческой деятельности на Тенир-Тоо. Первые достоверные следы человека на территории Кыргызстана относятся к палеолиту — древнекаменному веку (800—100 тыс. лет). Самые древни...
2672. Определение структуры технологических процессов (систем) 103.5 KB
  Определение структуры технологических процессов (систем). Содержание лабораторной работы Цель работы - выработать навыки получения  модели технологической процесса (системы) на основе анализа и син...
2673. Обработка информации, связанная с графическими изображениями на экране 382.5 KB
  Обработка информации, связанная с графическими изображениями на экране. Обработка информации, связанная с графическими изображениями на экране монитора или на бумаге, подразделяется на 3 основные части: Распознавание образов (изображений) есть совок...
2674. Расчёт режимов короткого замыкания в электроэнергетической системе 342.01 KB
  Расчет режимов короткого замыкания (КЗ) в электроэнергетической системе (ЭЭС) требуется производить как при эксплуатации, так и при развитии энергосистемы, в частности, при вводе новых объектов: электрических станций и подстанций. При этом для прове...
2675. Теория сварочных процессов 164.04 KB
  Расчет задания Листы из низкоуглеродистой стали (СТ-3) толщиной 0,012 м сваривают встык за один проход. Выбор способа и параметров режима дуговой сварки Для листов из низкоуглеродистой стали толщиной 0,012 м выбираем механизированную дуговую сварку...
2676. Организация платёжной системы в сфере безналичных расчётов 480.88 KB
  В последние годы тема электронных денег принимает все большую актуальность. Эксперты, анализирующие тенденции создания нового экономического пространства с общей валютой, в своих отчетах делают упор на тематику пластиковых карточек. На сего...
2677. Визначення густини тіл правильної геометричної форми 155.93 KB
  Визначення густини тіл правильної геометричної форми. Мета роботи - освоїти один із методів визначення густини тіл. Прилади і матеріали: тіла правильної геометричної форми, терези, важки, штангенциркуль...
2678. Управление эксплуатационной работой и качеством перевозок 367.04 KB
  График движения поездов является основой организации всей перевозочной работы на железнодорожном транспорте. Он обязателен для всех подразделений железных дорог: станций, локомотивных депо, пунктов технического обслуживания и ремонта вагонов, тяговы...
2679. Формирование ассортиментной политики на примере ОАО Казанский жировой комбинат 673.27 KB
  В современных условиях развития рыночных отношений отечественные промышленные предприятия нуждаются в разработке оптимальной ассортиментной политики, которая отвечала бы с одной стороны сложившейся в стране рыночной ситуации, тенденциям ее ...