Перекомпилирование зависимостей Jar - PullRequest
0 голосов
/ 08 ноября 2010

Допустим, у меня есть проект с зависимостью от класса в JAR A, который впоследствии имеет зависимость от класса в JAR B. Чтобы запустить проект, оба jar-файла должны находиться в одном и том же пути к классам. У меня есть исходный код для всех трех частей - проекта, JAR A и JAR B.

Если я изменяю внутреннюю часть метода в классе в JAR B без изменения API, мне нужно перекомпилировать JAR A для него или я могу просто перетащить его в classpath проекта и перейти?

Если я думаю об этом, я не думаю, что мне это нужно, но я просто хочу перепроверить. Весьма раздражает копирование файлов, когда я просто пытаюсь добавить дополнительную регистрацию в JAR B, которая не влияет на JAR A.

Ответы [ 2 ]

3 голосов
/ 08 ноября 2010

Я думаю, что вы правы: вы просто воссоздали бы JAR B, который содержал новый класс, и поместили его в путь к классу вместе с JAR A и C.

0 голосов
/ 08 ноября 2010

код, который заполняет Jar A, должен быть в состоянии компилироваться только для создания jar.

Если для компиляции используется Jar B, то Jar B должен существовать в той степени, в которой он удовлетворяетвсе ссылки, сделанные на него кодом для Jar A.

Обратное также верно.

Как только код для Jar A скомпилирован, вы можете создать его jar и забыть о нем.

Затем вы можете изменять Jar B столько раз, сколько хотите, если API Jar A не меняется.

EG:

В Jar B вы определяетефункция:

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

Это компилирует и вы можете создать Jar B.

В Jar A вы ссылаетесь на функцию:

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

Это компилирует, и вы можете создатьJar A, однако при его запуске возникнет исключение.

Вы можете обновить свой код Jar B:

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

Это компилирует, и вы можете заново создать Jar B. Jar A может работать безисключение.

Однако, если вы обновите Jar B и измените API:

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

Вам понадобитсямодифицировать и перекомпилировать Jar A.

...