Elementele de bază ale Apache Ant construi un sistem
Atunci când în curs de dezvoltare de software, acesta poate consta dintr-o multitudine de piese originale. De exemplu, dezvoltarea poate fi realizată de către mai multe persoane, aproape independent unul față de celălalt, și fișierele de cod sursă pentru care sunt responsabile, pot fi amplasate în locuri diferite ale sistemului de fișiere și chiar și pe mașini diferite. În plus față de fișiere de cod sursă în proiect poate fi, de asemenea, utilizat și biblioteci gata de la dezvoltatori terți (de exemplu, fișiere jar, DLL sau cam asa ceva), fișiere de configurare, o varietate de imagini și pictograme, sunete și o mulțime de orice altceva. Toate aceste lucruri pot fi, de asemenea, modificată în cursul elaborării altor persoane.
Acum, imaginați-vă că toate acestea urâțenie este necesară pentru a colecta un singur fișier arhivă comprimat, pe care utilizatorul poate descărca de pe site-ul dvs., raspakavat și imediat începe produsul. Va trebui să aducă împreună toate fișierele din sursa Java și compila, a scăpa de teste pentru a se asigura că nimeni nu a rupt proiectul a primit de clasă fișierele sunt ambalate în JAR (sau mai multe JAR'ov) pentru care doriți să generați un manifest mai corect care conține CLASSPATH, numele principal de clasă, numărul versiunii, etc. apoi aduna toate celelalte fișiere, cum ar fi bibliotecile, imagini și configs, să-l toate lucrurile în directoarele corecte, de a genera documentație, pentru a crea din acest fișier și umple-l pe server de web, și tot ceea ce sa întâmplat să scrie într-un jurnal și păstrați-l într-o bază de date, care stochează informații despre diferitele adunări. Fã toate mâinile destul de plictisitoare, și nu ar trebui să fie persoană sănătoasă mental pentru a face acest lucru.
Sistem de asamblare, cum ar fi Apache Ant. Acesta a fost creat în scopul de a automatiza tot acest proces, uneori, destul de complex și de rutină pentru asamblarea proiectului. Mai mult decât atât, în cazul proiectului Apache Ant nu trebuie neapărat să fie în Java, și nu trebuie să fie toate software-ul. Acesta poate fi orice, deși este axat, desigur, în primul rând în Java. În acest articol vreau un exemplu foarte simplu pentru a arăta modul în care puteți face viața mai ușoară prin utilizarea Apache Ant.
cunostinte minime despre modul de utilizare Apache Ant
Pentru a afla cum să construiască proiectul, învață furnica unui fișier XML special în care dezvoltatorul descrie toate etapele necesare pentru asamblare. De obicei, acest fișier este numit build.xml. dar poate fi diferit. Doar atunci când executați furnica este în căutarea pentru fișierul build.xml în directorul din care se execută, și atunci când se utilizează un nume personalizat, trebuie să-l treci program de furnici ca parametru.
În cazul în care termenii „țintă“ și „sarcină“ pentru a te confunda, încercați să gândiți ca ceva de genul: „Pentru a atinge orice obiectiv, aveți nevoie pentru a efectua anumite sarcini.“ De exemplu, pentru a atinge obiectivul de „proiect Compile“, trebuie să finalizați sarcinile: „Crearea unui director pentru fișierele compilate“, „Run compilatorul javac“ și „Creează JAR“.
În plus față de scopurile, obiectivele și resursele au proprietăți. Proprietatea poate fi valabilă pentru variabile, constante și mai precis. Proprietatea are un nume și o valoare ca un șir de caractere. Valoarea proprietății este setată o dată și orice încercare de a schimba această valoare este ignorată. Proprietățile sunt utilizate în mod obișnuit în atributele de sarcini. Valorile de setare pot apărea în fișierul build.xml sau într-un fișier extern proprietăți, care este foarte convenabil și vă permite să schimbați procesul de asamblare fără a schimba build.xml.
proprietăți pot fi setate prin intermediul element-proprietate fișier valoare build.xml. Acest element poate fi folosit ca un element rădăcină în cadrul proiectului, și target'ov interior:
După cum sa menționat deja, proprietățile pot fi definite într-un fișier de proprietăți externe. Înregistrarea proprietăților în acest fișier ar putea arata astfel:
Pentru proprietățile înregistrate în dosar au fost puse la script-urile construi, trebuie să-l conectați:
Pentru a obține acces la valoarea proprietății, utilizați $. Codul de mai jos afișează valoarea unei myProp de proprietate pe nume:
Exemple de resurse pot fi, de exemplu, elemente și adresa URL a fișierului:
Cred că totul este clar, fără cuvinte.
Cu toate acestea, mai convenabil de a utiliza decât resursele individuale și colecții de resurse - elemente care reprezintă un grup de resurse similare. De exemplu, elementul mapei reprezintă un grup de fișiere care pot fi descrise în mai multe moduri diferite.
În acest exemplu, mapei va include toate fișierele java în directorul src și subdirectoarele sale, cu excepția fișierelor în numele care este cuvântul de testare caz sensibil.
Pe lângă variantele descrise de resurse, există, de asemenea, așa-numita structură-cale ca. Nu știu dacă să le atribuie colectarea de resurse, dar cel mai bun loc pentru ei, nu am venit, astfel încât menționarea acestor structuri aici. Din numele, cred că este clar că acestea sunt elemente care descriu astfel de lucruri ca calea (PATH). Conținutul lor poate fi o varietate de resurse și de colectare a acestora.
De notat că, în acest exemplu aceleași proprietăți sunt utilizate mylib.dir și extlib.dir, valori care sunt căi pentru en și biblioteci vneshnimim, respectiv.
În structurile de cale cum ar fi descrise, Ant va folosi în mod automat separatorul de caractere corect pentru separarea resurselor corespunzătoare a sistemului de operare pe care ruleaza.
O foarte bună oportunitate în structurile de rută ca este posibilitatea unei structuri care să se refere la o alta folosind id-ul și atributele refid:
Pentru mai multe informații despre resursele pot fi citite aici.
Sarcinile sunt acțiuni care pot fi puse în aplicare cu orice resurse sau fără participarea lor. Cele mai comune sarcini sunt prezentate în tabel.
sarcini utilizate frecvent
Mai jos este un exemplu simplu de utilizare a sarcinilor.
Compilarea un fișier cu cod java:
Uneori, pentru a efectua unele sarcini doar suficient indicații atribute corecte, dar altul decât cel în eticheta problemei poate fi și sub-elemente, care, de exemplu, pot descrie resursele cu care să lucreze problema. O utilizare mai interesantă a diferitelor sarcini vor fi demonstrate mai târziu în construi proiectului un exemplu simplu.
Lista completă a problemelor prezentate aici.
Deci, am ajuns la obiectivul :) Pentru a construi script-ul întreg construi. Tu stabili obiective și să le realizeze cu sarcinile și utilizarea resurselor. De ce să folosiți un scop în cazul în care toate sarcinile pe care le puteți scrie direct pe elementul de proiect rădăcină? Și apoi, că obiectivele permit un script construi împărțit în etape logice finite individuale care pot fi dependente unele de altele. Ie o țintă poate fi etichetat ca un dependent de un alt obiectiv și pentru a realiza este necesar ca a fost atins în primul rând obiectivul pe care aceasta depinde.
În cazul în care problema se află în elementul de proiect rădăcină, furnica, care trece prin secvențial fișier build.xml le execută. Cu această abordare, puteți determina pentru tine doar un exemplu de realizare a ansamblului. Atunci când se utilizează în scopuri, puteți specifica ant'u ce scop să fie atins, și el însuși va verifica dependențele sale și de a efectua primul gol pe care principal.
În exemplul descris scopul foarte real, cu excepția faptului că în locul elementelor ecou în ele ar trebui să fie mai multe sarcini utile. În elementul de proiect este setat pentru a atribui egal pentru a compila, ceea ce înseamnă că furnica implicit va executa țintă compilarii, care depinde de make.build.dirs scop, astfel încât make.build.dirs țintă, și apoi compila se realizează mai întâi implicit. Dacă ant'u de pornire pentru a indica dist scop, care depinde atât de două obiective și compila make.dist.dirs, primul pas descris mai sus este executat, atunci make.dist.dirs, și numai apoi dist:
În plus, în exemplul de cum este obiectivul curat, care nu depinde de nici un alt scop, și, de asemenea, nu există nici un scop la care depinde de curat, astfel încât acest obiectiv poate fi apelată numai în mod explicit ant'om: furnica curat.
În plus față de dependențele obiectivul țintă, există o dependență de proprietățile țintei, mai precis în ceea ce privește ant'a pentru a controla procesul de construcție se numește condiție. Esența condițiilor este că ținta poate fi realizată sau nu efectuate, în funcție de faptul dacă valoarea unei proprietăți sau nu este instalat.
În acest exemplu, build.full țintă va fi executat numai dacă este setat sovystva build.simple completă, în caz contrar, va fi executat. Absolut indiferent de valoare este stabilită în proprietatea deplină, acesta poate fi adevărat și fals, precum și orice altă linie, chiar goale.
Exemplu construi proiect folosind Apache Ant
Considerăm acum un proces relativ simplu construi mic proiect.
Pentru a se asigura că script-ul de mai jos construi este într-adevăr merge la locul de muncă și de proiect de sine stătător, am scris un cod de program foarte mic, care nu va duce, pentru că este, în acest caz, nu este necesar. Programul este format din trei fișiere java: ValuesGenerator.java, Statistic.java și Main.java. In ValuesGenerator.java metoda descrisă pentru generarea de date aleatorii in tehnicile Statistic.java pentru găsirea minim, valorile medii și maxime ale șirului și stocate în principal metoda Main.java (), în care clasele ValuesGenerator apel și metode statistice. Clasa de statistică utilizează pentru a calcula valorile bibliotecii Apache Commons Math și toate programul de lucru este scris într-un fișier jurnal, folosind biblioteca log4j. De asemenea, în catalog cu proiectul este un mic fișier readme.txt cu descrierea programului.
Provocarea este de a fi capabil de a crea automat un zip-fișier cu pachetul de distribuție.
make.build.dirs și make.dist.dirs de obiectiv, ar trebui să fie deja foarte clar. Ei nu fac nimic inteligent, dar numai pentru a crea un director. Singurul lucru care poate fi remarcat, în acest caz, nu trebuie să se înregistreze în aceste două sarcini mkdir și ar putea face același lucru, pentru că mkdir poate crea un lanț de directoare dintr-o dată.
Scopul compilarii cuprinde sarcinile necesare pentru a compila codul sursă. Înainte de a apela compilatorul există o cale element de creație, care va conține calea către fișierele de bibliotecă utilizate în programul nostru. Fișierele determinate cu ajutorul elementului mapei, în plus față de care calea ar putea include alte elemente ale unei colecții de resurse, de exemplu, dirset, conținând căile de director cu Java-clasele compilate sau alte elemente calea. pentru că elementul creat este o cale necesară pentru a compila CLASSPATH, acesta setează id-ul atributul corespunzător, astfel încât mai târziu vă puteți referi la această cale. După crearea căii, reprezentarea text este scris în proprietate prin intermediul membru pathconvert și afișat. În scopul de compilare enumerate în elementul de proiect ca o țintă în mod implicit, deci, dacă nu ant'u specificați o țintă pentru execuție, se va efectua exact. Acest obiectiv depinde de performanța de doar un singur make.build.dirs obiectiv.
Scopul javadoc generează documentația javadoc. detaliului nu voi descrie, doar adus la demonstrație.
Scopul curat și simplu de scandalos și pur și simplu șterge rezultatele construcțiilor anterioare.