I want to run the simple flow, I have 6 profiles:
generate-schema,unpack-war,run-jetty,test,stop-jetty,start-stop-app
the test profile will run
Please let me clarify few important points which could also potentially solve your issue since I see some good practices may be missing in your approach:
SUCCESSFUL
regardless of the declared profiles!
or the -
annotation: mvn clean install -P!profile-name
as explained in the official documentation here. That will allow to ignore maven profiles in child module (to come to your questions) if the profile was only declared in that module.You can apply the same concept to the generate-schema action: is it required in all modules? Probably not, then you can declare the profile only on the specific module requiring it and then switch it on/off as above (if by default should be on, then declare the profile as active by default).
Concerning jetty, integration tests requiring jetty should also be part of the same module, so that the module's build would follow the classic flow: start/test/stop. If you really need to have start, test and stop in different modules, then you can follow explanation on our previous question, here.
I would also suggest to go through the Profile Pitfalls of the Maven official documentation, again, here for a better understanding of profile usage and misuses.
Additionally, if of any help, you can even skip an entire module build as part of a multimodule maven build, using the command line -pl
option. Check mvn -help
for further details. As such you could supply the list of modules to build. Since maven 3.2.1 you can also supply the list of modules to skip as following: mvn -pl !module-to-skip
install.
When using the !
notation for skipping profiles or modules, beware that it is also a special character for bash in linux, hence put it between single quotes (mvn -pl'!module-to-skip' install). The same doesn't work on Windows however, where double quotes should be used instead (
mvn -pl "!module-to-skip" install`).
Additionally, to skip modules as part of the parent build, you could also define a profile in your parent POM which re-declares the modules section and omit the modules you want to skip, as explained in this other answer.
...
module1
module2
...
...
skip-some-modules-profile
module1
...
module-integration-test
...
As such, you could craft a special multimodule build depending on the profile you want to execute.
All in all, beware that playing too much with profiles and modules which don't deliver any real artefact may affect your build readability and maintenance.