如何为本地 JAR 依赖项指定 "sources" JAR?

How to specify "sources" JAR for local JAR dependency?

我的 Gradle / Buildship 项目中有一个 *.jar 文件,该文件位于 lib 文件夹中。我通过以下方式将其包含在我的 build.gradle 中:

compile files('libs/local-lib.jar')

我也有一个相应的local-lib-sources.jar 文件,我想附加到它。在 Eclipse 中,对于手动管理的依赖项,这是通过构建路径条目 -> 属性 -> Java 源附件的上下文菜单进行的。但是,对于 gradle 管理的依赖项,该选项不可用。

有人知道 gradle/buildship 的实现方式吗?我的依赖项不在存储库中,所以我现在只能使用 compile files

在与 src 或您构建脚本相同的目录级别上使用名为 lib 或类似的额外文件夹。

dependencies {
//local file
     compile files('lib/local-lib-sources.jar')
// others local or remote file
 }

如果您想将 Buildship 与 Eclipse 一起使用,那么您就不走运了,因为 gradle 目前不支持它(参见 https://discuss.gradle.org/t/add-sources-manually-for-a-dependency-which-lacks-of-them/11456/8)。

如果您可以不使用 Buildship 并手动生成 Eclipse 点文件,您可以在 build.gradle:

中执行类似的操作
apply plugin: 'eclipse'

eclipse.classpath.file {
  withXml {
    xml ->
    def node = xml.asNode()
    node.classpathentry.forEach {
      if(it.@kind == 'lib') {
        def sourcePath = it.@path.replace('.jar', '-sources.jar')
        if(file(sourcePath).exists()) {
          it.@sourcepath = sourcePath
        }
      }
    }
  }
}

然后您将从命令行 运行 gradle eclipse 并使用 Import -> "Existing Projects into Workspace"

将项目导入 Eclipse

另一个(可能更好)选项是使用这样的平面文件存储库:

repositories {
    flatDir { 
        dirs 'lib'
}

https://docs.gradle.org/current/userguide/dependency_management.html#sec:flat_dir_resolver

然后您将像任何其他依赖项一样包含您的依赖项;在你的情况下:

compile ':local-lib'

这样 Buildship 将自动找到 -sources.jar 文件,因为 flatDir 大部分情况下就像一个常规存储库。