Автоматизирайте процеса на изграждане с помощта на Java и Ant

Дефинираният процес е един от най-необходимите, но често най-малко използвани инструменти при разработването на софтуер. По природа това е режийна задача, която съпътства усилията за развитие. Дефиниран процес на изграждане гарантира, че софтуерът във вашия проект за разработка се изгражда по абсолютно същия начин всеки път, когато се изпълнява компилация. Тъй като процесът на изграждане става по-сложен - например с EJB компилации или допълнителни задачи - става все по-необходимо да се постигне такава стандартизация. Трябва да установите, документирате и автоматизирате точната поредица от стъпки, доколкото е възможно.

Защо се нуждая от дефиниран процес на изграждане?

Дефинираният процес на изграждане е съществена част от всеки цикъл на разработка, тъй като помага да се намали разликата между средите за разработка, интеграция, тестване и производство. Процесът на изграждане сам ще ускори миграцията на софтуер от една среда в друга. Той също така премахва много проблеми, свързани със компилацията, пътя на класа или свойствата, които струват на много проекти време и пари.

Какво е Ant?

Ant е независим от платформата скриптов инструмент, който ви позволява да изграждате вашите скриптове за изграждане по почти същия начин като инструмента "make" в C или C ++. Можете да използвате голям брой вградени задачи в Ant без персонализиране. Някои от най-важните задачи са показани в следващата таблица, но са обяснени по-подробно в примера по-долу.

Ето някои полезни команди, които са вградени в дистрибуцията Ant.

Команда Описание
Мравка Използва се за изпълнение на друг процес на мравки в рамките на текущия.
Copydir Използва се за копиране на цяла директория.
Копиращ файл Използва се за копиране на един файл.
Cvs Обработва пакети / модули, извлечени от хранилище на CVS.
Изтрий Изтрива или един файл, или всички файлове в определена директория и нейните поддиректории.
Делтри Изтрива директория с всички нейни файлове и поддиректории.
Изпълнение Изпълнява системна команда. Когато е зададен атрибут os, тогава командата се изпълнява само когато Ant се изпълнява в една от посочените операционни системи.
Вземете Получава файл от URL адрес.
Буркан Съхранява набор от файлове.
Java Изпълнява Java клас в работещата (Ant) VM или разклонява друга VM, ако е посочена.
Явак Компилира дърво на източника в работещата (Ant) VM.
Javadoc / Javadoc2 Генерира кодова документация с помощта на инструмента javadoc.
Mkdir Прави директория.
Имот Задава свойство (по име и стойност) или набор от свойства (от файл или ресурс) в проекта.
Rmic Изпълнява rmic компилатора за определен клас.
Tstamp Задава свойствата DSTAMP, TSTAMP и TODAY в текущия проект.
Стил Обработва набор от документи чрез XSLT.

Докато са налични други инструменти за създаване на софтуерни компилации, Ant е лесен за използване и може да бъде овладян в рамките на минути. Освен това Ant ви позволява да създадете разширена функционалност, като разширите някои от класовете си. Ще покажа това разширение в следния пример.

Какво трябва да използвам Ant?

Трябва да инсталирате три компонента на машината си, за да стартирате Ant: JDK, XML парсер и Ant (вижте Ресурси за връзки).

В много случаи XML парсерът е част от lib файловете, разпространявани с бегача на Servlet или уеб сървъра. Ако не, безплатният XML парсер от java.sun.com е достатъчен.

Инсталацията на Ant се състои в изтегляне на файловете, добавяне на библиотеки на класове към пътя на класа и добавяне на бинарни файлове на Ant към пътя.

Примерен сценарий

Този примерен сценарий трябва да ви помогне да ви покаже стойността на Ant и да даде представа за ползите от него и как можете да го използвате.

