gradle - 如何通过gradle将本地依赖项捆绑到jar构建中?

标签 gradle

问题是我有三个同级项目。这里只有两个很重要,让我们称它们为共享和客户端。客户端依赖于共享,并且由于我在本地完成了所有工作,因此我在build.gradle中为客户端项目定义了这种依赖关系,例如编译project(':shared')。现在,我想借助maven-publish插件发布客户端。当我这样做时,依赖客户端的每个项目都会失败,因为它无法在任何地方找到共享项目。

现在完全有意义,因为在构建客户端时,它不会发布在任何地方。现在,我希望客户端项目的 Artifact 包括共享项目中的所有类。我也希望客户端 Artifact 不再说它依赖于共享项目,但是现在它应该依赖于共享所依赖的一切。

我已经做了大量研究,我发现this question and answer展示了如何将特定的依赖项包含到结果 Artifact 中。这样做的问题是,将共享项目的所有依赖项都包含在jar中,以及共享项目的文件中。

我的问题是:

  • 这是一种合理的方法吗?如果没有,那会更好吗?
  • 如何仅放置直接依赖项shared的类
    放入client构建的jar中?
  • 如何排除shared,但不排除它的依赖性
    Maven发布插件生成的 Artifact ?
  • 最佳答案

    我找到了问题2的答案:

    在build.gradle中,您需要添加以下内容:

    configurations {
        localCompile.transitive = false
        compile.extendsFrom(localCompile)
    }
    
    jar {
        from {
            configurations.localCompile.collect { it.isDirectory() ? it : zipTree(it) }
        }
    }
    

    然后只需定义所有本地依赖项,例如localCompile project(":kuroji-websocket-shared")

    关于gradle - 如何通过gradle将本地依赖项捆绑到jar构建中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49053306/

    相关文章:

    eclipse - Eclipse/Tomcat发布不必要/有问题的依赖项

    android - Google Play 服务已过时。需要 10298000 但找到 10084470

    android - 找不到 gradle DSL 方法 : 'compile()' persisting error

    android - generatedDensities 弃用

    java - 在 intellij 中创建 IntegrationTest 文件夹作为模块

    gradle - 如何使用Gradle设置代理URL

    spring-boot - Spring Cloud Kafka Stream 无法创建生产者配置错误

    gradle - gradle/kotlin应用程序中的“Bean class com.xxx.domain.Customer is not enhanced?”错误

    rest - 在某些页面上使用thymeleaf模板,在其余部分上使用thymeleaf模板来构建gradle项目

    android - 使用 Gradle 运行所有子项目测试