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

4
我有一个关于web-app的项目。
1. 该项目的大多数类必须编译成.jar文件并放置在服务器的codebase/WEB-INF/lib目录中。这些类仅由服务器使用。 2. 但我有一些需要在服务器和客户端上使用的类。这些类必须直接放置在codebase/[package.class]中。 3. 所有这些类相互依赖。
故事结束了。现在我想将我的项目从IDE构建迁移到Gradle。我的项目包含两个相互依赖的模块。InteljID为我提供了警告并成功编译。但是使用Gradle会卡住。那么,我能否将这些类分成两个逻辑组,并且有一种简单的方法来构建上述结构?
我尝试制作多项目构建、多个sourceSets,但无论在哪里都遇到了相同的循环依赖错误。
2个回答

5
您需要重构您的代码。其中一种方法是创建一个专门用于服务器特定代码的项目,另一个项目用于客户端项目,还有一个用于需要共享的代码的公共项目。接下来,您可以让服务器项目和客户端项目依赖于公共项目。但是,服务器项目和客户端项目本身不应该有任何依赖关系。
通常,您希望尽可能保持公共项目的小型化。问问自己某个类是否在两个项目中都必要?如果不是,它就不应该是公共包的一部分。确保在类、包和项目之间保持单向依赖关系。这可能需要进行大量重构,因为代码交织在一起。
推荐阅读:

1

这里有一个小工具,您可能会发现它对于保持Java代码不受循环依赖关系很有用: http://sourceforge.net/projects/jcycles/

我在处理一个日益增长的项目时制作了它,我很难记住类之间的相互依赖关系(以避免循环),因为我能找到的所有与循环有关的库都是损坏的或太重(带有复杂的GUI或嵌入在庞大的框架中等等)。

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

想法是使用它来查找循环,然后定期运行它以确保仍然没有循环(或仅存在可接受的循环)。

-Jeff


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接