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&gt;(ApplicationHandler.java:331)org.glassfish.jersey.servlet.WebComponent.<;init&gt;(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即可


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部