Gradle依赖(循环依赖 / 排除依赖)
一、循环依赖
因为历史遗留版本,存在循环依赖问题,依赖关系如下图所示:

- 项目环境:IDEA、Gradle
- 原先:在IDEA 2017.1.x版本下,通过Gradle添加依赖(build.gradle中)如下:
core:compile project(':mqtt')
mongo:无
mqtt:compile project(':mongo')
这样在mongo模块引用core模块代码处需要通过Alt+Enter,弹出框选择添加core模块依赖,如下图:

提示有循环依赖不用理会,直接OK,如下图:

这样既可正常build project,运行项目,打包项目。(在Refresh Gradle Project操作时会使依赖失效,需要重新执行上面操作)。 - 现在:将IDEA升级到2019.3版本后,按上述方式给mongo模块添加core模块依赖添加不上了。也就是面临两种选择,一是重构模块,去掉循环依赖;二是想办法仍然使循环依赖能添加上。
那么怎么仍然使循环依赖能添加上呢?经过摸索,终于找到了方法,各模块build.gradle添加依赖配置不变,在mongo模块添加:
testCompile project(':core')
compileOnly project(':core')
此时,Build Project,会报循环依赖的错误:
Circular dependency between the following tasks:
:core:classes
\--- :core:compileJava+--- :mongo:jar| \--- :mongo:classes| \--- :mongo:compileJava| +--- :core:jar| | \--- :core:classes (*)| +--- :mongo:jar (*)| \--- :mqtt:jar| \--- :mqtt:classes| \--- :mqtt:compileJava| \--- :mongo:jar (*)\--- :mqtt:jar (*)
还需修改Gradle设置中如下配置为IDEA:

这样就可以正常添加循环依赖,正常build、run、打包了。
当然:项目应该避免出现循环依赖,如果存在循环依赖说明项目架构有问题😂
二、依赖排除
Gradle 排除排除本地项目 部分依赖
Gradle依赖排除
使用Gradle打包war文件
出现如下错误:
java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:331)org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:392)org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177)org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369)javax.servlet.GenericServlet.init(GenericServlet.java:158)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798)org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1434)org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
通过依赖分析发现是jersey-server依赖冲突(版本不同)所致。排除冲突的低版本com.sun.jersey:jersey-server即可
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
