37609

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

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

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

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

Русский

2013-09-24

76 KB

15 чел.

Ниу итмо

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


 

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

79085. Защита права собственности. Иски. Ответственность добросовестного и недобросовестного владельца перед собственником. Прекращение права собственности 20.82 KB
  Этот иск представлялся собственнику для истребования вещи владение которой им утрачено. Таким образом сторонами в виндикационном процессе являлись: в качестве истца собственник не имеющий фактического владения вещью; в качестве ответчика фактический обладатель вещи как держатель так и владелец ее притом владелец как недобросовестный так и добросовестный. Добросовестный владелец отвечал за состояние вещи со времени предъявления иска. вещи регулярно получаемые от другой плодоприносящей вещи при нормальном хозяйственном ее...
79086. Имущественные отношения супругов. Институт приданого. Основания прекращения брака. Конкубинат 21.11 KB
  Но принцип главенства мужа и подчинения жены проводился последовательно в течение всего того времени пока существовала практика браков cum mnu. Жена получала имя и сословное положение мужа; местожительство муха было обязательным местожительством и для жены; муж мог исковым порядком истребовать жену от всякого третьего лица у которого она находилась и т. при этом последствия нарушения верности были гораздо тяжелее для жены чем для мужа. При браке cum mnu все имущество жены поступало в полную собственность мужа сливаясь нераздельно с...
79087. Институты публичного права и изменения полномочий императора, сената и магистратуры в период домината (поздней империи) 21.7 KB
  начинается новый этап истории империи доминат во время которого Рим превратился в монархическое государство с абсолютной властью императора. Население империи превратилось из граждан в подданных императора которые стали рассматриваться даже как его рабы сервы. Большое значение для дальнейших судеб империи имели реформы Диоклетиана закрепленные и развитые в законодательстве Константина.
79088. Институты публичного права и изменения полномочий императора, сената и магистратуры в период принципата. Провинциальное управление 19.62 KB
  Этот титул впервые получил от сената основатель империи Октавиан Август поставленный первым в списке сенаторов и получивший право первым выступать в сенате что позволяло предопределять решения последнего; 2 доминат III V вв. Как консул он мог воспользовавшись правом интерцессии отменить решение любого магистрата как цензор формировать сенат из своих сторонников как трибун наложить вето на постановление сената или решение магистрата. Юридически он получал власть по решению сената и римского народа но он мог указать своего преемника...
79089. Институты публичного права Рима в период республики 24.41 KB
  Особую часть римского права составляло государственное публичное право регулирующее положение Рима как общины и столицы сначала Италии а затем и мировой державы. Эпоха римской республики это время наивысшего расцвета государственного права путем прямой законодательной деятельности народа. сохраняла свои права римская civits.
79090. Исполнение обязательства и ответственность за неисполнение обязательства 25.12 KB
  В случае неисполнения или ненадлежащего исполнения должником своего обязательства он нес ответственность перед кредитором. В более отдаленные эпохи ответственность имела личный характер: в случаях неисполнения должником лежащей на нем обязанности к нему применялись притом самим кредитором меры воздействия направленные непосредственно на его личность заключение в тюрьму продажа в рабство даже лишение жизни.Указания на такую личную ответственность содержатся еще в постановлениях XII таблиц.
79091. Историческое значение римского права. Значение римского права для современной юриспруденции 16.88 KB
  Значение римского права для современной юриспруденции. Значение римского права определяется его огромным влиянием не только на последующее развитие права но и на развитие культуры в целом.1Эти особенности римского права способствовали тому что когда развивающаяся промышленность и торговля средневековой Европы потребовали более совершенной правовой надстройки когда феодальные нормы обычного права перестали удовлетворять требованиям жизни произошел интереснейший процесс рецепция римского права.
79092. Кодификация Юстиниана; причины и процесс кодификации. Конституции, их содержание и система. Дигесты. Их состав и содержание. Кодекс Юстиниана. Новеллы 24 KB
  Предпосылки всеобщей кодификации права. Уже на относительно раннем этапе своего исторического развития юридическая техника и в целом культура римского права обнаружили потребность и стремление к обобщению и унификации источников права и вытекающих из них правовых норм. В ходе централизаторских политических и правовых реформ проводимых при активном личном участии императора была реализована и всеобъемлющая кодификация права причем на новых принципах отражавших высокий уровень юриспруденции и юридической науки Византии в рамках римской...
79093. Консенсуальные договоры. Купля-продажа Права и обязанности сторон. Эвикция 24.48 KB
  Передача вещи рассматривалось уже как исполнение консенсуального контракта. Предметом договора куплипродажи могли быть как вещи телесные например дом зерно так и нематериальные например право требования. Предметом договора могли быть как вещи уже существующие в натуре так и те которые появятся или поступят в собственность продавца только в будущем. Предмет договора куплипродажи должен был быть определенным образом индивидуализирован и поэтому вещи определенные родовыми признаками не могли отчуждаться по договору куплипродажи.