# Build logic for subprojects

**URL:** <https://discuss.gradle.org/t/build-logic-for-subprojects/5563>\
**Category:** Old Forum Archive\
**Created:** [June 4, 2013, 10:54am UTC](https://discuss.gradle.org/t/build-logic-for-subprojects/5563 "2013-06-04T10:54:00Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sion\_Williams1](https://avatars.discourse-cdn.com/v4/letter/s/3be4f8/32.png) [@Sion\_Williams1](https://discuss.gradle.org/u/Sion_Williams1)\
**Post date:** [June 4, 2013, 10:54am UTC](https://discuss.gradle.org/t/build-logic-for-subprojects/5563/1 "2013-06-04T10:54:00Z")

</div>

I’m using the example below where bluewhale and krill are schemas in an oracle database.

```gradle
water/
  build.gradle
  settings.gradle
  bluewhale/
    build.gradle
  krill/
    build.gradle

```

I want to set the build logic in the parent build.gradle (water), but inherit different properties from each of the subprojects:

Parent:

```gradle
subprojects {
   repositories {
  mavenCentral()
 }
   configurations {
   ora
   dbdeploy
 }
   dependencies {
  // oracle db
  ora "com.oracle:ojdbc6:11.2.0.2.0"
      // DB Deploy
  dbdeploy "com.dbdeploy:dbdeploy-parent:3.0M3"
 }
    migrateDB << {
   ant.taskdef(name: 'dbdeploy',
      classname: 'com.dbdeploy.AntTarget',
      classpath: (configurations.dbdeploy + configurations.ora).asPath)
   ant.dbdeploy(driver: "oracle.jdbc.OracleDriver",
       url: "jdbc:oracle:thin:@localhost:1521/orcl",
       userid: $dbaUsername,
       password: $dbaPassword,
       dir: $dbddl)
 }
}

```

Child:

```gradle
task migrateDB.doFirst{
  project.ext.dbaUsername = "krill"
  project.ext.dbaPassword = "krill"
  project.ext.dbddl = "krill/src/main/sql/ddl"
}

```

But I get the following error:

```gradle
$ ./gradlew :krill:migrateDB --s
The Project.childrenDependOnMe() method has been deprecated and is scheduled to be removed in Gradle 2.0.
  FAILURE: Build failed with an exception.
  * Where:
Build file '/media/sf_vm_shared/water/build.gradle' line: 27
  * What went wrong:
A problem occurred evaluating root project 'water'.
> Could not find property 'migrateDB' on project ':bluewhale'.
  * Try:
Run with --info or --debug option to get more log output.
  * Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'water'.
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:127)
        at org.gradle.configuration.BuildScriptProcessor.execute(BuildScriptProcessor.java:36)
        at org.gradle.configuration.BuildScriptProcessor.execute(BuildScriptProcessor.java:23)
        at org.gradle.configuration.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
        at org.gradle.configuration.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:465)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:76)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:31)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:142)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
        at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
        at org.gradle.api.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:48)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.Main.main(Main.java:39)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:26)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
Caused by: groovy.lang.MissingPropertyException: Could not find property 'migrateDB' on project ':bluewhale'.
        at org.gradle.api.internal.AbstractDynamicObject.propertyMissingException(AbstractDynamicObject.java:43)
        at org.gradle.api.internal.AbstractDynamicObject.getProperty(AbstractDynamicObject.java:35)
        at org.gradle.api.internal.CompositeDynamicObject.getProperty(CompositeDynamicObject.java:94)
        at org.gradle.api.internal.project.DefaultProject_Decorated.getProperty(Unknown Source)
        at build_5cio0n6q7s1tsj9kta5u4ea53a$_run_closure5.doCall(/media/sf_vm_shared/water/build.gradle:27)
        at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:58)
        at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:133)
        at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:94)
        at org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:853)
        at org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:858)
        at org.gradle.api.internal.project.AbstractProject.subprojects(AbstractProject.java:841)
        at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:216)
        at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:122)
        at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:147)
        at org.gradle.groovy.scripts.BasicScript.methodMissing(BasicScript.java:83)
        at build_5cio0n6q7s1tsj9kta5u4ea53a.run(/media/sf_vm_shared/water/build.gradle:26)
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:52)
        ... 33 more
    BUILD FAILED

```

As per normal I’m sure this is something I am doing wrong, but any help would be greatly appreciated.

---

<div class="post-metadata">

**Author:** ![Peter\_Niederwieser](https://avatars.discourse-cdn.com/v4/letter/p/9f8e36/32.png) [@Peter\_Niederwieser](https://discuss.gradle.org/u/Peter_Niederwieser)\
**Post date:** [June 4, 2013, 11:31am UTC](https://discuss.gradle.org/t/build-logic-for-subprojects/5563/2 "2013-06-04T11:31:00Z")

</div>

The task has to be introduced by the parent. Hence replace ‘migrateDb \<\<’ with ‘task migrateDb \<\<’. Also, the children should just configure the task, and should declare extra properties for the task (not the project). Hence:

```gradle
migrateDB {
  ext.dbaUsername = "krill"
  ext.dbaPassword = "krill"
  ext.dbddl = "krill/src/main/sql/ddl"
}

```

---

<div class="post-metadata">

**Author:** ![Sion\_Williams1](https://avatars.discourse-cdn.com/v4/letter/s/3be4f8/32.png) [@Sion\_Williams1](https://discuss.gradle.org/u/Sion_Williams1)\
**Post date:** [June 4, 2013, 12:04pm UTC](https://discuss.gradle.org/t/build-logic-for-subprojects/5563/3 "2013-06-04T12:04:00Z")

</div>

Thank you very much. This has fixed my problem 🙂

---

<div class="post-metadata">

**Author:** ![Sion\_Williams1](https://avatars.discourse-cdn.com/v4/letter/s/3be4f8/32.png) [@Sion\_Williams1](https://discuss.gradle.org/u/Sion_Williams1)\
**Post date:** [June 4, 2013, 12:45pm UTC](https://discuss.gradle.org/t/build-logic-for-subprojects/5563/4 "2013-06-04T12:45:00Z")

</div>

One additional note is that I didnt need to put the krill directory in the path as the task executed relative to the krill project, not water.

```gradle
migrateDB {
  ext.dbaUsername = "krill"
  ext.dbaPassword = "krill"
  ext.dbddl = "src/main/sql/ddl"
}

```
