获取跨项目资源的位置

Getting location of cross-project resources

我看了很多类似的问题,回答是项目结构不理想,所以我的问题基于以下几点:

我有一个主项目 (ProjA),它需要包含第二个项目 (ProjB),它不是子项目。 ProjB有各种资源文件需要在ProjA的分发中复制。

ProjA

build.gradle

dependencies {
    compile project(":ProjB")
}    

distributions {
    main {
        baseName = "Something"
        contents {
            into('bin') { from jar.archivePath }
            into('lib') { from configurations.runtime }
            into('etc') {
                from ('../../projb/src/main/webapp') // Fix me!
            }
        }
    }
}

1.) 理想情况下,ProjB 应该通过 ProjA 使用的 属性 公开资源文件的位置,如何做到这一点?

2.) 这是正确的方法吗,因为我已经阅读了很多关于跨项目属性不理想的信息 - 或者我应该做一些完全不同的事情吗?

不知道是否有帮助,但似乎最好的方法是按以下方式进行:

distributions {
    main {
        baseName = "Something"
        contents {
            into('bin') { from jar.archivePath }
            into('lib') { from configurations.runtime }
            into('etc') {
                from project(':projB').file('src/main/webapp')                
            }
        }
    }
}

在这种情况下必须对路径进行硬编码。

第二个选项可能是指定项目 属性 - 通常不是一个好主意 - 并在另一个项目中使用 - 还必须定义评估顺序

projB

ext.resourcesDir = project.file('src/main/webapp2')

并在 projA

evaluationDependsOn(':projB')

和:

distributions {
    main {
        baseName = "Something"
        contents {
            into('bin') { from jar.archivePath }
            into('lib') { from configurations.runtime }
            into('etc') {
                from project(':projB').file('src/main/webapp')                
                from project(':projB').resourcesDir
            }
        }
    }
}

Here 的完整示例。