Тъй като голяма част от текущата разработка на Java е фокусирана върху сървърната Java, аз избрах сървърно приложение за примера. Разработчиците, работещи върху сървърни Java приложения, обикновено се интересуват от компилирането на сървлети, разполагане на JSP файлове и разполагане на HTML файлове, конфигурационни файлове или изображения.

Обща схема за извършване на това изграждане ще включва разработването на малки скриптове на специфични за платформата езици, базирани на операционната система на сървъра. Например разработчик, работещ на NT машина, може да създаде партиден файл, който изпълнява задачите за компилация и след това изпълнява внедряването. Ако обаче производствената среда имаше Unix или Linux, разработчикът ще трябва да пренапише скрипта, като гарантира, че скриптовете са синхронизирани.

Добре, покажете ми как работи това

И така, надявам се, че ви убедих в необходимостта да използвате Ant и показах колко лесно е да се инсталира. Сега ще ви покажа колко просто Ant е да се използва, като преминете през пример, който извършва проста компилация и внедряване.

Лесен процес на изграждане с Ant (simple.xml)


  

В горния пример има какво да се обясни. Първо, трябва да разберете структурата на файла simple.xml. Това е добре форматиран XML файл, съдържащ обект на проект, който се състои от няколко целеви обекта.

Първият ред съдържа информация за цялостния проект, който предстои да бъде изграден.


  

Най-важните елементи на проектната линия са defaultи basedir.

В defaultатрибута референцията стандартната цел, която трябва да бъде изпълнена. Тъй като Ant е инструмент за изграждане на команден ред, е възможно да се изпълни само подмножество от целевите стъпки във файла Ant. Например, бих могъл да изпълня следната команда:

% ant-buildfile simple.xml init 

Това ще изпълни antкомандата и ще премине през файла simple.xml, докато initсе достигне целта. И така, в този пример по подразбиране е deploy. Процесът Ant, извикан в следния ред, ще се изпълнява през simple.xmlфайла, докато deployсе достигне командата:

% ant-buildfile simple.xml 

В basedirатрибут е доста очевидно, тъй като е основната директория, от които се извличат относителните указанията, дадени в изграждането файла. Всеки проект може да има само един basedirатрибут, така че можете да изберете или да включите напълно квалифицирано местоположение на директорията, или да разбиете големия файл на проекта на по-малки файлове с различни basedirатрибути.

Следващият ред на интерес е целевият ред. Тук са показани две различни версии:


  

В targetелемент съдържа четири атрибути: name, if, unless, и depends. Ant изисква nameатрибута, но останалите три атрибута не са задължителни.

Използвайки depends, можете да подреждате задачите на Ant, така че зависима задача да не се инициира, докато задачата, от която зависи, не бъде завършена. В горния пример задачата за почистване няма да стартира, докато initзадачата не приключи. В dependsатрибут може да съдържа и списък с разделени със запетая стойности показват няколко задачи че задачата в дискусия зависи от това.

В ifи unlessкоманди позволяват да определите команди, които трябва да се изпълняват или ако даден имот е настроен или ако не е , че собствеността е настроен. Най ifще изпълни, когато стойността на имота е зададен, и unlessще изпълни, ако стойността не е зададен. Можете да използвате availableкомандата, за да зададете тези свойства, както е показано в следващия пример, или можете да ги зададете чрез командния ред.

На initцелта от прост пример съдържа четири линии на propertyкоманди, както е показано тук:


  

Тези propertyредове ви позволяват да посочите често използвани директории или файлове. Свойството е проста двойка стойност на име, която ви позволява да се позовавате на директорията или файла като логически обект, а не като физически.

Ако искате да препраща към sourceDirпроменливата по-късно през Ant файла, можете просто да използвате следния синтаксис за предупреждение Ant да се получи стойността за този етикет: ${sourceDir}.

Две други команди, присъстващи в горния buildfile са:


  

Тези команди се използват, за да се гарантира, че в outputDir(или classesдиректорията, когато е дереферентирано, както е споменато по-горе) няма странични файлове . Първата команда премахва цялото дърво, съдържащо се под outputDir. Втората команда създава директорията отново.

