37609

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

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

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

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

Русский

2013-09-24

76 KB

24 чел.

Ниу итмо

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


 

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

83441. Односторонні акти держав як джерело міжнародного права 36.33 KB
  Суть одностороннього акту полягає у тому що він є результатом волевиявлення однієї держави яким вона бере на себе певні зобовязання. Односторонній акт як правило не може створювати зобовязання для інших держав. Якщо інші держави погодилися користуватися наданими правами вони зобовязані дотримуватися умов їх надання. зобовязання одностороння заява держави про те що вона бере на себе зобовязання дотримуватися в міждержавних відносинах певної поведінки відповідно до умов викладених у заяві.
83442. Акти міжнародних організацій як джерело міжнародного права 34.7 KB
  За колом адресатів акти міжнародних організацій можна поділити на рішення pro foro externo зовнішнє право організації адресатами якого є державичлени організації та pro foro interno внутрішнє право організації яке визначає порядок її функціонування. Джерелом міжнародного права може бути визнаний лише правотворчій акт міжнародної організації.
83443. Засоби визначення норм міжнародного права 35.08 KB
  Доктрина міжнародного права у широкому значенні це система поглядів та концепцій про сутність та призначення міжнародного права у певних історичних умовах. Доктрина міжнародного права у вузькому значенні це наукові праці юристівміжнародників.
83444. М’яке право 32.29 KB
  Такі норми прийнято відносити до мякого права soft lw норми якого на відміну від так званого твердого права hrd lw не породжують чітких прав та обовязків а дають лише загальну установку якої мають дотримуватися субєкти міжнародного права. Норми мякого права вирішують завдання з якими не може впоратися тверде право в таких сферах як наприклад охорона навколишнього середовища коли держави з одного боку ще не готові приймати на себе зобовязання а з іншого згодні дотримуватися певних міжнародних стандартів в...
83445. Кодифікація та прогресивний розвиток міжнародного права 31.68 KB
  Важливу роль в кодифікації міжнародного права відіграє Комісія міжнародного права КМПяка є допоміжним органом ООН. Як правило кодифікація міжнародного права супроводжується його прогресивним розвитком яке має зі мету уточнення діючих норм а також розробку нових норм та їх закріплення в міжнародних договорах. Починаючи з 1945 року під егідою ООН проводяться численні кодифікаційні конференції результатом яких наприклад є чотири конвенції з морського права Женева 1958 р.
83446. Норми міжнародного права 36.15 KB
  Міжнародно-правові норми поділяються на універсальні ~ норми міжнародного права, що встановлюються усією міжнародною спільнотою і адресуються усім субєктам міжнародного права, та норми регіональні (локальні)...
83447. Імплементація норм міжнародного права 37.07 KB
  Буткевич моністичні концепції співвідношення двох правопорядків припускають пряму дію норм міжнародного права в національній правовій системі В інших концептуальних напрямках по різному пояснюється суть процесу виконання міжнародноправових норм у внутрішньодержавній сфері. Механізм дії національного права непридатний для регулювання міжнародних відносин а міжнародне право не здатне регулювати внутрішньодержавні взаємини. Лукашуком процес входу норм міжнародного права в правову систему називається імплементація.
83448. Поняття основних принципів міжнародного права 36.28 KB
  Основні принципи міжнародного права це система основоположних норм міжнародного права які регулюють відносини між його субєктами і є критерієм правомірності міжнародних правотворчого і правозастосовчого процесів дійсності інших міжнародноправових норм. Не всі принципи міжнародного права є універсальними нормами. Існують також регіональні принципи принцип непорушності державних кордонів партикулярних локальних принципів міжнародного права.