gradle - 根据另一个内部模块发布库

标签 gradle dependency-management

我有一个Gradle项目,发布了一些 Artifact :

  • 应用程序Jar(以胖子形式发布)
  • 库 jar (不是胖 jar )

  • 它们在internal-shared模块中共享一些代码:
    root
    ├── internal-shared
    ├── library
    └── application
    
    library的依赖树如下所示:
    implementation
    +--- third-party.foo:bar (n)
    +--- third-party.baz:qux:1.2.3 (n)
    \--- project internal-shared (n)
    
    我对发布该library模块感兴趣。
  • 按原样发布它不起作用,因为它将尝试解决未发布的shared依赖关系。
  • 制作胖子 jar 也是 Not Acceptable (这与依赖管理的概念背道而驰)

  • 我可以发布internal-shared库,但这没有任何意义:在项目外部没有用。
    我该怎么办?
    我的第一个建议是:
  • 保持第三方库的依赖关系管理
  • internal-shared嵌入已发布的library jar


  • 从外部 Angular (即查看已发布的 Artifact ),依赖关系树将是:
    implementation
    +--- third-party.foo:bar (n)
    \--- third-party.baz:qux:1.2.3 (n)
    
    (将internal-shared嵌入library jar中)
    那有多安全?有办法吗?

    最佳答案

    这是一个主观问题-
    在需要发布library的情况下-仅一个语句为真

  • internal-shared实际上是共享的,并且可以独立于自己的-这种情况下必须发布;或
  • internal-shared仅在library中使用,而绝不能站在自己的上-然后应将其合并/制作单个组合的jar。

  • 只有您知道代码-因此您需要决定。
    在方案(1)中,请考虑其他项目是否会遇到版本不匹配的问题-如果混淆,例如:
    project-3
      |_ lib_v3
      |_ internal-shared_v2 (or v4) 
    

    关于gradle - 根据另一个内部模块发布库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63168707/

    相关文章:

    gradle - 子项目与Gradle的依赖项失败

    gradle - 带有VSCode的Minecraft Forge Gradle

    java - 是否有一种独立于平台的方式来使用 gradle 设置文件权限?

    android - Gradle 构建一次发布所有口味

    xcode - 每次我构建项目时,Xcode 都会构建 CocoaPods 吗?

    android - 如何使用 gradle 为 3rd 方部门管理不同的支持库版本?

    android - 如何在 Android Studio 中设置 gradle 以提供两种具有不同最低 SDK 版本的风格?

    java - 如何使用Gradle连接 fat jar 中的文本文件

    objective-c - 多个私有(private) repo cocoapods

    java - Hibernate JPA 2.1 依赖项