Dynamiczne ścieżki klas środowiska PDE - najczęściej zadawane pytania

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.