2009-04-02 10 views
16

J'utilise des classes d'un fichier JAR et elles appartiennent à un package (com.abc.xyz).Les classes du même package peuvent-elles être réparties dans plusieurs fichiers Jar?

L'écriture de classe appartient également à ce paquet, mais je ne pourrai pas regrouper mon fichier dans ce fichier JAR. Est-il possible d'avoir des classes appartenant au même paquet réparties dans plusieurs fichiers JAR?

+0

BTW, pouvez-vous expliquer pourquoi vous avez besoin de le faire ? C'est une bonne pratique de garder le paquet entier dans un seul pot. Il serait intéressant de voir pourquoi vous ne pouvez pas. –

+0

Je devais le faire (pour pouvoir accéder, et sous-classer les classes avec un accès "par défaut" dans un Jar qui n'était pas le mien), et cela a bien fonctionné ... – Varkhan

Répondre

4

Je ne vois pas pourquoi ce ne serait pas possible. Tout ce qui compte est que les classes sont dans le classpath.

16

Par défaut, absolument.

Cependant, si vous voulez pour vous assurer que les classes d'un package particulier sont uniquement chargées d'un fichier jar, vous pouvez add that information to the manifest.

7

Il est tout à fait possible à moins que le JAR ait sealed le paquet.

3

Ce n'est probablement pas quelque chose que vous devriez vouloir faire. Si c'est dans le même paquet, ne devrait-il pas être empaqueté ensemble (je crois que Jigsaw a l'intention d'autoriser le fractionnement des paquets entre les modules, mais c'est un autre type de poisson).

Il peut être bloqué si l'un des paquets est marqué comme scellé dans le manifeste. Je recommanderais de marquer les pots entiers comme scellés comme une évidence.

Il peut également être bloqué s'il existe différents signataires sur les classes et que les classes sont chargées par le même chargeur de classe. Si vous chargez des classes à l'aide d'un chargeur de classe différent, bien que le "namespace" soit le même, vous n'obtiendrez pas réellement l'accès au package (et à la partie concernée de protected).

0

Parfois, vous devez faire si vous souhaitez étendre les fonctionnalités des bibliothèques tierces, mais ils ne sont pas ouverts sourcve et/ou vous n'avez pas des sources