[ https://issues.apache.org/jira/browse/MCLEAN-125?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17923047#comment-17923047 ]
Peter De Maeyer commented on MCLEAN-125: ---------------------------------------- Okay, then I propose you decline the corresponding PR. > 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. Because of its design, the current > {{maven-clean-plugin}} deletes these files too, breaking the build when doing > a {{mvn clean verify}}. > The workaround in such a case is to use {{mvn clean; mvn verify}} instead, > note the semicolon. 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. > h3. Idea 1 > 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. And even that is a > hack to work around the fundamental limitation that Maven itself has no > support for this. 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. > Conclusion: it is impossible to implement due to lack of support from the > Maven framework. > h3. Idea 2 > Another idea is to only delete files based on modification time < build time, > for example by configuring the Clean plugin with an {{excludeBuildFiles}} > parameter. This would effectively delete files which were the result of > _previous_ builds, but _not_ files which are the result of the _current_ > build. This works assuming that: > * Modification times of files produced in output directories are not > manipulated. _If_ they are manipulated, this breaks the feature and files may > be deleted while they're not supposed to, or the other way around. > * Modification time is enabled on the file system and is granular enough to > separate consecutive builds. Imagine for example the modification times are > not granular enough so that two consecutive builds have the same build > timestamp. That would mean files are not deleted when they're supposed to. On > Linux timestamps have millisecond precision, and on Windows at least second > precision AFAIK, which is good enough. > Conclusion: this works quite well in practice. I'll create a PR for this. -- This message was sent by Atlassian Jira (v8.20.10#820010)