【问题标题】:Recompiling Jar Dependencies重新编译 Jar 依赖项
【发布时间】:2010-11-08 09:06:58
【问题描述】:

假设我有一个项目依赖于 JAR A 中的一个类,该类随后依赖于 JAR B 中的一个类。要运行该项目,两个 jar 需要位于同一类路径上。我有所有三个部分的源代码 - 项目、JAR A 和 JAR B。

如果我在不更改 API 的情况下更改 JAR B 中类中的方法的内部结构,是否需要针对它重新编译 JAR A,或者我可以将其放入项目的类路径中然后继续吗?

如果我考虑一下,我认为我不需要,但我只是想仔细检查一下。当我试图向 JAR B 添加额外的日志记录时,一直复制文件非常烦人,这对 JAR A 没有影响。

【问题讨论】:

  • 听起来很容易测试!

标签: java jar dependencies


【解决方案1】:

我认为您是正确的:您只需重新创建包含新类的 JAR B 并将其与 JAR A 和 C 一起放入类路径中。

【讨论】:

    【解决方案2】:

    填充 Jar A 的代码只需要能够编译即可创建 jar。

    如果它依赖于 Jar B 进行编译,那么 Jar B 需要存在到满足 Jar A 的代码对它的所有引用的程度。

    反之亦然。

    编译 Jar A 的代码后,您可以创建它的 jar 并忘记它。

    然后,只要 Jar A 使用的 API 不变,您就可以随意更改 Jar B。

    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。

    【讨论】:

      猜你喜欢
      • 2022-09-13
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 2015-03-12
      • 2019-05-03
      • 2013-12-09
      • 1970-01-01
      相关资源
      最近更新 更多