2017-11-14 60 views
5

Użyłem catch-catch z wieloma wyjątkami, który działa dobrze w nierozfumowanej kompilacji, ale nie łapie wyjątku w zaciemnionej kompilacji.Catch z wieloma wyjątkami nie wychwytującymi wyjątków w zaciemnionej kompilacji

Używam PROGUARD-maven-plugin

try { 
    ... 
} catch (ServletException | IOException e){ 
    ... 
} 

Czy jest jakaś reguła PROGUARD muszę dodać do tego?

Ponieważ jej dobrze działać, gdy piszę kod jako

try { 
    ... 
} catch (ServletException e) { 
    ... 
} catch (IOException e) { 
    ... 
} 
+0

Proguard nie powinien mieć na to wpływu. Może to spowodowane przez coś niezwiązanego. Czy jesteś pewien, że te dwie kompilacje, które porównujesz, różnią się jedynie istnieniem progów i nie są używane? Czy robi to różnicę, jeśli masz dwa bloki catch dla każdego typu wyjątku? – michalsrb

+0

Tak, dwie kompilacje porównują różnice tylko w proguardzie. I działa poprawnie, gdy piszę dwa bloki catch dla każdego wyjątku. – Gaurav

+0

Czy próbowałeś dodać -keepattributes Wyjątki? Dokumenty mówią, że "Określa wyjątki, które może wyrzucić metoda." Kompilatory mogą wykorzystywać te informacje do wymuszania ich przechwytywania. " –

Odpowiedz

0

Wielu catch wyjątek kabina być stosowane, gdy istnieje prawdopodobieństwo podniesienia wyjątki bez związku (rodzic-dziecko), coś jak IOException i ArithmeticException i NullPointerException . Ale nie można użyć bloku wielokrotnego przechwytywania z wyjątkiem: IOException i FileNotFoundException, ponieważ IOException jest obiektem nadrzędnym FileNotFoundException.

Blokowanie wielu bloków jest podane w języku Java7 dla wygody programisty. Nie wpływa to na czas wykonania.

+0

Przeczytaj ponownie pytanie na temat proguard i Obfuskation – Gaurav