Poslední aktualizace: 15:20, pátek 18. června 2004
Produkty platformy Eclipse vyžadují správnou instalaci na počítač koncového uživatele. K sestavení spustitelných instalátorů, které automatizují instalaci, aktualizaci a odebírání instalace, se často používají speciální nástroje pro práci s balíčky, např. InstallShield a RPM. Tento text popisuje, jak napsat instalátor pro produkt založený na Eclipse a pro samostatně instalovatelná rozšíření produktů založených na Eclipse.
Předpokládejme, že pracovní skupina vyvíjející produkt nese odpovědnost za poskytnutí základních prvků, které si musejí najít svou cestu na počítače koncových uživatelů v podobě spustitelného instalátoru. Vytvoření spustitelného instalátoru se provádí vytvořením skriptu, protože akce prováděné v době instalace vyžadují účast koncového uživatele a ukládají soubory na jeho počítač. Tento text podrobně popisuje, co tyto instalátory potřebují provádět a jakým způsobem pracují.
Tento text lze považovat za návod pro osoby odpovědné za zápis instalátoru pro produkty založených na Eclipse. Dva dobré důvody, pro které všem autorům instalačních programů doporučujeme náš návod:
Instalátor produktu by měl být samostatný - by měl umožňovat distribuci na CD a instalaci na jakémkoli stroji s vhodným operačním systémem.
Eclipse vyžaduje ke spouštění kódu v jazyce Java běhové prostředí Java2 Java Runtime Environment (JRE). Běhová prostředí JRE jsou programovým vybavením, které poskytují dodavatelé Java na základě licence. Společnost, které dodavatel udělil licenci k šíření JRE, může JRE šířit jako součást svého produktu a poté JRE současně se svým produktem instalovat na počítač koncového uživatele. Alternativou je mít JRE na počítači konečného uživatele předinstalované a přiřazení JRE k produktu během instalace. Při použití kteréhokoli z obou uvedených způsobů produkt založený na Eclipse vyžaduje příslušné prostředí JRE a instalátor produktu musí zajistit buď instalaci JRE, nebo nalezení a vytvoření odkazů na instalované prostředí JRE.
Předpokládejme, že má být JRE instalováno s produktem. Adresář obsahující JRE je jedním ze vstupů skriptu vytváření instalátoru. Pojmenujte tento adresář
<JRE>. Tento adresář musí mít standardní adresářovou strukturu JRE se spustitelným souborem Java umístěným v jre/bin/java.exe
a s knihovnou tříd v jre/lib/rt.jar
pod adresářem <JRE>.
Skeletová struktura tohoto adresáře (pro účely reference):
<JRE>/
jre/
bin/
java.exe
lib/
rt.jar
V těchto adresářích jsou umístěny další soubory (a podadresáře); uvádíme zde pouze ukázku ilustrující obecnou strukturu. Názvy uvedené kurzívou jsou názvy produktů.
Druhým vstupem skriptu vytváření instalátoru je adresář <product
head
>, který obsahuje spouštěč daného produktu a veškeré soubory nesouvisející s Eclipse. Skeletová struktura tohoto adresáře (názvy souborů uvedené kurzívou se pro jednotlivé produkty liší):
<product head>/
Třetím vstupem skriptu vytváření instalátoru je adresář <
acmeproduct.exe
product
body
>, který obsahuje funkce a moduly plug-in vyvinuté pro produkt. Skeletová struktura tohoto adresáře (pro účely reference):
<product body>/
eclipse/
features/
com.example.acme.acmefeature_1.0.0/
feature.xml
com.example.acme.otherfeature_1.0.0/
feature.xml
plugins/
com.example.acme.acmefeature_1.0.0/
plugin.xml
about.ini
about.properties
about.mappings
plugin_customization.ini
splash.bmp
com.example.acme.otherfeature_1.0.0/
plugin.xml
about.ini
about.properties
about.mappings
com.example.acme.myplugin_1.0.0/
plugin.xml
myplugin.jar
com.example.acme.otherplugin_1.0.0/
plugin.xml
otherplugin.jar
Čtvrtým vstupem skriptu vytváření instalátoru je adresář <platform
>, který obsahuje vlastní funkce a moduly plug-in platformy Eclipse a veškeré zahrnuté nástroje jiných dodavatelů.
Tento adresář obsahuje rovněž standardní spustitelný spouštěč Eclipse, eclipse.exe
,
(v operačním systému Unix s názvem eclipse
), doprovodný program startup.jar
a veškeré ostatní soubory platformy Eclipse, které musejí být v kořenovém adresáři instalace. Skeletová struktura tohoto adresáře (pro účely reference):
<platform>
Přesný obsah vstupních adresářů <
eclipse/
eclipse.exe
startup.jar
features/
org.eclipse.platform_2.0.0/
org.eclipse.platform.win32_2.0.0/
org.eclipse.jdt_2.0.0/
org.eclipse.pde_2.0.0/
plugins/
org.eclipse.platform_2.0.0/
org.eclipse.core.runtime_2.0.0/
org.eclipse.core.boot_2.0.0/
org.eclipse.core.resources_2.0.0/
org.eclipse.ui_2.0.0/
org.eclipse.jdt_2.0.0/
org.eclipse.jdt.core_2.0.0/
org.eclipse.jdt.ui_2.0.0/
org.eclipse.pde_2.0.0/
org.eclipse.pde.core_2.0.0/
org.eclipse.pde.ui_2.0.0/
(další adresáře modulů plug-in org.eclipse.*)
JRE
>, <product head
>, <product body
> a <platform
> určuje soubory, které budou případně instalovány na počítač koncového uživatele.
Závěrečnými vstupy skriptu vytváření instalátoru jsou řetězce id a version primární funkce produktu; např. "com.example.acme.acmefeature"
,
a "1.0.0
";
a dále název spustitelného souboru produktu; např. "acmeproduct
.exe
".
Pro produkty, které nevyžadují vlastní spustitelný soubor produktu, se zde používá cesta ke standardnímu spustitelnému spouštěči Eclipse "eclipse/eclipse.exe
".
Tyto řetězce mají pro instalátor zvláštní význam: objevují se v názvech souborů a adresářů a obsahu souborů značkovačů vytvářených během instalace.
Během instalace by se instalátor měl chovat standardním způsobem (další podrobnosti uvádíme v seznamu kroků):
Je-li v kroku 5 zadáno umístění <install
>, instalátor zkopíruje všechny soubory v adresářích <JRE
>, <platform>,
<product
>,
a <product plug-ins>
do adresáře <install
>.
Input file | Instalovaný soubor |
<JRE>/* |
<install>/eclipse/* |
<product head>/* |
<install>/* |
<product body>/* |
<install>/* |
<platform>/* |
<install>/* |
Soubor značkovačů vytvořený v kroku 8, <install>/eclipse/.eclipseproduct
,
se používá k označení adresáře, kam se instaluje produkt založený na Eclipse, a to především pro účely hledání instalátoru rozšíření. Tento soubor značkovačů používá formát java.io.Properties
(kódování znaků ISO 8859-1 s escape sekvencí "\") a obsahuje níže uvedené informace, které identifikují produkt pro uživatele a vzájemně rozlišují jednotlivé produkty platformy Eclipse:
name=Acme Visual Tools Pro
id=com.example.acme.acmefeature
version=1.0.0
Hodnoty vlastností "id" a "version" jsou vstupy skriptu vytváření instalátoru; název produktu je znám předem a volí se jako neměnný. (Produkty by obvykle neměly přistupovat k tomuto souboru značkovačů; čtou jej a zapisují do něj pouze instalátory produktu a rozšíření.)
Krok 6 vyžaduje ověření existence souboru <install>/eclipse/.eclipseproduct
nebo <install>/eclipse/.eclipseextension
. Produkt nelze instalovat přesně na místo, kde je instalován jiný produkt nebo rozšíření.
Po instalaci všech souborů by nejvyšší úroveň instalačního adresáře měla obsahovat následující (a možná i další) soubory a podadresáře:
<install>/
Pokud instalátor produktu požaduje od uživatele informace o licenci, např. název registrovaného uživatele a licenční klíč, měly by se tyto informace zobrazovat v dialogovém okně "O produktu" (krok 10).
acmeproduct.exe
eclipse/
.eclipseproduct
eclipse.exe
startup.jar
features/
plugins/
jre/
Toto se realizuje zaznamenáním odezvy uživatele do souboru "about.mapping
"
v modulu plug-in primární funkce. Např. do <install>/plugins/com.example.acme.acmefeature_1.0.0/about.mapping
.
Soubor "about.mapping
" může předem existovat ve vstupu <product head
> nebo může být zapotřebí jej vytvořit instalátorem během instalace.
Klíče jsou čísla; hodnota klíče "n" je nahrazena podřetězcem "{n}
" ve vlastnosti "aboutText
".
Pokud má licenční klíč například číslo pole 0, je zapotřebí vytvořit soubor "about.mapping
", který bude obsahovat řádek "0=T42-24T-ME4U-U4ME
".
N.B.
Soubor "about.mapping
" je souborem ve formátu java.io.Properties
(kódování znaků ISO 8859-1 se zadáním escape sekvence "\").
Pokud se nativní kódování znaků během instalace odlišuje od ISO 8859-1, zajišťuje instalátor převod nativního kódování znaků na Unicode a vložení escape sekvence "\" na příslušná místa. Escape sekvence je zapotřebí, pokud řetězce obsahují speciální znaky (např. "\") nebo znaky mimo latinku. Například pole číslo 1 obsahující první 3 znaky řecké abecedy bude zapsáno v tomto tvaru: "1=\u03B1\u03B2\u03B3
".
V kroku 12 instalátor produktu spustí spustitelnou komponentu produktu <install>/acmeproduct.exe
se speciální volbou -initialize [doplnit přesné podrobnosti]. To způsobí, že platforma Eclipse bez zásahu obsluhy provede veškeré časově náročné prvotní zpracování a výsledky uloží do mezipaměti tak, aby se produkt po spuštění uživatelem okamžitě dostal do stavu připraveného k práci.
Během odebírání instalace by se měl odinstalátor chovat standardním způsobem:
install
>
a všech souborů v adresářích <install
>/eclipse/features
a <install
>/eclipse/plugins
včetně souborů, které sem byly uloženy jiným programem než instalátorem (např. Správcem aktualizace Eclipse).Po odinstalování produktu by měly být odstraněny soubory uložené během instalace společně s aktualizovanými funkcemi a moduly plug-in, které vytvořil Správce aktualizace Eclipse. Důležité: Během odinstalovávání mohou být v adresáři <install>
jiné adresáře a soubory, zejména <install>/eclipse/workspace/
,
<install>/eclipse/links/
a <install>/eclipse/configuration/
,
které mohou obsahovat důležitá data, která musejí být při odebírání instalace produktu zachována. Uživatel musí být schopen odinstalovávat znovu instalovat produkt do téhož umístění, aniž by došlo ke ztrátě důležitých dat.
Pokud již produkt je na počítači uživatele instalován, měl by instalátor umožnit aktualizaci nebo přechod instalovaného produktu na vyšší verzi.
Během instalace by se měl instalátor chovat standardním způsobem:
V kroku 2 lze instalovaný produkt rozpoznat na základě přítomnosti adresáře "eclipse
", ve kterém se nalézá soubor ".eclipseproduct
".
Nadřazeným adresářem adresáře "eclipse
" je instalační adresář produktu; tj. <install>/eclipse/.eclipseproduct
.
Informace obsažené v souboru značkovačů lze zobrazit za účelem potvrzení správnosti volby produktu k aktualizaci (na počítači uživatele může být instalováno několik produktů založených na Eclipse).
Instalátor by měl v kroku 3 ověřit kompatibilitu prostým porovnáním struktury podadresářů adresáře <install>/eclipse/features
. Například přítomnost odpovídající složky "com.example.acme.otherfeature_1.0.1
"
by měla zaručit uplatnění aktualizace určité služby na instalovaný produkt.
V kroku 7 může instalátor odstranit nebo nahradit kterýkoli z jím původně instalovaných souborů a přidávat nové soubory. Pozor: Určité soubory a adresáře včetně <install>/eclipse/workspace/
a <install>/eclipse/configuration
mohou být umístěny současně s instalací a mohou obsahovat důležité datové soubory, které je při přechodu produktu na vyšší verzi zapotřebí uchovat.
Při přechodu na vyšší verzi existuje vysoká pravděpodobnost, že většina souborů v adresáři <install>/eclipse/plugins/
bude shodná (podobně jako v adresáři <install>/eclipse/features/
).
Vzniká tak významná příležitost k optimalizaci v <install>/eclipse/plugins/
, protože název podadresáře, který obsahuje číslo verze modulu plug-in (nebo jeho fragmentu), se mění pouze v případě, že se mění některý ze souborů obsažených v tomto podadresáři. Jinými slovy, není zapotřebí manipulovat se soubory v adresáři <install>/eclipse/plugins/org.eclipse.ui_2.0.0
/, pokud má tento podadresář existovat i po přechodu na vyšší verzi; pokud se kterýkoli ze souborů modulu plug-in mění, dojde ke změně čísla verze modulu plug-in a k instalaci souborů aktualizovaného modulu plug-in do paralelního adresáře <install>/eclipse/plugins/org.eclipse.ui_2.0.1
/.
Očekávaným umístěním prostředí JRE je <install>/eclipse/jre/bin/javaw.exe
.
Je-li umístěno na jiném místě, je zapotřebí prostřednictvím příkazového řádku zadat absolutní cestu s použitím volby -vm
; např. -vm C:\j2jre1.3.0\jre\bin\javaw.exe
.
V tomto případě by instalátor měl přidat tuto volbu na příkazový řádek vytvářeného zástupce na pracovní ploše.
Rozšířením míníme samostatně instalovatelnou sadu funkcí a jejich modulů plug-in, které lze přiřazovat k jednomu nebo několika produktům založených na Eclipse instalovaným na určitém počítači a používat je z těchto produktů. Na rozdíl od produktu rozšíření není samostatné; rozšíření neobsahuje spustitelný soubor produktu, platformu Eclipse ani prostředí JRE.
Beze ztráty obecnosti předpokládejme, že se rozšíření skládá z jediné funkce. Prvním vstupem skriptu vytváření instalátoru je adresář <extension
>, který obsahuje jeho funkci a moduly plug-in. Předpokládáme, že rozšíření neobsahuje soubory související s Eclipse; soubory související s Eclipse budou v adresáři <extension>/
, nikoli v adresáři <extension>/eclipse/
. Skeletová struktura tohoto adresáře (pro účely reference):
<extension>/
eclipse/
features/
com.example.wiley.anvilfeature_1.0.0/
feature.xml
plugins/
com.example.wiley.anvilfeature_1.0.0/
plugin.xml
about.ini
about.properties
about.mappings
com.example.wiley.mainplugin_1.0.0/
com.example.wiley.otherplugin_1.0.0/
Přesný obsah vstupního adresáře <extension
> určuje soubory, které se případně instalují na počítač koncového uživatele.
Závěrečnými vstupy skriptu vytváření instalátoru jsou řetězce id a verze funkce rozšíření; např. "com.example.wiley.anvil
" a "1.0.0
". Tyto řetězce mají pro instalátor zvláštní význam: objevují se v názvech souborů a adresářů a obsahu souborů značkovačů vytvářených během instalace.
Instalátor rozšíření je v mnoha ohledech obdobou instalátoru produktu. Oblasti, v nichž se liší, jsou níže zvýrazněny:
Během instalace se instalátor chová standardním způsobem:
Je-li v kroku 5 zadáno umístění <install
>,
instalátor v kroku 11 zkopíruje všechny soubory v adresáři <extension>
do adresáře <install
>.
Input file | Instalovaný soubor |
<extension>/* |
<install>/* |
Kandidátem v kroku 7 může být kterýkoli z produktů Eclipse. Produkt založený na Eclipse lze rozpoznat na základě přítomnosti souboru <product install>/eclipse/.eclipseproduct
; uživateli musí být umožněno požadovat omezené prohledávání disku za účelem vyhledání instalovaných produktů (tlačítko "hledat instalované produkty") nebo procházet k adresáři, ve kterém je umístěn produkt (tj. tlačítko "procházet").
Instalátor by měl v kroku 8 ověřit kompatibilitu prostým porovnáním struktury podadresářů adresáře <product install>/eclipse/features
. Například přítomnost odpovídajícího adresáře "org.eclipse.jdt_2.*
"
znamená, že je funkce JDT součástí instalovaného produktu.
Soubor značkovačů vytvořený v kroku 10, tj. <install>/eclipse/.eclipseextension
, se používá k označení adresáře, do kterého bylo rozšíření na bázi Eclipse instalováno, zejména pro nalezení instalátorů rozšíření (obdoba souboru značkovačů produktu .eclipseproduct
). Tento soubor značkovačů používá formát java.io.Properties
(kódování znaků ISO 8859-1 a zadání escape sekvence "\") a obsahuje níže uvedené informace, které identifikují rozšíření pro uživatele a vzájemně odlišují jednotlivá rozšíření založené na Eclipse:
name=Wiley Anvil Enterprise Edition
id=com.example.wiley.anvilfeature
version=1.0.0
Hodnoty vlastností "id" a "version" jsou vstupy skriptu vytváření instalátoru; název rozšíření je znám předem a volí se jako neměnný. (Produkty by obvykle neměly přistupovat k tomuto souboru značkovačů; čtou jej a zapisují do něj pouze instalátory produktu a rozšíření.)
Po instalaci všech souborů by nejvyšší úroveň instalačního adresáře měla obsahovat následující soubory a podadresáře:
<install>/
eclipse/
.eclipseextension
features/
plugins/
Jediná významná odlišnost od instalátoru produktu spočívá ve skutečnosti, že instalátor rozšíření vytváří odkazové soubory i v ostatních produktech na bázi Eclipse, které již jsou instalovány na počítači uživatele. (Nahrazuje tak práci uživatele při ručním přiřazování nového rozšíření k jednotlivým produktům s použitím Správce aktualizace Eclipse.)
Odkazový soubor vytvořený v kroku 14 má název <product install>/eclipse/links/com.example.wiley.anvilfeature.link
;
soubor tak má název shodný s názvem adresáře funkce rozšíření s výjimkou přípony čísla verze. Odkazový soubor má formát java.io.Properties
(kódování znaků ISO 8859-1 a Escape sekvence"\").
Klíčem je "path", jehož hodnotou je absolutní cesta instalovaného rozšíření, <install>
; záznam může vypadat např. takto "path=C:\\Program
Files\\Wiley\\Anvil
".
Instalátor zajišťuje převod výchozího kódování znaků na Unicode a vložení Escape sekvence "\" na příslušná místa. Escape sekvence je obvykle zapotřebí, protože <install>
v běžném případě obsahuje speciální znaky (např. "\") a může uvádět názvy adresářů s použitím znaků mimo latinku. Produkt při svém spouštění čte odkazové soubory. Instalátor udržuje záznam o všech souborech, které vytváří tak, aby je bylo možné vyhledat při aktualizaci nebo odinstalování rozšíření.
Během odebírání instalace by se měl odinstalátor chovat standardním způsobem:
install
>
a všech souborů v adresářích <install
>/eclipse/features
a <install
>/eclipse/plugins
včetně souborů, které sem byly uloženy jiným programem než instalátorem (např. Správcem aktualizace Eclipse).Při odinstalovávání rozšíření by měly být odebrány všechny moduly plug-in a soubory vlastností; v těchto podadresářích nemají být uchovány žádné důležité informace. Uživatel tak může provádět kompletní odebrání instalace rozšíření včetně odstranění případných aktualizací uplatněných Správcem aktualizace Eclipse.
Pokud je již rozšíření na počítači uživatele instalováno, měl by instalátor umožnit aktualizaci nebo přechod instalovaného rozšíření na vyšší verzi.
Během instalace by se měl instalátor chovat standardním způsobem:
V kroku 2 lze instalované rozšíření rozpoznat na základě přítomnosti adresáře "eclipse
", ve kterém se nalézá soubor ".eclipseextension
".
Nadřazeným adresářem adresáře "eclipse
" je instalační adresář rozšíření; tj. <install>/eclipse/.eclipseextension
.
Informace obsažené v souboru značkovačů lze zobrazit za účelem potvrzení správnosti volby rozšíření k aktualizaci (na počítači uživatele může být instalováno několik rozšíření založených na Eclipse).
V kroku 7 by instalátor neměl odstranit či přepsat žádný z původně instalovaných souborů; pouze by měl přidat soubory nových verzí funkce a modulu plug-in a případně přepsat soubor značkovačů <install>/eclipse/.eclipseextension
. Ponechání starých verzí na disku uživateli umožňuje návrat před aktualizaci. Stejně jako při aktualizaci instalace produktu není zapotřebí manipulovat se soubory v adresáři <install>/eclipse/plugins/com.example.wiley.otherplugin_1.0.0
/, pokud má tento podadresář existovat i po aktualizaci; pokud se kterýkoli ze souborů modulu plug-in mění, dojde ke změně čísla verze modulu plug-in a k instalaci souborů aktualizovaného modulu plug-in do paralelního adresáře <install>/eclipse/plugins/com.example.wiley.otherplugin_1.0.1
/.