[
https://issues.apache.org/jira/browse/MCLEAN-125?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Peter De Maeyer updated MCLEAN-125:
-----------------------------------
Summary: Don't clean files put in the output directory by previous modules
during the same build (was: Clean all modules in multi-module project
beforehand)
> Don't clean files put in the output directory by previous modules during the
> same build
> ---------------------------------------------------------------------------------------
>
> Key: MCLEAN-125
> URL: https://issues.apache.org/jira/browse/MCLEAN-125
> Project: Maven Clean Plugin
> Issue Type: Improvement
> Affects Versions: 3.4.0
> Reporter: Peter De Maeyer
> Priority: Major
>
> In complex multi-module projects with custom plugins, there is often a
> situation where one module populates the {{target/}} directory of _another_
> (typically sibling or parent) module. While I agree that is not ideal and not
> recommended practice, it is sometimes the only way to work around limitations
> in plugins or build setups.
> In such a case, one sooner or later bumps into the situation where {{mvn
> clean verify}} fails while {{mvn clean; mvn verify}} (note the semicolon)
> succeeds. The reason is that in the first case the {{target/}} directory is
> cleared at the start of every module's build life cycle, clearing any needed
> files that a previous module has put there. The workaround {{mvn clean; mvn
> verify}} works, but it requires understanding of the user to correctly build
> the multi-module project, which is suboptimal. It would be better if that
> knowledge were embedded in the build script.
> To better support these situations, it would be useful to have for example a
> {{cleanAtStart}} option to the {{maven-clean-plugin}} that would clean _all_
> modules during the "clean" phase of the first one. It would be similar and
> complementary to the {{installAtEnd}} option of the {{maven-install-plugin}},
> or the {{deployAtEnd}} option of the {{maven-deploy-plugin}}. This would move
> the responsibility for correctly cleaning the project from the user to the
> build, where it belongs. Then users could do a plain {{mvn clean install}}
> while trusting the build script to take care of any of its own multi-module
> intricacies.
> I did some preliminary analysis of what it would take to implement this,
> using the {{maven-invoker-plugin}}'s {{installAtEnd}} as inspiration, but
> it's not so simple. The advantage that the {{maven-install-plugin}} has is
> that it can visit all the plugin executions of all the modules in a normal
> way and merely needs to defer the actual installation. Here, for the
> {{maven-clean-plugin}}, it is different: it needs to clean modules at the
> very start, before anything else, based on information that is not available
> yet 'coz the executions of the next modules hasn't been visited yet.
> Another idea for an implementation I had was to monitor the file system for
> files that were added during the build (by other modules) and exclude those
> from cleaning, but that is also (too) complicated to implement.
> Anyway, difficulty of implementation aside, I think this would be a good
> feature that would complement existing features such as {{installAtEnd}} and
> {{deployAtEnd}}. Ideally in a 3.x version.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)