使用Gradle构建多个Java项目

7
我对此感到十分困惑。我已将自己的脚本剥离至Gradle教程页面提供的代码,因为我认为要么我在做一些根本错误的事情,要么我误解了使用gradle构建多项目应用程序的结构。
我在eclipse中有三个java项目,每个项目都包含一个build.gradle脚本,只有一个项目包含一个settings.gradle脚本。其结构如下:
Scripts
-- build.gradle
-- settings.gradle
Database
-- build.gradle
Services
-- build.gradle

我正在尝试使用“Scripts”项目中的构建脚本来构建“Database”和“Services”项目。为了创建项目树,我在settings.gradle中添加了以下代码:
include 'Services', 'Database'

project (':Services').projectDir = new File(settingsDir, "../Services")
project (':Database').projectDir = new File(settingsDir, "../Database")

我正在尝试复制Gradle文档中的多项目教程中的代码,并尝试使每个构建脚本都打印出一些文本,以确保一切设置正确。我的最终目标是在执行“eclipseClasspath”时正确构建依赖项,以便所有项目在eclipse中正确编译。然而,文本并没有像我预期的那样被打印出来!

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

Scripts build.gradle

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

subprojects {
    hello << {println "- I depend on Scripts"}
}

数据库 build.gradle

hello.doLast { 
    println "- I'm inside database" 
}

服务 build.gradle

hello.doLast { 
    println "- I'm inside services" 
}

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

I'm Scripts
I'm AnprDatabase
- I depend on Scripts
I'm Database
- I depend on Scripts

为什么文本“-我在数据库中”和“-我在服务中”没有出现?我有点困惑。我只能猜测这与我的项目结构有关。有人可以确认这是问题吗?如果不是,那么问题是什么?如上所述,我已将脚本简化为此简单示例,因为我无法在每个项目的构建脚本中运行依赖项,使用相同的结构。
非常感谢提供任何帮助。

对我来说运行良好,gradle-1.0-milestone-3 - axtavt
我正在使用相同版本的Gradle。你的应用程序是否由与我的相同结构的Java项目组成? - ScreamingMage
另一个问题是,你的构建脚本是在“Scripts”项目内运行还是在三个项目的根目录下?我想尝试从“Scripts”项目内运行我的构建脚本。 - ScreamingMage
目前而言,这个问题与Eclipse没有任何关系。问题的标题应该改进。 - Peter Niederwieser
抱歉,Peter,我已经改进了标题以提及Eclipse。 - ScreamingMage
@ScreamingMage:是的,我在Scripts文件夹中运行gradle - axtavt
1个回答

4
我已经找出为什么它不能工作了。这是我自己的一个愚蠢错误。'Database'和'Services'项目不在我的'Scripts'项目所在的同一目录中。我将这些项目检入了git存储库,它会将本地目录从我的Eclipse工作区复制到本地git存储库。我没有将'Scripts'项目检入我的git存储库中,因此它仍然驻留在我的Eclipse工作区中。现在看起来非常明显为什么它不起作用了!检入我的'Scripts'项目并更改settings.gradle中对其他项目的路径即可解决问题。
有趣的是,Gradle不会抛出FileNotFoundException或类似的异常,如果它找不到定义的项目,则会创建一个空项目。这是我没有意识到的事情。起初我认为这是奇怪的行为,但我想它赋予用户在脚本运行时动态创建项目的能力。不确定是否喜欢这个功能!
因此,在包含项目时,始终确保在设置中导航到正确的目录!否则,你可能会像我一样遭遇麻烦。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接