From 4cf793b64eaac4c73499c74855c8c5b2a827a81f Mon Sep 17 00:00:00 2001 From: Laurent SCHOELENS <61973605+laurentschoelens@users.noreply.github.com> Date: Thu, 15 Feb 2024 15:32:29 +0100 Subject: [PATCH] [#502] : delete episodeFile if only file generated in configuration phase of m2e (tested in eclipse) --- .../org/jvnet/jaxb/maven/RawXJC2Mojo.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/maven-plugin/plugin-core/src/main/java/org/jvnet/jaxb/maven/RawXJC2Mojo.java b/maven-plugin/plugin-core/src/main/java/org/jvnet/jaxb/maven/RawXJC2Mojo.java index de2dbe3bd..3cd54ae49 100644 --- a/maven-plugin/plugin-core/src/main/java/org/jvnet/jaxb/maven/RawXJC2Mojo.java +++ b/maven-plugin/plugin-core/src/main/java/org/jvnet/jaxb/maven/RawXJC2Mojo.java @@ -60,6 +60,7 @@ import org.apache.maven.project.artifact.InvalidDependencyVersionException; import org.apache.maven.settings.Proxy; import org.apache.maven.settings.Settings; +import org.codehaus.plexus.util.DirectoryScanner; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; import org.jvnet.jaxb.maven.net.CompositeURILastModifiedResolver; @@ -75,6 +76,7 @@ import org.jvnet.jaxb.maven.util.LocaleUtils; import org.jvnet.jaxb.maven.util.CollectionUtils.Function; import org.sonatype.plexus.build.incremental.BuildContext; +import org.sonatype.plexus.build.incremental.EmptyScanner; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -479,6 +481,7 @@ protected void doExecute() throws MojoExecutionException { setupDirectories(); doExecute(options); addIfExistsToEpisodeSchemaBindings(); + deleteEpisodeIfOnlyFileOnEmptyContext(); final BuildContext buildContext = getBuildContext(); getLog().debug(MessageFormat.format("Refreshing the generated directory [{0}].", getGenerateDirectory().getAbsolutePath())); @@ -577,6 +580,33 @@ private void addIfExistsToEpisodeSchemaBindings() throws MojoExecutionException } } + private void deleteEpisodeIfOnlyFileOnEmptyContext() { + if (!getEpisode() || getBuildContext() == null) { + return; + } + final File episodeFile = getEpisodeFile(); + if (getBuildContext().isIncremental() && getBuildContext().newScanner(getGenerateDirectory()) instanceof EmptyScanner) { + if (!episodeFile.canWrite()) { + getLog().warn(MessageFormat + .format("Episode file [{0}] is not writable, could not delete on incremental empty build.", episodeFile)); + return; + } + DirectoryScanner directoryScanner = new DirectoryScanner(); + directoryScanner.setBasedir(getGenerateDirectory()); + directoryScanner.setIncludes(getProduces()); + directoryScanner.scan(); + + if (directoryScanner.getIncludedFiles() != null && directoryScanner.getIncludedFiles().length == 1) { + String fileFound = directoryScanner.getIncludedFiles()[0]; + if (new File(directoryScanner.getBasedir(), fileFound).equals(episodeFile)) { + getLog().info(MessageFormat + .format("directoryScanner got only one file [{0}] which is episodeFile - deleting since running in m2e context.", fileFound, episodeFile)); + episodeFile.delete(); + } + } + } + } + private URILastModifiedResolver uriLastModifiedResolver; private void setupURILastModifiedResolver() {