2017-03-17 66 views
3

我在我的Gradle/Buildship项目中有一个*.jar文件,它驻留在lib文件夹中。包括我在我的build.gradle通过:如何为本地JAR依赖项指定“sources”JAR?

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

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

有人知道gradle/buildship的做法是什么样子吗?我的依赖没有存储库,所以我现在坚持使用compile files

+1

你试过了吗? http://stackoverflow.com/questions/10156847/how-to-tell-gradle-to-download-all-the-source-jars – Adonis

回答

3

如果你想使用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([email protected] == 'lib') { 
     def sourcePath = [email protected]('.jar', '-sources.jar') 
     if(file(sourcePath).exists()) { 
      [email protected] = sourcePath 
     } 
     } 
    } 
    } 
} 

你会然后在命令行中运行gradle eclipse并导入项目到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行为像大部分常规的存储库。

+0

感谢您指出了这一点。实际上,当我寻找解决方案时,我遇到了你所关联的主题,但我认为“该主题已有一年的历史,从那时起一定有一个修复方案......” - 显然,我错了。 – Alan47

0

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

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

我应该提到,在我的问题(对不起):虽然你的代码工作并确实将“sources.jar”添加到Eclipse项目的类路径中,但它不“链接”源。因此,如果我进入由* .jar提供的类,不幸的是,我仍然没有看到* -sources.jar中的相应文件,而是Eclipse * .class文件(字节码)查看器。 – Alan47

+0

于是在éclipse去日食市场看看“java decompiler”插件。您现在将看到源代码 – Incognito

+0

我正在寻找这个问题的解决方案。 Java Decompiler插件不是一个完整的解决方案,因为它不提供javadoc信息。 – user1585916