gradle - 依赖项冲突的Gradle Shadow Jar

标签 gradle build.gradle uberjar

我正在为服务创建 super jar的想法,但我担心包含具有冲突依赖关系的jar。如果jar A取决于slf4j-1.0,而jar B取决于slf4j-2.0,并且1.0和2.0之间有重大变化,会发生什么情况?当这些jar都包含在uber jar中时,我必须按 namespace 编写特定的过滤器,还是在对jars进行 namespace 的影子过程中发生了什么?

谢谢您的帮助

最佳答案

你是正确的担心。您最终会遇到冲突(一个名叫“dll hell 遍地”的同事),有时您可以在jarfile的同一目录中同时拥有v1和v2的类。

您可以轻松排除一个或另一个版本,但是如果您的依赖项同时需要它们,那么您将面临以下选择:

  • 找到一个没有冲突的新依赖项
  • 升级或降级当前依赖项以使版本符合
  • 可以作为war文件或其他类型的文件来处理,该文件可以更好地处理此问题,包括带有 list 的普通jarfile, list 中包含类路径
  • 考虑使用 Spring 启动,它使用的策略与着色不同:http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#executable-jar

  • 无论您做什么,gradle依赖项都是有帮助的。

    关于gradle - 依赖项冲突的Gradle Shadow Jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24040813/

    相关文章:

    android - Gradle maven 发布插件配置引用了动态创建的 gradle 任务

    java - Gradle:为什么传统的java构建类路径与java源路径相反

    gradle - 如何让Gradle任务依赖于另一个任务,但如果另一个任务执行则不重新执行?

    android - ' :app:processDebugManifest' error while importing project

    scala - 在 SBT 中重命名程序集生成的 uberjar

    android - 从外部下载Gradle依赖关系,而无需按实现名称进行gradle

    flutter 错误 : Execution failed for task ':app:compileFlutterBuildDebug

    android - 包含 'espresso-contrib:3.1.0' 后 : Execution failed for task ':app:processDebugAndroidTestResources'

    java - 如何使用薄 jar 代替厚 jar ?

    scala - 在 JVM 上从一个 jar 运行多个 Scala 应用程序