Dynamiczne ścieżki klas to sposób ustalania przez środowisko PDE ścieżek budowania dla projektów modułów dodatkowych na platformie Eclipse 3.0.
P: Na czym polega stabilność ścieżki klasy?
O: Stabilność ścieżki klasy jest miarą zmian ścieżki klasy w
odniesieniu do opcji self-hostingu wybranej przez programistę. Idealnie
byłoby, gdyby ścieżki klas nie zmieniały się, niezależnie od elementów dodawanych do
projektów źródłowych w obszarze roboczym. Self-hosting realizowany przy użyciu projektów binarnych
oferuje dobrą stabilność ścieżek klas, ponieważ wszystkie ścieżki klas zawierają tylko odwołania do projektów. Self-hosting z użyciem zewnętrznych modułów
dodatkowych oferuje mniej stabilne ścieżki klas. Są one w dalszym ciągu
stabilne w odniesieniu do lokalnych położeń instalacji bibliotek zewnętrznych,
ale lista modułów dodatkowych jako projektów źródłowych musi pozostawać
stała dla wszystkich członków zespołu, aby można je było współużytkować za
pośrednictwem repozytorium.
Możliwość dodawania wersji modułu dodatkowego do położenia modułu dodatkowego w systemie plików (dostępna od wersji 2.0) jeszcze bardziej ograniczyła stabilność ścieżki klasy w przypadku używania zewnętrznych modułów dodatkowych.
P: Skoro projekty binarne oferują lepszą stabilność ścieżek klas,
dlaczego nie używać ich we wszystkich przypadkach?
O: Self-hosting przy użyciu importowanych projektów binarnych jest dobrym
rozwiązaniem, o ile liczba importowanych modułów dodatkowych jest względnie
mała (kilkadziesiąt). W przypadku dużych produktów z setkami modułów
dodatkowych, import całości nie jest dobrym rozwiązaniem.
Najczęściej programiści takich produktów organizują self-hosting przy użyciu kilku
projektów źródłowych i kilkudziesięciu bezpośrednio powiązanych projektów
binarnych, a wszystkie pozostałe komponenty występują jako zewnętrzne moduły
dodatkowe. Z czysto teoretycznego punktu widzenia poświęcanie czasu i zasobów na importowanie wielu dziesiątek zewnętrznych
modułów dodatkowych w celu skompilowania kilku projektów źródłowych wydaje się dziwnym rozwiązaniem.
P: Moim zdaniem metoda self-hostingu (projekty binarne/zewnętrzne moduły
dodatkowe) jest lepsza. Co się stanie, jeśli w naszym zespole wszyscy
będziemy z niej korzystać?
O: Stosowanie statycznych ścieżek klas (zarówno podczas korzystania z projektów
binarnych, jak i zewnętrznych modułów dodatkowych) uniemożliwi wybór innej metody
self-hostingu i zmusi wszystkich do korzystania z danej metody.
P: Co to są dynamiczne ścieżki klas?
O: Dynamiczne ścieżki klas to właściwość środowiska PDE, która
polega na tym, że część ścieżki klasy projektu modułu dodatkowego odnosząca
się do zależności modułów dodatkowych jest ustalana dynamicznie przy
użyciu technologii kontenerów ścieżek klas JDT. Dynamiczne ścieżki klas są
tłumaczone "w locie", dzięki czemu zawsze są aktualne w odniesieniu do bieżących warunków w
obszarze roboczym.
Dodatkowo dynamiczna natura ustalania ścieżek klas umożliwia środowisku PDE
adaptowanie się do zmian i zapewnia poprawność ścieżek klas niezależnie od
metody self-hostingu.
P: Jaka jest stabilność dynamicznych ścieżek klas?
O: Najlepsza. Ponieważ wszystkie wpisy dla wymaganych modułów
dodatkowych są zastępowane jednym wpisem kontenera ścieżki klasy, ścieżka
klasy pozostaje zawsze taka sama.
P: W jaki sposób dynamiczne ścieżki klas mogą mi pomóc?
O: Dzięki dynamicznym ścieżkom klas nie ma potrzeby podejmowania z góry
decyzji co do stylu self-hostingu. Gdy będą używane projekty binarne,
dynamiczne ścieżki klas zostaną przetłumaczone na odwołania do projektów. W
przeciwnym razie zostaną one przetłumaczone w taki sposób, aby wskazywały na pliki JAR zewnętrznych modułów
dodatkowych. W miarę dodawania lub usuwania projektów binarnych dynamiczne
ścieżki klas będą śledzić zmiany i dostosowywać się do nich. Nie będzie
potrzeby ponownego aktualizowania ścieżki klasy. Dodatkowo, gdy inne zespoły
będą chciały pobrać projekty z repozytorium CVS i skompilować je, nie będą
musiały w tym celu dostosowywać się do już wybranego stylu self-hostingu.
P: Ponieważ tłumaczenie dynamicznych ścieżek klas jest realizowane
przez jądro środowiska PDE, czy oznacza to zależność tego rozwiązania od PDE?
O: Tak. Jako dynamiczne, ścieżki klas będą zawsze ustalane "w locie",
a nie zapisane na stałe w pliku .classpath (na tym przecież opiera się ta
idea, prawda?). Jednak należy wziąć pod uwagę, że środowisko PDE dysponuje
wyrafinowanym algorytmem ustalania ścieżki klasy, który w maksymalnym możliwym
stopniu przewiduje warunki środowiska wykonawczego. To co "widzi"
kompilator JDT podczas programowania powinno być maksymalnie zbliżone do
warunków, jakie napotkają programy ładujące klas w czasie wykonywania. Jądro
środowiska PDE ma przeważnie większe możliwości utrzymania aktualności ścieżek
klas niż programiści. Jeśli podczas kompilacji wystąpi konieczność ręcznej modyfikacji ścieżki klasy, to istnieje duże prawdopodobieństwo, że konfiguracja jest niepoprawna i moduły dodatkowe nie będą uruchamiać się poprawnie (nie dotyczy to zespołu korzystającego z pakietu SWT).
P: W naszym zespole używamy projektów binarnych wyłącznie na potrzeby
self-hostingu. Czy przejście na dynamiczne ścieżki klas wiąże się w
naszym przypadku z jakimiś ograniczeniami?
O: Nie. Dynamiczne ścieżki klas nie narzucają określonej organizacji
self-hostingu. Służą one po prostu do rozpoznawania zależności modułów
dodatkowych w danym kontekście.
Jeśli w dalszym ciągu będziecie importować zewnętrzne moduły dodatkowe jako
projekty binarne, dynamiczne ścieżki klas będą tłumaczone na odwołania do
projektów tak, jak do tej pory.
P: Co jest potrzebne do aktywowania dynamicznych ścieżek klas?
O: Wystarczy tylko raz zaktualizować ścieżki klas modułów dodatkowych w
wersji 2.1. Ścieżki klas będą po tej operacji zauważalnie krótsze, a
wszystkie odwołania do zależnych modułów dodatkowych zostaną umieszczone we
jednym wpisie kontenera. Można kontynuować pracę. Należy tylko pamiętać o
wprowadzeniu do repozytorium projektów źródłowych, w tym zmienionych plików
.classpath.
P: Używam dodatkowych wpisów ścieżek klas na potrzeby kompilacji
czynności programu Ant/serwletów/stron JSP.
O: W ramach ustalania ścieżek klas środowisko PDE uwzględnia właściwość
jars.extra.classpath z pliku build.properties. Gdy jest ona poprawnie
skonfigurowana na potrzeby budowania, środowisko PDE wygeneruje poprawną ścieżkę klasy.
P: W jaki sposób można manipulować dynamicznie ustalanymi wpisami ścieżek klas?
O: Jest bardzo mało prawdopodobne, aby trzeba było manipulować wpisami
dynamicznych ścieżek klas; jeśli jednak będzie to konieczne,
można to zrobić na karcie Właściwości>Ścieżka budowania Java>Biblioteki. Należy rozwinąć węzeł
Zależności modułów dodatkowych i zmodyfikować w nim ścieżki.
P: Niektóre ustalone wpisy dla bibliotek nie mają załączników z
kodem źródłowym. Czy można je dodać ręcznie?
O: Środowisko PDE ustala załączniki z kodem źródłowym dla większości
bibliotek. Może się jednak sporadycznie zdarzyć, że automatyczne ustalenie
załączników z kodem źródłowym nie powiedzie się ze względu na niezgodność nazw
plików ZIP zawierających kod źródłowy z konwencjami nazewnictwa. Do tych wpisów można
ręcznie dołączyć źródła w oknie dialogowym właściwości ścieżki budowania.
P: Czy ręcznie dodane załączniki z kodem źródłowym znikną, gdy następnym
razem środowisko PDE będzie dynamicznie ustalać ścieżkę klasy?
O: Nie. Środowisko PDE zapamiętuje takie przypadki i po wykonaniu
dynamicznych obliczeń wprowadza je ponownie, o ile ścieżki do bibliotek
nie zmieniły się.
P: Programuję, używając pakietu SWT. Czy mogę korzystać z dynamicznych
ścieżek klas?
O: Niestety nie. Zespół SWT posługuje się unikalną konfiguracją
self-hostingu, w której ścieżki klas dla różnych środowisk są zapisywane w
repozytorium i wstawiane do pliku .classpath w projekcie zależnie od używanej
platformy. Członkowie tego zespołu muszą w dalszym ciągu korzystać ze swoich
metod self-hostingu.