循环依赖或构建项目的正确方法

时间:2014-06-23 08:23:50

标签: java gradle project

我有一个网络应用程序项目。

  1. 此项目的大多数类必须编译成.jar文件并将服务器放入codebase/WEB-INF/lib目录。这些类仅供服务器使用。

  2. 但是我有一些需要在服务器和客户端上使用的类。这些类必须直接放到codebase / [package.class]。

  3. 所有这些类都相互依赖,反之亦然。

  4. 故事结束。现在我尝试将我的项目从IDE构建移动到Gradle。我的项目包含两个相互依赖的模块。 InteljID为我提供警告并编译此罚款。但是对于Gradle,它会被卡住。那么,我能以某种方式将这些类拆分为两个逻辑组,并且有一种简单的方法来构建上述结构吗?

    我正在尝试进行多项目构建,几个sourceSets,但到处都有相同的循环依赖错误。

2 个答案:

答案 0 :(得分:5)

您需要重构代码。实现此目的的一种方法是为服务器特定代码创建单独的项目,为客户端项目创建另一个项目,以及为需要共享的代码创建公共项目。接下来,您可以让服务器项目和客户端项目依赖于公共项目。但是,服务器项目和客户端项目本身之间不应存在任何依赖关系。

通常,您希望保持公共项目尽可能小。问问自己两个项目中是否需要某个班级?如果没有,它不应该是普通包的一部分。确保单向,类和项目之间的依赖关系保持单向。这可能包括很多重构,因为代码纠缠不清。

推荐阅读:

答案 1 :(得分:1)

这里有一些小实用程序,您可能会发现有助于保持Java代码清除循环依赖项: http://sourceforge.net/projects/jcycles/

我在开展一个不断发展的项目时做到了这一点,在这个项目中,我无法跟踪类依赖性(避免循环),这是我能想到的所有与周期相关的库都被破坏或者太重了(具有复杂的GUI,或嵌入在庞大的框架中等)。)。

它可以显示类和包循环依赖关系(以及包循环所涉及的类),以及涉及每个类或包的循环数。

想法是用它来追捕周期(如果有的话),然后定期运行它以确保仍然没有周期(或只有可接受的周期)。

-Jeff