获取跨项目资源的位置

时间:2015-01-21 16:56:47

标签: java scala gradle

我看过很多类似的问题,答案是项目结构不理想所以我的问题基于以下内容:

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

build.gradle ProjA

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。)这是否是正确的方法,因为我已经阅读了很多关于不合理的跨项目属性 - 或者我应该做一些完全不同的事情?

1 个答案:

答案 0 :(得分:1)

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

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的完整示例。