class AbstractToolMojo extends AbstractSpeedmentMojo {
    
    @Parameter(defaultValue = "${project}", required = true, readonly = true)
    private MavenProject mavenProject;
    
    private @Parameter(defaultValue = "${debug}") Boolean debug;
    private @Parameter(defaultValue = "${dbms.host}") String dbmsHost;
    private @Parameter(defaultValue = "${dbms.port}") int dbmsPort;
    private @Parameter(defaultValue = "${dbms.username}") String dbmsUsername;
    private @Parameter(defaultValue = "${dbms.password}") String dbmsPassword;
    private @Parameter(defaultValue = "${components}") String[] components;
    private @Parameter(defaultValue = "${typeMappers}") Mapping[] typeMappers;
    private @Parameter ConfigParam[] parameters;
    private @Parameter(defaultValue = "${configFile}") String configFile;

    protected AbstractToolMojo() {}
    
    protected AbstractToolMojo(Consumer<ApplicationBuilder<?, ?>> configurer) { super(configurer);}
    
    @Override
    public void execute(Speedment speedment) throws MojoExecutionException, MojoFailureException {<FILL_FUNCTION_BODY>}

    @Override
    protected void configureBuilder(ApplicationBuilder<?, ?> builder) {
        // Add tool specific items, #733
        builder.
            withBundle(ToolBundle.class);
    }

    @Override
    protected MavenProject project() {
        return mavenProject;
    }

    @Override
    protected String[] components() {
        return components;
    }
    
    @Override
    protected Mapping[] typeMappers() {
        return typeMappers;
    }
    
    @Override
    protected ConfigParam[] parameters() {
        return parameters;
    }
    
    public String getConfigFile() {
        return configFile;
    }
    
    @Override
    protected boolean debug() {
        return (debug != null) && debug;
    }

    @Override
    protected String dbmsHost() {
        return dbmsHost;
    }

    @Override
    protected int dbmsPort() {
        return dbmsPort;
    }

    @Override
    protected String dbmsUsername() {
        return dbmsUsername;
    }

    @Override
    protected String dbmsPassword() {
        return dbmsPassword;
    }
    
    @Override
    protected String launchMessage() {
        return "Running speedment:tool";
    }
}

        final Injector injector = speedment.getOrThrow(Injector.class);
        MainApp.setInjector(injector);
        
        if (hasConfigFile()) {
            Application.launch(MainApp.class, configLocation().toAbsolutePath().toString());
        } else {
            Application.launch(MainApp.class);
        }
    
<methods>public final void execute() throws org.apache.maven.plugin.MojoExecutionException, org.apache.maven.plugin.MojoFailureException<variables>private static final java.nio.file.Path DEFAULT_CONFIG,private static final Consumer<ApplicationBuilder<?,?>> NOTHING,static final java.lang.String SPECIFIED_CLASS,private final non-sealed Consumer<ApplicationBuilder<?,?>> configurer,public java.lang.String dbmsConnectionUrl