使用Gradle构建多Java项目

Scr*_*age 7 java eclipse gradle

我正在撕裂我的头发.我已经将我的脚本剥离回Gradle教程页面中提供的代码,因为我认为我要么做了一些根本错误的事情,要么误解了如何使用gradle构建多项目应用程序.

我在eclipse中有三个java项目,其中三个包含build.gradle脚本,只有一个包含settings.gradle脚本.结构如下:

Scripts
-- build.gradle
-- settings.gradle
Database
-- build.gradle
Services
-- build.gradle
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用"脚本"项目中的构建脚本构建"数据库"和"服务"项目.要创建项目树,我在settings.gradle中有以下代码:

include 'Services', 'Database'

project (':Services').projectDir = new File(settingsDir, "../Services")
project (':Database').projectDir = new File(settingsDir, "../Database")
Run Code Online (Sandbox Code Playgroud)

复制多项目教程中的代码(gradle docs),我试图让每个构建脚本打印出一些文本,以确保所有内容都正确设置.我的最终目标是在执行'eclipseClasspath'时正确构建依赖项,以便所有项目在eclipse中正确编译.但是,正如我所料,文本没有打印出来!

以下是三个构建脚本中包含的内容:

脚本build.gradle

allprojects {
    task hello << { task -> println "I'm $task.project.name" }
}

subprojects {
    hello << {println "- I depend on Scripts"}
}
Run Code Online (Sandbox Code Playgroud)

数据库build.gradle

hello.doLast { 
    println "- I'm inside database" 
}
Run Code Online (Sandbox Code Playgroud)

服务build.gradle

hello.doLast { 
    println "- I'm inside services" 
}
Run Code Online (Sandbox Code Playgroud)

在'Scripts'项目中,当我运行'gradle -q hello'时,我得到以下结果:

I'm Scripts
I'm AnprDatabase
- I depend on Scripts
I'm Database
- I depend on Scripts
Run Code Online (Sandbox Code Playgroud)

为什么文本' - 我在数据库内'和'我在服务内'没有出现?我有点困惑.我只能猜测它与我的项目结构有关.有人可以证实这是事实吗?如果没有,问题是什么?如上所述,我已经将我的脚本剥离回这个简单的示例,因为我无法使用相同的结构在每个项目构建脚本中运行依赖项.

非常感谢任何提供的帮助.

Scr*_*age 4

我已经设法弄清楚为什么它不起作用。对我来说这是一个愚蠢的错误。“数据库”和“服务”项目与我的“脚本”项目不在同一目录中。我已将这些项目签入 git 存储库,该存储库将本地目录从我的 Eclipse 工作区复制到本地 git 存储库。我没有将“Scripts”项目签入我的 git 存储库,因此它仍然驻留在我的 Eclipse 工作区中。现在看起来很明显为什么它不起作用!检查我的“脚本”项目并更改 settings.gradle 中其他项目的路径已经解决了问题。

有趣的是,如果 Gradle 找不到定义的项目,它不会抛出 FileNotFoundException 或类似的东西,而是会创建一个空项目。这是我不曾欣赏的。起初我认为这是奇怪的行为,但我认为它使用户能够在脚本运行时动态创建他的项目。但不确定我是否喜欢这样!

因此,在包含项目时,请务必确保导航到设置中的正确目录!不然你可能会像我一样犯规。