Statistics
| Revision:

svn-gvsig-desktop / tags / v2_0_Build_1217 / install / IzPack / src / tutorial / izpack-tutorial.tex @ 44029

History | View | Annotate | Download (16.9 KB)

1 5819 cesar
% ............................................................................ %
2
3
\documentclass[compress,10pt]{beamer}
4
5
\mode<presentation>
6
{
7
  \usetheme{Darmstadt}
8
  \usefonttheme{professionalfonts}
9
  \setbeamercovered{transparent}
10
}
11
12
\usepackage[english]{babel}
13
\usepackage[latin1]{inputenc}
14
15
\usepackage{graphicx}
16
\usepackage{url}
17
\usepackage{pgf}
18
19
% ............................................................................ %
20
21
\title{The IzPack tutorial}
22
23
\subtitle{Getting started with a basic installer for your software.}
24
25
\author{Julien~Ponge\inst{1}}
26
27
\institute
28
{
29
  \inst{1}%
30
  \texttt{<julien@izforge.com>}\\
31
  \url{http://www.izforge.com/}\\
32
  IzPack project founder and current maintainer.
33
}
34
35
\date{\today}
36
37
\pgfdeclareimage[height=0.5cm]{logo}{logo}
38
\logo{\pgfuseimage{logo}}
39
40
\setbeamertemplate{footline}[frame number]
41
\setbeamertemplate{navigation symbols}{}
42
\setbeamertemplate{background canvas}[vertical shading][top=blue!10,bottom=white]
43
44
\pgfdeclareimage[width=1.5cm,interploate=true]{cc}{cc}
45
\pgfdeclareimage[width=3cm,interpolate=true]{tree-view}{tree-view}
46
47
\pgfdeclareimage[width=9cm,interpolate=true]{panel-hello}{panel-hello}
48
\pgfdeclareimage[width=9cm,interpolate=true]{panel-info}{panel-info}
49
\pgfdeclareimage[width=9cm,interpolate=true]{panel-license}{panel-license}
50
\pgfdeclareimage[width=9cm,interpolate=true]{panel-packs}{panel-packs}
51
\pgfdeclareimage[width=9cm,interpolate=true]{panel-target}{panel-target}
52
\pgfdeclareimage[width=9cm,interpolate=true]{panel-install}{panel-install}
53
\pgfdeclareimage[width=9cm,interpolate=true]{panel-finish}{panel-finish}
54
55
\AtBeginSubsection[]
56
{
57
  \begin{frame}<beamer>
58
    \frametitle{Outline}
59
    \tableofcontents[currentsection,currentsubsection]
60
  \end{frame}
61
}
62
63
% ............................................................................ %
64
65
\begin{document}
66
67
% ............................................................................ %
68
69
\begin{frame}
70
  \titlepage
71
\end{frame}
72
73
% ............................................................................ %
74
75
\begin{frame}[plain]
76
77
\footnotesize
78
79
\href{http://www.creativecommons.org/}{\pgfuseimage{cc}}
80
81
\vspace{2em}
82
83
Copyright \copyright~2004, 2005 Julien \textsc{Ponge} - All Rights Reserved.
84
85
\vspace{2em}
86
\sloppy
87
This work is licensed under the \textit{Creative Commons
88
Attribution - NonCommercial - ShareAlike License}. To view a copy of this license,
89
visit
90
\href{http://creativecommons.org/licenses/by-nc-sa/2.0/}{\url{http://creativecommons.org/licenses/by-nc-sa/2.0/}}
91
or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford,
92
California 94305, USA.
93
94
\end{frame}
95
96
% ............................................................................ %
97
98
\begin{frame}
99
  \frametitle{Outline}
100
  \tableofcontents
101
\end{frame}
102
103
% ............................................................................ %
104
105
\section{Introduction}
106
107
% ............................................................................ %
108
109
\subsection{The IzPack project}
110
111
% ................................... %
112
113
\begin{frame}
114
115
\frametitle{IzWhat ?}
116
117
Fast facts:
118
  \begin{itemize}
119
    \item An open-sourced Java\texttrademark~-based cross-platform installer
120
    generator.
121
122
    \item Published under the GNU GPL license.
123
124
    \item Project started in 2001 by myself, now developed with the help of
125
    several developers and contributors (\texttt{Thanks.txt} contains about 90
126
    lines).
127
128
    \item Used by various companies and projects around the world (see the
129
    \href{http://www.izforge.com/izpack/index.php?page=references}{references
130
    page}.
131
132
    \item Available for about 22 languages.
133
134
    \item One of the most active projects at
135
    \href{http://www.berlios.de/}{BerliOS}.
136
  \end{itemize}
137
138
\end{frame}
139
140
% ................................... %
141
142
\begin{frame}
143
144
\frametitle{Features}
145
146
\begin{itemize}
147
148
  \item Cross-platform (tested on Win32, Mac OS X, Linux/i386 and FreeBSD/i386).
149
150
  \item XML-based, modular and extensible (you choose what your installer will
151
  be made of).
152
153
  \item Integrates with Jakarta Ant.
154
155
  \item Can create shortcuts for Win32 and X11 (FreeDesktop.org-compliant
156
  environments and window managers).
157
158
  \item Not dependent on native code (but can use it in a smart way).
159
160
  \item Creates uninstallers.
161
162
  \item Can get user input, substitute tokens in files, call scripts and much
163
  more...
164
165
\end{itemize}
166
167
\end{frame}
168
169
% ................................... %
170
171
\begin{frame}
172
173
\frametitle{Project life}
174
175
\begin{itemize}
176
177
  \item Online resources:
178
    \begin{itemize}
179
      \item hosted on my website at
180
      \href{http://www.izforge.com/izpack/}{\url{http://www.izforge.com/izpack/}}
181
182
      \item \href{http://www.berlios.de/}{BerliOS} hosts the developer tools
183
      (CVS, SVN, bugs tracking, wiki, mailing-lists, file releases, FTP, ...).
184
    \end{itemize}
185
186
    \item The development is very open and contributions are always welcome.
187
188
    \item Major releases (ex: $3.7.x$) are maintained in branches while the
189
    development occurs in \texttt{CVS HEAD}.
190
191
    \item Minor releases occur depending on fixes inclusion.
192
193
    \item Major releases happen depending on new features inclusion.
194
195
\end{itemize}
196
197
\end{frame}
198
199
% ............................................................................ %
200
201
\subsection{Technical overview}
202
203
\begin{frame}
204
205
\frametitle{IzPack}
206
207
\begin{columns}
208
209
  \begin{column}{6.5cm}
210
  \begin{itemize}
211
212
    \item An installer is described by an \textsl{XML installation file} that:
213
      \begin{itemize}
214
        \item arranges files into \textsl{packs}
215
        \item can be customized by some resources (depending on what you choose).
216
      \end{itemize}
217
218
    \item The compiler takes the XML file as its input to build an installer as
219
    an \textsl{executable Jar} archive.
220
221
  \end{itemize}
222
  \end{column}
223
224
  \begin{column}{4cm}
225
  \includegraphics[width=4cm,angle=270]{izpack-overview}
226
  \end{column}
227
228
\end{columns}
229
230
\end{frame}
231
232
% ................................... %
233
234
\begin{frame}
235
236
\frametitle{Installers}
237
238
\begin{columns}
239
240
  \begin{column}{6.5cm}
241
  \begin{itemize}
242
243
    \item An installer contains:
244
      \begin{itemize}
245
        \item the real files in packs
246
        \item the langpacks.
247
      \end{itemize}
248
249
    \item An installer offers a set of panels that define the steps to perform
250
    an installation.
251
252
    \item Resources can be needed by panels and GUI preferences can change the
253
    look depending on the OS (size, L\&F, ...).
254
255
  \end{itemize}
256
  \end{column}
257
258
  \begin{column}{4cm}
259
  \includegraphics[width=4cm,angle=270]{installers-overview}
260
  \end{column}
261
262
\end{columns}
263
264
\end{frame}
265
266
% ............................................................................ %
267
268
\section{Making an installer}
269
270
% ............................................................................ %
271
272
\subsection{Preliminary steps}
273
274
\begin{frame}
275
276
\frametitle{Laying out the files and folders}
277
278
\begin{columns}
279
280
  \begin{column}{7cm}
281
  \begin{itemize}
282
283
    \item Put your files in a folder. Try to make it easy to split the
284
    files tree into packs (for instance put the files of a pack into a small set
285
    of subfolders).
286
287
    \item Think about which files and folders your packs will be made of.
288
289
    \item Decide which packs will be mandatory and which packs will be optional.
290
291
  \end{itemize}
292
  \end{column}
293
294
  \begin{column}{3cm}
295
  \pgfuseimage{tree-view}
296
  \end{column}
297
298
\end{columns}
299
300
\end{frame}
301
302
% ................................... %
303
304
\begin{frame}
305
306
\frametitle{Installation panels flow}
307
308
\begin{itemize}
309
310
  \item Panels define the installation steps. Several panels are available, some
311
  even do the same functional task.
312
  \alert{You decide which panels you want and in which order.}
313
314
  \item For this tutorial, we will use the following panels:
315
    \begin{enumerate}
316
317
      \item \textsl{HelloPanel}: welcome our user to the installation process
318
319
      \item \textsl{HTMLInfoPanel}: display some informations with a structured
320
      text
321
322
      \item \textsl{LicencePanel}: the legal terms that must be agreed to reach
323
      the next installation steps
324
325
      \item \textsl{PacksPanel}: allow the user to pick the packs that she/he wants
326
      to install or not
327
328
      \item \textsl{TargetPanel}: choose where to install the files
329
330
      \item \textsl{InstallPanel}: performs the actual files installation
331
332
      \item \textsl{SimpleFinishPanel}: conclude the installation with a success.
333
334
    \end{enumerate}
335
336
\end{itemize}
337
338
\end{frame}
339
340
% ................................... %
341
342
\begin{frame}
343
344
\frametitle{Panels flow illustrated}
345
346
\begin{overprint}
347
348
  \onslide<1>\textsl{HelloPanel}\\
349
350
  \pgfuseimage{panel-hello}
351
352
  \onslide<2>\textsl{HTMLInfoPanel}\\
353
354
  \pgfuseimage{panel-info}
355
356
  \onslide<3>\textsl{LicencePanel}\\
357
358
  \pgfuseimage{panel-license}
359
360
  \onslide<4>\textsl{PacksPanel} (here \textit{ImgPacksPanel})\\
361
362
  \pgfuseimage{panel-packs}
363
364
  \onslide<5>\textsl{TargetPanel}\\
365
366
  \pgfuseimage{panel-target}
367
368
  \onslide<6>\textsl{InstallPanel}\\
369
370
  \pgfuseimage{panel-install}
371
372
  \onslide<7>\textsl{SimpleFinishPanel}\\
373
374
  \pgfuseimage{panel-finish}
375
376
\end{overprint}
377
378
\end{frame}
379
380
% ............................................................................ %
381
382
\subsection{Creating the installation files}
383
384
\begin{frame}[containsverbatim]
385
386
\frametitle{Basic installation XML file canvas}
387
388
Here is a global view of what our file will look like:
389
390
\begin{block}{\texttt{MyApp-install.xml}}
391
\small
392
\begin{verbatim}
393
<installation version="1.0">
394
395
    <info> (...) </info>
396
    <guiprefs (...)> (...) </guiprefs>
397
    <locale> (...) </locale>
398
    <resources> (...) </resources>
399
    <panels> (...) </panels>
400
    <packs> (...) </packs>
401
402
</installation>
403
\end{verbatim}
404
\end{block}
405
406
\end{frame}
407
408
% ................................... %
409
410
\begin{frame}[containsverbatim]
411
412
\frametitle{Global informations}
413
414
We will specify here:
415
  \begin{itemize}
416
      \item the authors of the application to install
417
      \item the application name, version and url
418
      \item the minimum Java\texttrademark~ version required (optional).
419
  \end{itemize}
420
421
\begin{block}{The \textsl{info} section}
422
\tiny
423
\begin{verbatim}
424
<info>
425
    <appname>MyApp</appname>
426
    <appversion>1.2.3</appversion>
427
    <authors>
428
        <author name="Snoopy" email="snoopy@myapp.org" />
429
        <author name="Foo Bar" email="foo@bar.org" />
430
    </authors>
431
    <url>http://www.myapp.org/</url>
432
    <javaversion>1.4</javaversion>
433
</info>
434
\end{verbatim}
435
\end{block}
436
437
\end{frame}
438
439
% ................................... %
440
441
\begin{frame}[containsverbatim]
442
443
\frametitle{GUI tweakings}
444
445
\begin{itemize}
446
447
  \item We can customise the default size.
448
449
  \item We can specify a Look \& Feel for a given OS, including:
450
    \begin{itemize}
451
      \item Metal (hum hum ...)
452
      \item Kunststoff, Metouia, Liquid
453
      \item JGoodies variants.
454
    \end{itemize}
455
456
  \item The default is to pick the native emulation L\&F.
457
458
\end{itemize}
459
460
\begin{block}{The \textsl{guiprefs} section}
461
\tiny
462
\begin{verbatim}
463
<guiprefs height="600" resizable="yes" width="800">
464
    <laf name="metouia">
465
        <os family="unix" />
466
    </laf>
467
</guiprefs>
468
\end{verbatim}
469
\end{block}
470
471
\end{frame}
472
473
% ................................... %
474
475
\begin{frame}[containsverbatim]
476
477
\frametitle{Choosing the available languages}
478
479
This step is quite easy. Just pick the ISO3 codes among the available languages,
480
for instance:
481
482
\begin{block}{The \textsl{locale} section}
483
\tiny
484
\begin{verbatim}
485
<locale>
486
    <langpack iso3="eng"/>
487
    <langpack iso3="fra"/>
488
    <langpack iso3="deu"/>
489
    <langpack iso3="ita"/>
490
    <langpack iso3="jpn"/>
491
    <langpack iso3="spa"/>
492
</locale>
493
\end{verbatim}
494
\end{block}
495
496
\end{frame}
497
498
% ................................... %
499
500
\begin{frame}[containsverbatim]
501
502
\frametitle{Including the needed resources}
503
504
\begin{itemize}
505
506
  \item Each panel needs resources (see the IzPack documentation). A resource
507
  associates a path to a file and an identifier.
508
509
  \item Here, we have the following resources:
510
    \begin{itemize}
511
      \item the text for \textsl{HTMLInfoPanel}
512
      \item the legal terms for \textsl{LicencePanel}
513
      \item an optional picture for the language selection box.
514
    \end{itemize}
515
516
\end{itemize}
517
518
\begin{block}{The \textsl{resources} section}
519
\tiny
520
\begin{verbatim}
521
<resources>
522
    <res src="install-readme.html" id="HTMLInfoPanel.info"/>
523
    <res src="Licence.txt" id="LicencePanel.licence"/>
524
    <res src="langsel.jpg" id="installer.langsel.img"/>
525
</resources>
526
\end{verbatim}
527
\end{block}
528
529
\end{frame}
530
531
% ................................... %
532
533
\begin{frame}[containsverbatim]
534
535
\frametitle{Specifying the panels}
536
537
Simply put the panels names in the obvious order:
538
539
\begin{block}{The \textsl{panels} section}
540
\tiny
541
\begin{verbatim}
542
<panels>
543
    <panel classname="HelloPanel"/>
544
    <panel classname="HTMLInfoPanel"/>
545
    <panel classname="LicencePanel"/>
546
    <panel classname="PacksPanel"/>
547
    <panel classname="TargetPanel"/>
548
    <panel classname="InstallPanel"/>
549
    <panel classname="SimpleFinishPanel"/>
550
</panels>
551
\end{verbatim}
552
\end{block}
553
554
\end{frame}
555
556
% ................................... %
557
558
\begin{frame}[containsverbatim]
559
560
\frametitle{Making the packs}
561
562
\begin{itemize}
563
564
  \item We use the smart Ant filesets syntax to pick the files contained in
565
  each pack.
566
567
  \item Target directories are specified. \alert{\texttt{\small\$INSTALL\_PATH}
568
  identifies the path chosen from \textsl{TargetPanel}}.
569
570
\end{itemize}
571
572
\begin{block}{The \textsl{packs} section}
573
\tiny
574
\begin{verbatim}
575
<packs>
576
    <pack name="Core" required="yes">
577
        <description>MyApp core files.</description>
578
        <fileset dir="" targetdir="$INSTALL_PATH">
579
          <include name="*.txt" />
580
          <include name="bin/**/*" />
581
          <include name="lib/**/*" />
582
        </fileset>
583
    </pack>
584
    (...)
585
</packs>
586
\end{verbatim}
587
\end{block}
588
589
\end{frame}
590
591
% ............................................................................ %
592
593
\subsection{Building the installer}
594
595
\begin{frame}
596
597
\frametitle{Ant integration}
598
599
\begin{itemize}
600
601
  \item Ant is perfect for software tasks automation.
602
603
  \item IzPack can be integrated with Ant in a simple and elegant manner.
604
605
  \item IzPack needs the following informations (the same holds true for a
606
  command-line invocation):
607
    \begin{itemize}
608
      \item the input installation XML file
609
610
      \item the name of the output installer Jar file
611
612
      \item the kind of installer (standard or web-based)
613
614
      \item the base directory, to resolve the relative paths specified for the
615
      various files of the XML installation file (files, resources, ...)
616
617
      \item the directory where IzPack is installed.
618
    \end{itemize}
619
620
\end{itemize}
621
622
\end{frame}
623
624
% ................................... %
625
626
\begin{frame}[containsverbatim]
627
628
\frametitle{Calling IzPack from Ant}
629
630
\begin{alertblock}{Warning}
631
Make the IzPack compiler jar available in the classpath before you call Ant.
632
\end{alertblock}
633
634
\begin{block}{Make the task available}
635
\tiny
636
\begin{verbatim}
637
<taskdef name="izpack" classpath="${izpack.dir}/lib/compiler.jar"
638
         classname="com.izforge.izpack.ant.IzPackTask"/>
639
\end{verbatim}
640
\end{block}
641
642
\begin{block}{Call the IzPack task}
643
\tiny
644
\begin{verbatim}
645
<izpack input="MyApp-install.xml"
646
        output="${dist.dir}/MyApp-install-${ver}.${rel}.jar"
647
        installerType="standard" basedir="${dist.dir}"
648
        izPackDir="${izpack.dir}/"/>
649
\end{verbatim}
650
\end{block}
651
652
\end{frame}
653
654
% ............................................................................ %
655
656
\section{Conclusion}
657
658
\begin{frame}
659
660
\frametitle{Summary}
661
662
\begin{itemize}
663
664
  \item You have now made a simple installer for your application. You should
665
  now feel more confident with IzPack, however you can get much more from it.
666
667
  \item You can now try some more advanced features (such as desktop shortcuts
668
  generation or scripts token replacement) or play with some other panels as
669
  well.
670
671
  \item The following resources will be of a great help:
672
  \begin{itemize}
673
674
    \item the IzPack documentation
675
676
    \item the \href{http://openfacts.berlios.de/index-en.phtml?title=IzPack}{
677
    wiki} at BerliOS
678
679
    \item the \href{http://developer.berlios.de/mail/?group_id=1408}{
680
    mailing-lists archives}
681
682
    \item real-life examples (such as IzPack itself or open-source projects that
683
    use it).
684
685
  \end{itemize}
686
687
\end{itemize}
688
689
\end{frame}
690
691
\begin{frame}
692
693
\frametitle{Supporting IzPack}
694
695
If IzPack is useful to you and/or your company, please consider supporting it
696
financially. Just think about how expensive are its proprietary competitors...
697
698
\begin{itemize}
699
700
  \item I accept donations through PayPal with my email address
701
  \small{\url{julien@izforge.com}}.
702
703
  \item Missing a feature ? Then you can offer a bounty to an IzPack developer
704
  for implementing it. Ask for the feature and see if a developer wants to make
705
  it for a donation that you can negotiate at your own discretion with her/him.
706
707
\end{itemize}
708
709
\end{frame}
710
711
\begin{frame}
712
713
\frametitle{Credits}
714
715
\begin{itemize}
716
717
  \item The \href{http://latex-beamer.sf.net/}{\LaTeX~Beamer} class.
718
719
  \item The \href{http://www.berlios.de/}{BerliOS} crew.
720
721
  \item The numerous past and present IzPack developers and contributors.
722
723
\end{itemize}
724
725
\end{frame}
726
727
% ............................................................................ %
728
729
\end{document}
730