2010-11-07 6 views
0

Disons que j'ai un projet avec une dépendance sur une classe dans JAR A, qui dépend par la suite d'une classe dans JAR B. Pour exécuter le projet, les deux bocaux doivent être sur le même chemin de classe. J'ai le code source pour les trois pièces - projet, JAR A, et JAR B.Recompilation des dépendances de booléens

Si je change les internes de la méthode dans la classe en JAR B sans changer l'API, dois-je recompiler JAR A contre ou est-ce que je peux le déposer dans le classpath du projet et y aller?

Si j'y pense, je ne pense pas que j'en aurais besoin, mais je veux juste vérifier. C'est assez embêtant de copier les fichiers tout le temps quand j'essaie d'ajouter une journalisation supplémentaire à JAR B qui n'a aucun effet sur JAR A.

+0

semble assez simple à tester! – pstanton

Répondre

0

le code qui remplit Jar A doit seulement être capable de compiler afin de créer le jar.

Si elle repose sur Jar B pour compiler, puis Jar B doit exister dans la mesure où elle satisfait toutes les références qui lui sont faites par le code de Jar A.

L'inverse est également vrai. Une fois le code du Jar A compilé, vous pouvez créer son pot et l'oublier.

Vous pouvez ensuite modifier le Bocal B autant que vous le souhaitez tant que le bocal API A ne change pas.

EG:

Jarre B vous définissez une fonction:

public class JarBClass 
{ 
    public static void doSomething() 
    { 
     throw new RuntimeException(); 
    } 
} 

Cette compile et vous pouvez créer Jar B.

Dans Jar A vous faites référence à la fonction:

public class JarAClass 
{ 
    public static void useSomething() 
    { 
     JarBClass.doSomething(); 
    } 
} 

Cela compile et vous pouvez créer un Jar A, cependant en cours d'exécution il lancerait une exception.

Vous pouvez mettre à jour votre code Jar B:

public class JarBClass 
{ 
    public static void doSomething() 
    { 
     System.out.println("all good"); 
    } 
} 

Cette compile et vous pouvez recréer Jar Jar B. A peut fonctionner sans exception.

Toutefois, si vous mettez à jour Jar B et changer l'API:

public class JarBClass 
{ 
    public static void doSomething(String what) 
    { 
     System.out.println(what + " is all good"); 
    } 
} 

Vous devrez modifier et recompiler Jar A.

3

Je pense que vous avez raison: vous recréeriez simplement le JAR B qui contenait la nouvelle classe et l'a mis dans le chemin de classe avec JARs A et C.