Последният ред, който представлява голям интерес за разработчика, е следният ред за компилация:


  

В javacкомандата изисква източник директория (входния местоположението на файловете на .java) и дестинация директория (изхода място на файла с .classes). Важно е да се отбележи, че всички директории трябва или да съществуват преди изпълнението на antкомандата, или да бъдат създадени с помощта на mkdirкомандата. Ant не създава директории, базирани на интуиция, така че трябва да създадете outputDir, като използвате mkdirкомандата преди стъпката за компилация по-горе.

След като compileзадачата приключи, тя deployще извърши операцията за копиране, за да премести всички JSP файлове от директорията източник в директорията за разполагане. С помощта на copydirкомандата копирате цялата JSP директория от едно място на друго. Използвах copyfileкомандата за копиране на един файл със свойства като част от компилацията.

Макар че бяха необходими няколко реда за обяснение на примера, трябва да е очевидно, че Ant е лесен за използване инструмент. Използвайки този buildfile като отправна точка, трябва да можете да включите Ant в усилията си за разработка. На antкоманди показани в горния пример имат допълнителна функционалност, някои от които ще бъдат обсъдени в тази статия, остатъкът се оставя да ти заедно с препратки към документацията.

Важни задачи

На вас остава да прочетете вградените задачи, включени в разпространението на Ant. Вижте ръководството за потребителя в Ресурси за информация за всяка команда. Избрах две често използвани команди като примери за допълнителни опции, достъпни за мениджъра на компилация, без никакви персонализации.

Компилиране на код (включително EJB)

В простия пример, обсъден по-рано, видяхте проста форма на javacкомандата. Сега, ако го разгледате по-подробно, виждате, че можете да посочите флаговете на компилацията като оттегляне, отстраняване на грешки или оптимизиране, както и файловете, които ще бъдат или няма да бъдат включени в компилацията.


  

Можете да използвате include/excludeобектите вътре в javacзадачата, за да включите / изключите файлове, съответстващи на модела в nameатрибута от компилацията. От горния пример искате да включите файлове, съдържащи се във всяка директория, завършваща на .java, но в същото време искате да изключите файлове с име Script.java, освен ако свойството bsf.presentе зададено на true.

Задавате bsf.presentхотела, използвайки следната задача, че търсенията на CLASSPATH за име на класа, определени и комплекти bsf.presentспоред резултатите от търсенето:


  

В javacзаповедта няма да включва файлове, наречени version.txt от съставяне на базата на изключване, за команда по-горе.

Генериране на javadoc

Друга задача, която Ant може да помогне за автоматизирането, е генерирането на javadoc. Можете да използвате следната команда за генериране на javadoc:


  

Пакетите посочват общите пакети, които javadoc ще включва. В sourcepathатрибута сочи към мястото на изходните файлове. В javadocзаповедта предвижда също атрибути, което ви позволява да посочите заглавието на прозореца и на документа. Можете също да включите известие за авторски права в долната част на всяка javadoc страница, като използвате bottomатрибута.

Може ли Ant да направи XYZ?

На този етап видяхте някои от възможните задачи в процеса на вашето изграждане, които Ant може да автоматизира. Тези задачи са включени в полето Ant. Може да искате да персонализирате Ant, за да ви помогне да изпълнявате някои по-трудни задачи като изграждане на EJB и извършване на дистанционно управление на конфигурацията. Някои от вас може да искат да увеличат възможностите за отчитане на Ant или да конструират потребителски интерфейс, който може да стартира Ant процеса.

Простият отговор на въпроса "Може ли Ant да направи XYZ?" е "Да, но може да се наложи да го персонализирате."

Удължаване на Ant

Две разширения на Ant са интересни за обсъждане в този момент. Те са увеличени отчитане и възможност за дистрибуция на код от разстояние с помощта на Ant.

Подобрения в отчитането