JerodLass wrote:
After an issue refreshed my need for build hierarchy control, I'm back to
trying to build my multi-project without a physical top-level build. Again,
to clean up cvs (among other benefits), I would like to modify my project
structure
From:
-D Project
-D SubProject1
-F build.gradle
-D SubProject2
-F build.gradle
-F build.gradle
-F settings.gradle
to:
-D Project
-D SubProject1
-F build.gradle
-D SubProject2
-F build.gradle
-D ProjectBuild
-F build.gradle (this is virtually the top-level script which defines
a lot of behavior for subprojects)
-F settings.gradle
Without affecting the build, which has been running well. If someone knows
exactly how to do this then read no further, but here is a list of my
settings.gradle attempts and which problems they caused:
One of our integration tests has exactly this structure, so it does
work. You need to do:
includeFlat 'SubProject1', 'SubProject2'
rootProject.projectDir = new File(settingsDir, '..')
rootProject.buildDirName = 'ProjectBuild/build.gradle'
Here's what this does, and why:
We use 'includeFlat', rather than 'include', because this sets the
project directory of the included subproject to
'$settingsDir/../$projectName', ie 'Project/SubProject1'. Using
'include' would set the project directory to
'$settingsDir/$projectName', ie 'Project/ProjectBuild/SubProject1'.
Secondly, we set the project dir of the root project to
'$settingsDir/..', ie 'Project', as that is what the subprojects are
expecting it to be set to. An alternative approach, which would be more
layout agnostic, is to have the root project inject this information
into the subprojects, rather than have the subproject pulling it out of
the root project.
Finally, we set the buildDirName of the root project to point it to the
correct build file. This is because the default is to look for
'build.gradle' in the project's project dir, ie the default would be
'Project/build.gradle', rather than 'Project/ProjectBuild/build.gradle'
The command-line usage for this kind of layout is a bit awkward:
If you run it from the root directory, or one of the subproject
directories, you have to use the -c option to tell Gradle where the
settings file is.
If you run it from the ProjectBuild directory, Gradle will find the
settings file fine, but you will have to use the -p option to tell
Gradle which project you want to run against. This is because there are
no projects in your build with the ProjectBuild directory as their
project dir. Perhaps we should change Gradle to use the root project in
this instance.
Attempt #1:
include 'Project1', 'Project2'
mavenRepo(name: 'LocalRepo', urls: 'http://localserv/maven-repo/')
dependencies("org.jerod.GradlePlugins:MyRootPlugin:1.7")
dependencies("org.jerod.GradlePlugins:MyProjectPlugin:1.7")
Output #1:
plugins found, projects initialized but no directories/build files found so
its an empty but error-free build
Attempt #2:
includeFlat 'Project1', 'Project2'
mavenRepo(name: 'LocalRepo', urls: 'http://localserv/maven-repo/')
dependencies("org.jerod.GradlePlugins:MyRootPlugin:1.7")
dependencies("org.jerod.GradlePlugins:MyProjectPlugin:1.7")
Output #2:
plugins found, projects initialized, errors because other projects reference
rootproject paths which are now different
Attempt #3[#4]:
rootProject.projectDir = new File(settingsDir, '..')
include[includeFlat] 'Project1', 'Project2'
mavenRepo(name: 'LocalRepo', urls: 'http://localserv/maven-repo/')
dependencies("org.jerod.GradlePlugins:MyRootPlugin:1.7")
dependencies("org.jerod.GradlePlugins:MyProjectPlugin:1.7")
Output #3[#4]:
Plugin not found, no class def found on org.jerod.GradlePlugins.MyRootPlugin
declaration, projects not added
When I run configuration 3/4 while specifying the settings file (-c
settings.gradle) I get an error that it can't select the default project
Attempt #5:
rootProject.projectDir = new File(settingsDir, '..')
include 'Project1', 'Project2', 'ProjectBuild'
mavenRepo(name: 'LocalRepo', urls: 'http://localserv/maven-repo/')
dependencies("org.jerod.GradlePlugins:MyRootPlugin:1.7")
dependencies("org.jerod.GradlePlugins:MyProjectPlugin:1.7")
Output #5:
Plugins found, includes all proojects, appears to find all build files, but
doesn't run any tasks for subprojects (no errors, though). Is it possible
that with ProjectBuild added as a separate project and being halfway between
a root and subproject, the real subprojects are no longer downstream from
ProjectBuild so dependsOnChildren() doesn't have the same effect?
Attempt #6:
rootProject.projectDir = new File(settingsDir, '..')
rootProject.buildFileName = 'loggerBuild/build.gradle'
include 'Project1', 'Project2', 'ProjectBuild'
mavenRepo(name: 'LocalRepo', urls: 'http://localserv/maven-repo/')
dependencies("org.jerod.GradlePlugins:MyRootPlugin:1.7")
dependencies("org.jerod.GradlePlugins:MyProjectPlugin:1.7")
Output #6:
Plugins found, projects recognized, but errors when ProjectBuild is seen as
the root project and a subproject and thus gets two different task
definitions thanks to the two declared plugins
If you made it this far, I applaud you. I'm desperate for any help.
Thank you,
Jerod Lass
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email