【问题标题】:How to specify "sources" JAR for local JAR dependency?如何为本地 JAR 依赖项指定“来源”JAR?
【发布时间】:2017-03-17 23:45:54
【问题描述】:

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

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

我还有一个相应的local-lib-sources.jar 文件,我想将其附加到它上面。在 Eclipse 中,对于手动管理的依赖项,这通过构建路径条目 -> Properties -> Java Source Attachment 的上下文菜单工作。但是,对于 gradle 管理的依赖项,该选项不可用。

有人知道执行此操作的 gradle/buildship 方式是什么样的吗?我的依赖项不在存储库中,所以我现在只能使用compile files

【问题讨论】:

标签: java eclipse gradle dependency-management buildship


【解决方案1】:

如果您想在 Eclipse 中使用 Buildship,那么您就不走运了,因为 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 在很大程度上就像一个常规存储库。

【讨论】:

  • 感谢您指出这一点。实际上,我在寻找解决方案时遇到了您链接的主题,但我认为“该主题已有一年之久,从那时起肯定有修复它......” - 显然,我错了。跨度>
  • 第一种方法似乎不再有效。如果我查看 .classpath,它不再扩展,并且只有一个条目 。你确定吗 ?第二个对我有用。
【解决方案2】:

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

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

【讨论】:

  • 我应该在我的问题中提到这一点(对此感到抱歉):虽然您的代码有效并且确实将“sources.jar”添加到 Eclipse 项目的类路径中,但它没有“链接”来源。所以如果我进入一个由 *.jar 贡献的类,很遗憾我仍然没有从 *-sources.jar 中看到相应的文件,而是看到了 Eclipse *.class 文件(字节码)查看器。
  • 所以在 éclipse 中去 eclipse 市场看看“java decompiler”插件。您现在将看到源代码
  • 我也在寻找这个问题的解决方案。 Java Decompiler 插件不是一个完整的解决方案,因为它不提供 javadoc 信息。
  • 在你的 gradle 文件中试试这个: apply plugin: 'java' apply plugin: 'eclipse' eclipse { classpath { downloadJavadoc = true downloadSources = true }
猜你喜欢
  • 2021-02-27
  • 2011-01-25
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 2019-06-29
  • 2011-11-03
  • 1970-01-01
相关资源
最近更新 更多