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

时间:2018-03-01 15:39:23

标签: gradle

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

现在完全有意义的是它并没有在构建客户端的任何地方发布。我现在希望客户端项目的工件包含共享项目的所有类。此外,我希望客户端工件不再说它取决于共享项目,但它现在应该依赖于共享所依赖的所有内容。

我已经完成了大量的研究,我发现this question and answer显示了如何在生成的工件中包含特定的依赖关系。问题在于包括共享项目到jar的所有依赖项以及共享项目的文件。

我的问题是:

  1. 这是一种合理的方法吗?如果没有什么会更好?
  2. 我怎样才能只放置直接依赖的类shared 进入client建立的jar?
  3. 如何排除shared但不包括它的依赖关系 maven-publish插件生成的工件?

1 个答案:

答案 0 :(得分:0)

我找到问题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")