Am trying to create an archetype which will conditionally include file based on the user input.
Like for eg., if a user will use this custom archetype and pass pa
I realize that this is a really old question, but now (in 2018), I'm accomplishing this task through the use of Maven's support for a post-generate groovy script.
If you include a groovy script named "archetype-post-generate.groovy" in the archetype project's src/main/resources/META-INF directory, then it will be executed after the archetype is generated.
The script will have access to the archetype's properties, e.g. ${artifactId}, including any custom properties.
What I do is to include all possible files in the archetype, and then in the groovy script, I inspect the relevant archetype properties, and delete the unwanted files.
In my script, I'm also renaming some files, as well as editing some of the files by reading them in, doing string replacements, and then writing them back out.
It's a bit cumbersome, but it works.
In case you want to remove a whole directory you can change the example above a little bit in order to achieve that! Here we go:
import java.nio.file.Files
// the path where the project got generated
File rootDir = new File(request.getOutputDirectory() + "/" + request.getArtifactId())
// the properties available to the archetype
Properties properties = request.getProperties()
String addSwaggerUI = properties.get("addSwaggerUI")
// the Java package of the generated project, e.g. com.acme
String packageName = properties.get("package")
// convert it into a path, e.g. com/acme
String packagePath = packageName.replace(".", "/")
if (addSwaggerUI == "false") {
println ""
println "|---------> Hi there!"
println "|-> ${rootDir}"
println "|-> ${packageName}"
println "|-> ${packagePath}"
println "|-> ${addSwaggerUI}"
println "|---------> Bye bye!"
println ""
new File(rootDir, "src/main/java/${packagePath}/config").deleteDir()
}
More archetype-post-generate.groovy examples can be found here and here!
The answer above by GreyBeardedGeek is the correct one. In case someone needs an example of how that Groovy script should look like, I wrote a small blogpost.
Here's the Groovy script from my post:
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
// the path where the project got generated
Path projectPath = Paths.get(request.outputDirectory, request.artifactId)
// the properties available to the archetype
Properties properties = request.properties
// connectionType is either ftp or sftp
String connectionType = properties.get("connectionType")
// the Java package of the generated project, e.g. com.acme
String packageName = properties.get("package")
// convert it into a path, e.g. com/acme
String packagePath = packageName.replace(".", "/")
if (connectionType == "sftp") {
// delete the FTP file
Files.deleteIfExists projectPath.resolve("src/main/java/" + packagePath + "/polling/FtpFlowBuilder.java")
} else if (connectionType == "ftp") {
// delete the SFTP file
Files.deleteIfExists projectPath.resolve("src/main/java/" + packagePath + "/polling/SftpFlowBuilder.java")
}