【问题标题】:How to get sources from parent project as dependency如何从父项目中获取源作为依赖项
【发布时间】:2017-02-22 20:46:44
【问题描述】:

我想做这样的事情:

dependencies {
    compile project(':projectA', classifier: 'sources')
}

但我找不到这样的功能,我在文档中搜索过,但除了在真实依赖项上指定分类器之外,什么都没有。

那么有没有办法在 Gradle 多模块项目中添加来自父项目的源作为依赖项?

【问题讨论】:

  • 将“源作为依赖项”的用例是什么?通常你依赖于编译的类。
  • @MartinLinha gwt 编译需要类路径上的源代码

标签: java gradle dependencies


【解决方案1】:

我不知道 Gradle 有为此提供的功能,但有一个解决方法:

  1. packageSources 添加到应该提供源的项目中

    // projectA/build.gradle   
    
    project.task("packageSources", type: Jar) {
        classifier = 'sources'
        from { project.sourceSets.main.allSource }
    }
    
  2. 将任务依赖于您需要源的compileJava

    // projectB/build.gradle
    
    compileJava.dependsOn tasks.getByPath(':projectA:packageSources')
    
  3. 将源添加为依赖项

    // projectB/build.gradle
    
    dependencies {
        compile files(tasks.getByPath(':projectA:packageSources').archivePath)
    }
    

【讨论】:

    【解决方案2】:

    projectA/build.gradle

    configurations {
        sources 
    }
    dependencies {
        sources sourceSets.main.allSource
    }
    

    projectB/build.gradle

    dependencies {
        compile project(path: ':projectA', configuration: 'sources')
    }
    

    DependencyHandler.project(Map)

    【讨论】:

    • 这可能是更好的解决方案,缺点是 Intellij IDEA 忽略了该属性。
    • @jmattheis 可以使用 idea 插件中的 gradle idea 任务来刷新 .iml 文件;) IntelliJ gradle 支持从来都不是完美的
    猜你喜欢
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多