Próbuję uaktualnić dziedzicą aplikację Java EE do Dżakarty EE 8 na serwerze Wildfly. Większość aktualizacji poszła płynnie od 8 nie zamieniaj nazwisk do Dżakarty. Jednak niektóre z naszego kodu używa klas z pakietu COM.SUN.FACES ORACLE. Klasy te wydają się być zawarte w Dżakarta EE API Specyfikacja , ale nie są one wliczone w naszym projekcie, gdy korzystam z następujących zależności maven:

<dependency>
    <groupId>jakarta.faces</groupId>
    <artifactId>jakarta.faces-api</artifactId>
    <version>2.3.2</version>
    <scope>provided</scope>
</dependency>

Aby dostać je w klasie, muszę użyć zależności Oracle:

<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.2.20</version>
    <scope>provided</scope>
</dependency>

Oczywiście, chcemy zupełnie z wykorzystaniem tego pakietu w pewnym momencie, ale miałem nadzieję, że istnieje sposób na uwzględnienie tego w naszej Migracji Jakarta.

1
dentyne 5 październik 2020, 06:11

1 odpowiedź

Najlepsza odpowiedź

com.sun.faces.* jest nie część Dżakarty EE API. Jest częścią implementacji Dżakarty EE . Dokładniej, to rzeczywista implementacja JSF. Nazwa jest "Mojarra".

Powinieneś rzeczywiście nie trzeba mieć zależności od niej w swoim pom.xml, aby być niezależnym od wdrożenia (tj. Aby móc wdrożyć WebApp do dowolnego serwera zgodnego z kodu bez zmian kodu). Jeśli kod nie jest jednak kompilacją , gdy go usuniesz, najwyraźniej masz gdzieś twardą zależność, np. Dysponowany import lub superklasa odnosi się do pakietu com.sun.faces.*. Jest to zazwyczaj nie poprawne.

Rozwiązanie powinno być proste:

  1. Usuń zależność mojarra
  2. Znajdź wszystkie błędy kompilacji
  3. Napraw je jedno po drugim za pomocą standardowego podejścia do API JSF
  4. Jeśli nikt nie można znaleźć, badać lub poprosić o przepełnienie stosu
2
BalusC 5 październik 2020, 12:54