diff --git a/src/main/java/org/quickfixj/codegenerator/GenerateMojo.java b/src/main/java/org/quickfixj/codegenerator/GenerateMojo.java index 781c7f0..fc23627 100644 --- a/src/main/java/org/quickfixj/codegenerator/GenerateMojo.java +++ b/src/main/java/org/quickfixj/codegenerator/GenerateMojo.java @@ -93,6 +93,13 @@ public class GenerateMojo extends AbstractMojo { @Parameter(defaultValue = "true") private boolean overwrite = true; + /** + * Skips code generation, e.g. when the generated sources are known to be up to date. + * The output directory is still added as a compile source root. + */ + @Parameter(property = "quickfixj.codegenerator.skip", defaultValue = "false") + private boolean skip; + /** * The Maven project to act upon. */ @@ -111,6 +118,14 @@ public class GenerateMojo extends AbstractMojo { */ public void execute() throws MojoExecutionException { + if (skip) { + log("Skipping code generation for " + dictFile); + if (project != null) { + project.addCompileSourceRoot(outputDirectory.getAbsolutePath()); + } + return; + } + if (!outputDirectory.exists()) { FileUtils.mkdir(outputDirectory.getAbsolutePath()); } @@ -338,4 +353,18 @@ public boolean isOverwrite() { public void setOverwrite(boolean overwrite) { this.overwrite = overwrite; } + + /** + * @return whether code generation is skipped + */ + public boolean isSkip() { + return skip; + } + + /** + * @param skip sets whether code generation is skipped + */ + public void setSkip(boolean skip) { + this.skip = skip; + } } diff --git a/src/test/java/org/quickfixj/codegenerator/SkipTest.java b/src/test/java/org/quickfixj/codegenerator/SkipTest.java new file mode 100644 index 0000000..b2c4e9a --- /dev/null +++ b/src/test/java/org/quickfixj/codegenerator/SkipTest.java @@ -0,0 +1,46 @@ +package org.quickfixj.codegenerator; + +import static org.junit.jupiter.api.Assertions.*; + +import java.io.File; +import java.io.IOException; + +import org.apache.commons.io.FileUtils; +import org.apache.maven.plugin.MojoExecutionException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class SkipTest { + + private File outputDirectory = new File("./target/test-output-skip/"); + private File dictFile = new File("./src/test/resources/FIX41.xml"); + private GenerateMojo mojo; + + @BeforeEach + public void setup() throws IOException { + if (outputDirectory.exists()) { + FileUtils.deleteDirectory(outputDirectory); + } + mojo = new GenerateMojo(); + mojo.setDictFile(dictFile); + mojo.setOutputDirectory(outputDirectory); + mojo.setSchemaDirectory(new File("./src/main/resources/org/quickfixj/codegenerator")); + mojo.setPackaging("quickfix.fix41"); + } + + @Test + public void testNothingGeneratedWhenSkipTrue() throws MojoExecutionException { + mojo.setSkip(true); + mojo.execute(); + + assertFalse(new File(outputDirectory, "quickfix/field/AllocShares.java").exists()); + } + + @Test + public void testGeneratedWhenSkipFalse() throws MojoExecutionException { + mojo.setSkip(false); + mojo.execute(); + + assertTrue(new File(outputDirectory, "quickfix/field/AllocShares.java").exists()); + } +}