2011-08-18 116 views
7

我正在为此撕掉我的头发。我已经将我的脚本剥离回Gradle教程页面提供的代码,因为我认为我要么做根本错误的事情,要么误解了一个多项目应用程序应该如何使用gradle进行结构化。使用Gradle构建多java项目

我在eclipse中有三个java项目,所有这三个脚本都包含一个build.gradle脚本,并且只包含一个settings.gradle脚本。结构如下:

Scripts 
-- build.gradle 
-- settings.gradle 
Database 
-- build.gradle 
Services 
-- build.gradle 

我试图建立“数据库”,并使用在“脚本”项目的生成脚本“服务”项目。要创建项目树,我在settings.gradle以下代码:

include 'Services', 'Database' 

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

复制在多项目教程中的代码(gradle这个文档),我试图让每一个构建脚本打印的出一些文字,以确保一切正确设置。我的最终目标是在执行'eclipseClasspath'时正确构建依赖关系,以便所有项目在eclipse中正确编译。但是,文本没有按照我的预期打印出来!

下面是什么是包含三个构建脚本中:

脚本的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" 
} 

在该“脚本”项目,当我运行“gradle这个-q你好”,我得到如下结果:

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

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

非常感谢您提供的任何帮助。

+0

对我来说很好,'gradle-1.0-milestone-3' – axtavt

+0

我使用相同版本的gradle。您的应用程序是否包含与我的结构相同的Java项目? – ScreamingMage

+0

对于你的另一个问题,你的构建脚本是从你的等效'脚本'项目中运行还是在三个项目的根源?我想尝试在'脚本'项目中运行我的脚本 – ScreamingMage

回答

4

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

有意思的是,如果找不到定义的项目,Gradle将创建一个空项目,而不是抛出FileNotFoundException或类似的东西。这是我没有赞赏的东西。起初我认为这是一种奇怪的行为,但我认为它让用户有能力在脚本运行时即时创建他的项目。不知道如果我喜欢这个,但!

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