Initializing project data in the init lifecycle

So im trying to find a work around for this: Publish not picking up version and group

From what I can tell, it seems that not all non-gradle core plugins make a reference to project.version, but in fact make a copy of the object. Therefore, when the value of project.version is updated later in the configuration phase, those plugins don’t pick up the change. (just a guess there).

So, since in my environment, putting the and project.version values in the build.gradle is absolutely out of the question, I need to come up with another solution.

I have been reading up on the lifecycle. It seems that what i really need to do is attach the code that goes to our inventory system to get the value, and the -P parameter for the version from our CI (We don’t use snapshot schemes, each build is issued a hard version number) into the Init phase, instead of the configure. Basically so that part is already done before configure starts. Thinking is, if that code already updates the project.version and before the config, that the other plugins that don’t pick up changes will have them and i can move on to other things.

So i have been playing. Questions are.

1 - is there a way to take a block of code and label it “Run in init”. In order for this code to run, the project objects would have to exist already.
2 - In lieu of that, why doesn’t this work

rootProject.version = "1.0" = "tryme"

When i put it in the settings.gradle. i get

No such property: version for class: org.gradle.initialization.DefaultProjectDescriptor

So I looked a bit deeper, seems what i want to do isn’t possible because the project object doesn’t exist until after these prelim events fire. Therefore, can’t set an object that doesn’t exist.


perhaps i will switch to trying to set the project.version and values to closures. That way the inventory system is checked when the variable is accessed instead of after the project evaluation phase.