3

我在 Java 中看到了一些关于“循环 jar 引用”的问题,但我什么也没看到。

我的问题是:如何构建两个 jar,其中每个 jar 都有对另一个 jar 中的类的方法调用?似乎每个 jar 项目中的某些类都需要从另一个 jar 导入类,因此需要在构建的类路径中引用另一个 jar——但另一个 jar 由于相同而无法编译需要。

我可以理解将所有类编译为一个大项目,然后将类打包到具有相互依赖关系的单独 jar 中,但是由于需要在类路径中包含另一个 jar,因此似乎不可能单独编译每个 jar 的类。

与我相关的是,我将代码开发成一个 jar 以供另一个项目使用。但是,现在我需要使用来自其他项目的一些 api 调用。我认为这样做的唯一方法是将一些常用和独立的 api 类分离到第三个项目/jar 中,原始两个项目都可以包含在它们的类路径中。

对此是否有另一种看法?

4

2 回答 2

0

他们不需要在编译时将彼此作为 jar 引用。只要在开发时配置类路径以反映这一点,它们就可以是相互引用的两个独立项目。

因此,您可以有一个用例场景:

Api1.Class11 references (or imports) Api2.Class21

Api2.Class22 references Api1.Class12

这是合法的,因为虽然在项目级别是循环引用,但在类级别却不是这样(想象一下,如果两个项目合并为一个并且您有这种情况)。

一旦捆绑到 jars 中,客户端应用程序就有责任使用它们将两者都包含在类路径中,以便它们在运行时可以以这种方式相互看到。

就个人而言,我认为这种做法令人困惑,但可以做到。为了清楚起见,我自己不会使用循环引用。

于 2013-02-27T20:07:49.270 回答
0

大多数常见的构建工具不能处理循环依赖,但是只要两个 jar 之一至少有一个起始二进制版本,手动增量构建就没有理由不能包含循环依赖。

由于构建工具无法处理此类依赖关系,因此在实践中很少遇到这种依赖关系,并且大多数 Java 开发人员认为它是糟糕的设计。

于 2013-02-27T20:18:59.503 回答