Automatizare în dezvoltarea aplicațiilor
Exerciții practice
- Folosiți arhiva cu resurse de aici.
- Descărcați și dezarhivați fișierul:
wget http://open-source.cs.pub.ro/summer-school/res/tasks/tasks-auto-dev.zip unzip tasks-auto-dev.zip
- Instalați Dia, Ant, Sun Java SDK, Flex și Bison și LaTeX:
apt-get install dia apt-get install ant apt-get install sun-java6-jdk apt-get install flex bison apt-get install texlive-latex-base texlive-latex-extra texlive-bibtex-extra texlive-publishers highlight
- Creați un repository Git în cadrul directorului obținut din dezarhivare:
git init . git add . git commit -m 'Add OSSS tasks' git config --global user.name "Prenume Nume" git config --global user.email "prenume.nume@nomail.me" git config --global color.ui auto
- Prenume și Nume reprezintă prenumele și numele vostru. La fel în cazul adresei de e-mail.
- Intrați în subdirectorul
01-update-make/
.- Folosiți comanda
make
pentru a compila sursele. Ignorați warning-urile. - Urmăriți conținutul fișierului
Makefile
. - În fișierul
loop_main.cpp
, la linia 211, este comentată funcțiadead_code_elimination()
.- Decomentați funcția.
- Pentru a putea compila codul, trebuie ca procesul de compilare automată (prin intermediul comenzii
make
) să includă fișieruldead_code.cpp
.- Realizați actualizările necesare astfel încât să compileze (prin rularea comenzii
make
. - Cât de multe acțiuni au fost necesare în cadrul noul proces de compilare?
- Comiteți schimbările efectuate:
git add Makefile loop_main.cpp git commit -m 'Use dead code elimination'
- Intrați în subdirectorul
02-make-from-scratch/
.- Cele trei subdirectoare (
cap-01/
,cap-02/
,cap-03/
) conțin surse LaTeX. Ne propunem să creăm fișiere Makefile pentru compilarea surselor.
- Intrați în subdirectorul
cap-01/
.- Rulați comanda
pdflatex cap-01.tex
. - Creați un fișier Makefile care să automatizeze procesul de mai sus.
- Aveți în vedere să folosiți țintele
all
,cap-01.pdf
șiclean
. - Actualizați fișierul Makefile pentru a defini următoarele variabile:
PDFLATEX
, comanda folosită pentru compilarea surselor.BASENAME
, numele de bază al fișierului (cap-01
).- Folosiți o construcție de forma
$(addsuffix extension, $(BASENAME))
pentru a defini noi variabile:TEX
, numele fișierului sursă (cap-01.tex
) (concanenați extensia.tex
laBASENAME
).PDF
, numele de bază al fișierului (cap-01.pdf
) (concanenați extensia.tex
laBASENAME
).
- Actualizați fișierul Makefile pentru a defini variabila
OUT_DIR
cu valoareatexfiles
.- Comanda
pdflatex
primește ca argument opțiunea-output-directory
(vezi manual) pentru a genera fișierele de ieșire acolo. - Actualizați fișierul Makefile pentru a stoca ieșirea în cadrul subdirectorului
texfiles/
și pentru a copia, la finele compilării, fișierul PDF din cadrul subdirectorului în directorul primar.
- Comiteți schimbările realizate:
git add Makefile git commit -m 'Add Makefile for cap-01'
- Intrați în subdirectorul
cap-02/
.- Copiați fișierul
Makefile
din subdirectorulcap-01/
și actualizațiBASENAME
. - Pentru compilarea corespunzătoare, trebuie să folosiți și fișierul
Makefile
din subdirectorulcode/
.- Includeți, în fișierul Makefile, în locul potrivit comenzile:
-test -d $(CODE_DIR) && make -C $(CODE_DIR) -test -d $(CODE_DIR) && make -C $(CODE_DIR) clean
- Folosiți fișierul Makefile obținut pentru a genera fișierul PDF.
- Comiteți schimbările realizate:
git add Makefile code/Makefile git commit -m 'Add Makefiles for cap-02'
- Intrați în subdirectorul
cap-03/
.- Dacă nu este instalat utilitarul
dia
instalați-l. - Copiați fișierul
Makefile
din subdirectorulcap-01/
și actualizațiBASENAME
. - Rulați comanda
make
. Ce observați? - Intrați în subdirectorul
img/
.- Folosiți comenzile de mai jos pentru a obține un fișier PDF al imaginii:
dia -t eps ierarhia-de-procese.dia epstopdf ierarhia-de-procese.eps
- Generați un fișier Makefile cât mai elegant care să obțină fișierul de PDF de mai sus din fișierul Dia.
- Reveniți în subdirectorul
cap-03/
și actualizați fișierul Makefile pentru a compila automat fișierul PDF de mai sus.- Folosiți o comandă de forma
make -C ...
la fel ca la exercițiul anterior.
- Comiteți schimbările realizate:
git add Makefile img/Makefile git commit -m 'Add Makefiles for cap-03'
- Intrați, folosind SSH, pe contul vostru de pe
swarm.cs.pub.ro
:ssh -l username swarm.cs.pub.ro
- username este numele vostru de utilizator de pe
swarm.cs.pub.ro
. - Creați directorul
git-repos/
și, în cadrul acestuia repository-ulosss.git
:mkdir git-repos cd git-repos git init --bare osss.git
- Creați directorul
~/public_html/projects/osss/
:mkdir -p ~/public_html/projects/osss/
- Lăsați terminalul deschis pentru debugging.
- Intrați în subdirectorul
03-git-hook/
.- Inițializați remote-ul
origin
la valoareausername@swarm.cs.pub.ro:git-repos/osss.git
, unde username este numele vostru de utilizator de peswarm.cs.pub.ro
. - Copiați, prin SSH (
scp
), conținutul directorului lausername@swarm.cs.pub.ro:git-repos/osss.git/hooks/
:scp -r * username@swarm.cs.pub.ro:git-repos/osss.git/hooks/
- Faceți push la repository:
git push origin master
- În urma operației de push slide-urile generate anterior vor fi publicate la URL-ul
http://swarm.cs.pub.ro/~username/projects/osss/
.
- Intrați în subdirectorul
04-ant-demo/
.- Urmăriți fișierul
build.xml
și sursele din directorulsrc/
. - Compilați sursele:
JAVA_HOME=/usr/lib/jvm/java-6-sun/ ant
- Ca să câștigați timp, puteți exporta variabila
JAVA_HOME
în shell:export JAVA_HOME=/usr/lib/jvm/java-6-sun/
- Urmăriți fișierele
.class
compilate în directorulclasses/
. - Folosiți comanda Ant de rulare a aplicației (nu va rula din cauza absenței serverului).
- Folosiți comanda Ant de generare a documentației Javadoc în directorul
doc/api/
.- Fișierul
buil.xml
dispune de regulă pentru generarea documentației. Folosiți acea regulă. - Parcurgeți documentația generată.
- Intrați în subdirectorul
05-ant-from-scratch/
.- Construiți setupul necesar astfel încât să fie compilabil cu Ant.
- Porniți de la fișierul
build.xml
de la exercițiul anterior.
- Folosiți pachetul
ro.pub.cs.sprc.chord
.- Adică trebuie adăugată, la începutul fiecărui fișier
.java
, următoarea linie:package ro.pub.cs.sprc.chord;
- Nu folosiți regulă de
run
. Sunt mai multe clase de tip main și nu are rost să complicăm fișierulbuild.xml
. - Folosiți, respectiv, regulile
build
(implicit),clean
șidoc
. - Înainte de a comite actualizările, folosiți fișiere
.gitignore
pentru a ignora fișierele obținute (fișierele.class
și fișierele de ieșire de tip Javadoc).- Hint: Puteți ignora directoarele care conțin aceste fișiere.