Construiți proiectul
Adunarea (asamblare engleză) este un fișier binar care conține codul executabil al programului sau (mai rar) alt produs informativ pregătit pentru utilizare.
Automatizarea asamblării - etapa de scriere a scripturilor sau automatizarea unei game largi de sarcini legate de software-ul folosit de dezvoltatori în activitățile lor zilnice, incluzând acțiuni precum:
- compilarea codului sursă în cod binar
- binar cod de asamblare
- testarea execuției
- implementarea programului pe platforma de producție
- scrierea unei documentații de însoțire sau descrierea modificărilor aduse noii versiuni
Pentru a automatiza asamblarea proiectelor, se folosesc sisteme tradiționale de construcție, cum ar fi marcajele pe sistemele Unix-like și nmake pentru compilatorul Microsoft. De asemenea, scrierea în mod tradițional a fișierelor pentru a construi un proiect pentru aceste sisteme este o sarcină non-trivială. Desigur, folosind doar Visual Studio Mictosoft, nici nu puteți bănui existența acestor fișiere, deoarece mediul integrat de dezvoltare ascunde în mod obișnuit întreaga schemă de lucru, lăsând mai multe casete de dialog și butonul Build în afară. Dar pentru proiectele complexe care utilizează o mulțime de biblioteci terțe și proiecte interprofesionale, această abordare este adesea inacceptabilă.
Principiile de asamblare în java
1. Cum funcționează compilamentul java?
Textul programului --- \
-> Javac -----> * .class
Adăugări - [-cp] - /
Textul programului este codul sursă al programului în limba java.
Suplimentele sunt clase pe care trebuie să le țineți cont în timpul construcției (bibliotecă).
Ca rezultat, obținem un set de fișiere cu clasa de extensii. Adică, dacă folosim biblioteci terțe, trebuie să le specificăm atunci când asamblam. Se pot compila clase sau subsisteme asamblate.
Nu este întotdeauna necesar să specificăm biblioteci suplimentare pentru compilare (de exemplu, dacă avem un program în 1 fișier de program). Dar dacă mai aveți nevoie de acest lucru, atunci compilarea java trebuie să fie rulată cu argumentul "-cp" (scurt pentru -classpath). După acest argument, există o listă de biblioteci (fișiere jar sau fișiere de clasă) separate printr-un caracter delimitator (în * nix acesta este ":", în fereastra acesta este ";").
Un exemplu de compilare a unui program dintr-un fișier:
Un exemplu de compilare a unui program cu biblioteci suplimentare "myLib" și "my2ndLib":
javac -cp myLib.jar: my2ndLib.jar NotStandartHelloWorld.java
În java, nu există nicio distincție între o bibliotecă compilată, o aplicație executabilă sau un subsistem. Ce se înțelege este că, dacă doriți să creați o entitate independentă într-un singur fișier, creați un fișier jar. De exemplu, dacă creați o bibliotecă, acesta va fi un fișier borcan cu un set de clase care pot fi utilizate de către alți dezvoltatori, în cazul în care un subsistem, acesta face parte din funcționale (set de clase) efectuate în afara domeniului de aplicare al unității principale, dar a folosit în ea (ceva de genul bibliotecă privată), etc.
2. Rularea programului java.
* .class ----- --- \
Adăugări - [-cp] - /
Executarea claselor funcționează într-un mod similar compilației (chiar și aceleași argumente sunt utilizate).
Dacă după compilare avem 10 clase, atunci vom executa numai clasa care conține funcția principală, celelalte clase ar trebui să fie reprezentate ca biblioteci.
De exemplu, executarea programului cu biblioteca suplimentară "sout", care se află în folderul "lib", arata astfel:
java-cp lib / sout.jar HelloWorld
În mod implicit, toate clasele din directorul curent este inclus în calea (-cp pentru clasele din directorul curent nu trebuie specificat). La ce ne referim atunci când am compilat programul, și ca urmare a primit o mulțime de clase într-un dosar, atunci putem rula numai clasa principală, alte clase Java încearcă să se găsească în directorul curent (chiar dacă acestea sunt situate în subfoldere, java, și acolo va arunca o privire).
Această abordare este acceptabilă atunci când avem puține clase, însă pentru sistemele mari, enumerarea tuturor claselor nu este posibilă (numărul lor poate depăși mii ...). Prin urmare, puteți executa nu o clasă, ci un jar-file special asamblat. Pentru aceasta, specificați argumentele -jar.
3. Fișier de jar
Un fișier jar este o arhivă ZIP (adică, îl puteți dezarhiva). Fișierul Jar trebuie să conțină un set de clase și un fișier META-INF / MANIFEST.MF, care descrie caracteristicile fișierului jar.
Principalul mod de a crea un fișier Jar este:
jar cf jar-fișier de intrare-fișier (e)
Jar este un utilitar și un set de utilități pe care le obțineți atunci când instalați java.
Programul borcan acceptă argumente în-UNIX stil vechi: în primul rând, sunt cheile, atunci argumentele de program cu tasta argumentul specificat ultima, nu se specifică „-“ înainte de argumentele grupate argumentul scurt ( „cf“ înseamnă «-c -f»).
- Opțiunea c vă spune că doriți să creați un fișier jar.
- Opțiunea f indică faptul că doriți să creați un fișier cu un nume specific (acesta va crea un fișier numit "jar-file.jar").
- Argumentul de intrare-fișiere este o listă separată de unul sau mai multe fișiere pe care doriți să le includeți în fișierul JAR. argumentul fișierului de intrare poate conține simbolul "*". Dacă oricare dintre intrări este un director, conținutul acestor directoare este adăugat în arhiva JAR recursiv.
Când creați un fișier JAR, acesta primește automat fișierul manifest implicit (dacă nu l-ați specificat în fișierele de intrare, acesta va fi creat automat). Într-un fișier jar poate fi un singur fișier manifest cu calea specificată:
Structura generală a manifestului este:
Manifest-Versiune: 1.0Created-By: 1.6.0 (Sun Microsystems Inc)
Aceste linii arată că elementele manifestului au forma perechilor "header: value". Numele antetului este separat de valoarea sa printr-un colon. Manifestul implicit corespunde versiunii 1.0 a caietului de sarcini al manifestului și a fost creată o versiune 1.6.0 a JDK.
Manifestul poate conține, de asemenea, informații despre alte fișiere care nu sunt ambalate în arhivă (bibliotecile externe care sunt necesare pentru funcționare, acest lucru va fi discutat mai detaliat mai jos). Faptul că informațiile despre fișierul jar trebuie să fie scrise în manifeste depind de modul în care intenționați să utilizați fișierul JAR. Manifestul implicit nu face nicio ipoteză cu privire la ce informații ar trebui să scrie despre alte fișiere.
Pentru a crea un fișier jar cu un manifest:
jar cfm jar-file manifest-adăugare input-file (fișiere)
Tastele "f" și "m" necesită argumente, așa că mai întâi specificăm cheile și apoi specificăm (dacă este necesar) argumentele lipsă în aceeași ordine. La început, am specificat argumentul "f" și apoi "m", astfel încât primul argument va fi numele fișierului de ieșire, iar al doilea este numele (și calea) manifestului.
Dacă ai scris un manifest nu este una dintre opțiunile de mai sus, acestea vor fi adăugate în mod automat (care este, de asemenea, să specificați manifestul sau specificați un fișier gol, acesta este același lucru, este adesea aplicată în dezvoltarea timpurie ...). Aceasta este, dacă manifestarea dvs. este după cum urmează:
Apoi, în ultimul dosar va fi prezentat sub forma:
Manifest-Version: 1.0Created-By: 1.6.0 (Sun Microsystems Inc) Clasa principală: Main
Dacă dezvoltați o aplicație. care este furnizat fișierului JAR, trebuie să specificați cumva ce clasă din fișierul JAR este punctul de intrare al aplicației (care conține funcția principală). Furnizați aceste informații din antetul principal al clasei din manifeste, care are o vedere generală:
Clasa principală: numele clasei
Valoarea denumirii clasei este numele clasei care este punctul de intrare al aplicației.
După ce ați setat antetul Main-Class din manifest, executați fișierul JAR folosind următorul formular Java:
Nu ați specificat clasa principală din manifeste pentru a vă fi desemnat să vă desfășurați programul astfel:
Dacă doriți să specificați numai clasa principală din manifest, atunci nu este necesar să creați întregul manifest, puteți specifica dacă aveți nevoie de un parametru atunci când sunați jar:
jar cfe app.jar MyApp MyApp.class
Opțiunea e se referă la punctul de intrare.
Va trebui să vă referiți la clase din alte fișiere JAR din fișierul JAR (dacă folosiți bibliotecile terților în aplicația dvs.). Pentru a face acest lucru, trebuie să includeți în câmpuri următoarele câmpuri:
Clasă-cale: jar1-nume jar2-name nume-director / jar3-name
Această cale este indicată în raport cu locația fișierului de jar executat. De exemplu, Netbeans adaugă toate bibliotecile în directorul lib, care este plasat lângă aplicația compilată și, în consecință, indică calea către biblioteci.
Luați în considerare exemplul final al manifestului, pentru fișierul executabil de bibliotecă al bibliotecii la care se află lângă acesta în directorul "lib":
Manifest-Version: 1.0Sozdannaya-By: 1.6.0 (Sun Microsystems Inc) Main-Class: net.mycompany.product1.MainClass-Path: lib / recoder.jar lib / io-common.jar lib / f