This is an automated email from the ASF dual-hosted git repository.

gitgabrio pushed a commit to branch main
in repository 
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git


The following commit(s) were added to refs/heads/main by this push:
     new 706425de27 [incubator-kie-issues#2091] Modify the 
`kogito-maven-plugin` to be a wrapper of the codegen library (#4058)
706425de27 is described below

commit 706425de27266e4c2a5fb69395d7cf41529e8a83
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Tue Sep 23 15:42:09 2025 +0200

    [incubator-kie-issues#2091] Modify the `kogito-maven-plugin` to be a 
wrapper of the codegen library (#4058)
    
    * [incubator-kie-issues#2091] Reorganizing most code.
    Move all the logic inside codegen library.
    Replaced URL with URI
    Scaffold mojo not working inside kogito-maven-plugin-test
    
    * [incubator-kie-issues#2091] Removing broken scaffold mojo.
    ScaffoldMojo has been broken for long time.
    
    * [incubator-kie-issues#2091] Fixing java level for springboot integration 
tests
    
    * [incubator-kie-issues#2091] Removing unused scaffold invocation from 
integration test
    
    * [incubator-kie-issues#2091] Removing duplicated GeneratedFileType 
REST_TYPE  from org.kie.kogito.codegen.api.GEnerator. Replaced with common one 
from org.drools.codegen.common.GeneratedFileType
    
    * [incubator-kie-issues#2091] Fix correct "maven.compiler.release" name
    
    * [incubator-kie-issues#2091] Fix impsort/format
    
    * [incubator-kie-issues#2091] Fix as pe PR suggestion
    
    * [incubator-kie-issues#2091] Fix impsort
    
    ---------
    
    Co-authored-by: Gabriele-Cardosi <[email protected]>
---
 .../java/org/kie/kogito/codegen/api/Generator.java |   1 -
 .../kogito/codegen/core/ApplicationGenerator.java  |   4 +-
 .../kogito/codegen/core/ObjectMapperGenerator.java |   5 +-
 .../codegen/core/ApplicationGeneratorTest.java     |   8 +-
 .../codegen/decision/DecisionCodegenUtils.java     |   6 +-
 ...ecisionModelResourcesProviderGeneratorTest.java |   8 +-
 .../kie/kogito/codegen/manager/BuilderManager.java |  91 ++++++++++++
 .../kie/kogito/codegen/manager/CompilerHelper.java |  66 ++++++---
 .../codegen/manager/GenerateModelHelper.java       |  95 ++++++++++++-
 .../codegen/manager/util/CodeGenManagerUtil.java   |  48 ++++++-
 .../codegen/prediction/PredictionCodegenUtils.java |   4 +-
 .../prediction/PredictionCodegenGenerateTest.java  |   4 +-
 .../kie/kogito/codegen/process/ProcessCodegen.java |   5 +-
 .../kogito/codegen/usertask/UserTaskCodegen.java   |   3 +-
 .../codegen/rules/QueryEndpointGenerator.java      |   4 +-
 .../codegen/sample/generator/SampleCodegen.java    |   3 +-
 .../sample/generator/SampleCodegenTest.java        |   4 +-
 kogito-maven-plugin-test/pom.xml                   |   1 +
 .../kie/kogito/maven/plugin/AbstractKieMojo.java   | 127 +++++++++++------
 .../kie/kogito/maven/plugin/GenerateModelMojo.java | 156 +--------------------
 .../org/kie/kogito/maven/plugin/ScaffoldMojo.java  |  54 -------
 .../org/kie/kogito/maven/plugin/util/MojoUtil.java |  42 +++---
 .../kogito/maven/plugin/GenerateModelMojoTest.java |  73 +++++-----
 .../common/deployment/KogitoAssetsProcessor.java   |   4 +-
 .../invoker.properties                             |   2 +-
 springboot/integration-tests/pom.xml               |   1 +
 26 files changed, 455 insertions(+), 364 deletions(-)

diff --git 
a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/Generator.java
 
b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/Generator.java
index ac62d78117..45879f86c5 100644
--- 
a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/Generator.java
+++ 
b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/Generator.java
@@ -30,7 +30,6 @@ import org.kie.kogito.codegen.api.context.KogitoBuildContext;
  */
 public interface Generator {
 
-    GeneratedFileType REST_TYPE = GeneratedFileType.of("REST", 
GeneratedFileType.Category.SOURCE, true, true);
     GeneratedFileType MODEL_TYPE = GeneratedFileType.of("MODEL", 
GeneratedFileType.Category.SOURCE, true, true);
 
     /**
diff --git 
a/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ApplicationGenerator.java
 
b/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ApplicationGenerator.java
index f239870d5a..78f5570431 100644
--- 
a/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ApplicationGenerator.java
+++ 
b/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ApplicationGenerator.java
@@ -41,7 +41,7 @@ import org.kie.kogito.codegen.api.context.KogitoBuildContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.kie.kogito.codegen.api.Generator.REST_TYPE;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 import static 
org.kie.kogito.codegen.core.CustomDashboardGeneratedUtils.loadCustomGrafanaDashboardsList;
 
 public class ApplicationGenerator {
@@ -121,7 +121,7 @@ public class ApplicationGenerator {
     }
 
     private boolean filterGeneratedFile(GeneratedFile generatedFile, boolean 
keepRestFile) {
-        boolean keepFile = keepRestFile || 
!REST_TYPE.equals(generatedFile.type());
+        boolean keepFile = keepRestFile || !REST.equals(generatedFile.type());
         if (!keepFile) {
             LOGGER.warn("Skipping file because REST is disabled: " + 
generatedFile.relativePath());
         }
diff --git 
a/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ObjectMapperGenerator.java
 
b/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ObjectMapperGenerator.java
index 58f9f31571..90975867bf 100644
--- 
a/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ObjectMapperGenerator.java
+++ 
b/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/ObjectMapperGenerator.java
@@ -19,10 +19,11 @@
 package org.kie.kogito.codegen.core;
 
 import org.drools.codegen.common.GeneratedFile;
-import org.kie.kogito.codegen.api.Generator;
 import org.kie.kogito.codegen.api.context.KogitoBuildContext;
 import org.kie.kogito.codegen.api.template.TemplatedGenerator;
 
+import static org.drools.codegen.common.GeneratedFileType.REST;
+
 public class ObjectMapperGenerator {
 
     private ObjectMapperGenerator() {
@@ -33,7 +34,7 @@ public class ObjectMapperGenerator {
                 .withTemplateBasePath("class-templates/config")
                 .build(context, "GlobalObjectMapper");
 
-        return new GeneratedFile(Generator.REST_TYPE,
+        return new GeneratedFile(REST,
                 generator.generatedFilePath(),
                 generator.compilationUnitOrThrow().toString());
     }
diff --git 
a/kogito-codegen-modules/kogito-codegen-core/src/test/java/org/kie/kogito/codegen/core/ApplicationGeneratorTest.java
 
b/kogito-codegen-modules/kogito-codegen-core/src/test/java/org/kie/kogito/codegen/core/ApplicationGeneratorTest.java
index 46b3019230..e172164510 100644
--- 
a/kogito-codegen-modules/kogito-codegen-core/src/test/java/org/kie/kogito/codegen/core/ApplicationGeneratorTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-core/src/test/java/org/kie/kogito/codegen/core/ApplicationGeneratorTest.java
@@ -36,7 +36,7 @@ import com.github.javaparser.ast.expr.Expression;
 import com.github.javaparser.ast.expr.MethodCallExpr;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.kie.kogito.codegen.api.Generator.REST_TYPE;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 import static 
org.kie.kogito.codegen.api.context.KogitoBuildContext.generateRESTConfigurationKeyForResource;
 
 public class ApplicationGeneratorTest {
@@ -136,7 +136,7 @@ public class ApplicationGeneratorTest {
             assertThat(appGenerator.generateComponents())
                     .isNotEmpty()
                     .hasSize(1)
-                    .matches(files -> files.stream().anyMatch(gf -> 
REST_TYPE.equals(gf.type())));
+                    .matches(files -> files.stream().anyMatch(gf -> 
REST.equals(gf.type())));
         } else {
             assertThat(appGenerator.generateComponents()).isEmpty();
         }
@@ -163,7 +163,7 @@ public class ApplicationGeneratorTest {
             assertThat(appGenerator.generateComponents())
                     .isNotEmpty()
                     .hasSize(1)
-                    .matches(files -> files.stream().anyMatch(gf -> 
REST_TYPE.equals(gf.type())));
+                    .matches(files -> files.stream().anyMatch(gf -> 
REST.equals(gf.type())));
         } else {
             assertThat(appGenerator.generateComponents()).isEmpty();
         }
@@ -294,7 +294,7 @@ public class ApplicationGeneratorTest {
         @Override
         protected Collection<GeneratedFile> internalGenerate() {
             if (context.hasRESTForGenerator(this)) {
-                return Collections.singleton(new GeneratedFile(REST_TYPE, 
"my/path", ""));
+                return Collections.singleton(new GeneratedFile(REST, 
"my/path", ""));
             } else {
                 return Collections.emptyList();
             }
diff --git 
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegenUtils.java
 
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegenUtils.java
index c8082ebd63..8429c06be8 100644
--- 
a/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegenUtils.java
+++ 
b/kogito-codegen-modules/kogito-codegen-decisions/src/main/java/org/kie/kogito/codegen/decision/DecisionCodegenUtils.java
@@ -71,9 +71,9 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import static java.util.stream.Collectors.toList;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 import static 
org.kie.efesto.common.core.utils.JSONUtils.getGeneratedResourcesObject;
 import static 
org.kie.efesto.common.core.utils.JSONUtils.getGeneratedResourcesString;
-import static org.kie.kogito.codegen.api.Generator.REST_TYPE;
 import static 
org.kie.kogito.codegen.decision.CodegenUtils.getDefinitionsFileFromModel;
 import static 
org.kie.kogito.codegen.decision.DecisionCodegen.STRONGLY_TYPED_CONFIGURATION_KEY;
 
@@ -229,7 +229,7 @@ public class DecisionCodegenUtils {
         DecisionRestResourceGenerator resourceGenerator = new 
DecisionRestResourceGenerator(context, dmnModel, appCanonicalName)
                 .withStronglyTyped(stronglyTypedEnabled)
                 .withOASResult(oasResult, isMPAnnotationsPresent, 
isIOSwaggerOASv3AnnotationsPresent);
-        storeFile(generatedFiles, REST_TYPE, 
resourceGenerator.generatedFilePath(), resourceGenerator.generate());
+        storeFile(generatedFiles, REST, resourceGenerator.generatedFilePath(), 
resourceGenerator.generate());
         if (context.getAddonsConfig().usePrometheusMonitoring()) {
             generateAndStoreGrafanaDashboards(context, generatedFiles, 
resourceGenerator);
         }
@@ -258,7 +258,7 @@ public class DecisionCodegenUtils {
     static void generateCloudEventsResources(Collection<GeneratedFile> 
generatedFiles, KogitoBuildContext context, List<DMNModel> dmnModels) {
         if (context.getAddonsConfig().useCloudEvents()) {
             final DecisionCloudEventMetaFactoryGenerator 
ceMetaFactoryGenerator = new DecisionCloudEventMetaFactoryGenerator(context, 
dmnModels);
-            storeFile(generatedFiles, REST_TYPE, 
ceMetaFactoryGenerator.generatedFilePath(), ceMetaFactoryGenerator.generate());
+            storeFile(generatedFiles, REST, 
ceMetaFactoryGenerator.generatedFilePath(), ceMetaFactoryGenerator.generate());
         }
     }
 
diff --git 
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionModelResourcesProviderGeneratorTest.java
 
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionModelResourcesProviderGeneratorTest.java
index 8ee389ca86..9c318cb307 100644
--- 
a/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionModelResourcesProviderGeneratorTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-decisions/src/test/java/org/kie/kogito/codegen/decision/DecisionModelResourcesProviderGeneratorTest.java
@@ -26,14 +26,12 @@ import java.util.NoSuchElementException;
 import java.util.Set;
 
 import org.drools.codegen.common.GeneratedFile;
-import org.drools.codegen.common.GeneratedFileType;
 import org.junit.jupiter.api.Test;
 import org.kie.api.io.ResourceType;
 import org.kie.kogito.codegen.api.AddonsConfig;
 import org.kie.kogito.codegen.api.context.KogitoBuildContext;
 import org.kie.kogito.codegen.api.context.impl.QuarkusKogitoBuildContext;
 import org.kie.kogito.codegen.api.io.CollectedResource;
-import org.kie.kogito.codegen.core.AbstractGenerator;
 import org.kie.kogito.codegen.core.io.CollectedResourceProducer;
 
 import com.github.javaparser.ast.CompilationUnit;
@@ -51,6 +49,8 @@ import static com.github.javaparser.StaticJavaParser.parse;
 import static java.util.stream.Collectors.toList;
 import static java.util.stream.Collectors.toSet;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.drools.codegen.common.GeneratedFileType.REST;
+import static org.drools.codegen.common.GeneratedFileType.SOURCE;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -82,13 +82,13 @@ public class DecisionModelResourcesProviderGeneratorTest {
         // Align this FAI-215 test (#621) with unknown order of generated 
files (ie.: additional generated files might be present)
         //A Rest endpoint is always generated per model.
         List<GeneratedFile> generatedRESTFiles = generatedFiles.stream()
-                .filter(gf -> gf.type().equals(AbstractGenerator.REST_TYPE))
+                .filter(gf -> gf.type().equals(REST))
                 .collect(toList());
         assertFalse(generatedRESTFiles.isEmpty());
         assertEquals(numberOfModels, generatedRESTFiles.size());
 
         List<GeneratedFile> generatedCLASSFile = generatedFiles.stream()
-                .filter(gf -> gf.type().equals(GeneratedFileType.SOURCE))
+                .filter(gf -> gf.type().equals(SOURCE))
                 .collect(toList());
         assertEquals(1, generatedCLASSFile.size());
         GeneratedFile classFile = generatedCLASSFile.get(0);
diff --git 
a/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/BuilderManager.java
 
b/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/BuilderManager.java
new file mode 100644
index 0000000000..23d1fab8b6
--- /dev/null
+++ 
b/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/BuilderManager.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.kie.kogito.codegen.manager;
+
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.kie.kogito.KogitoGAV;
+import org.kie.kogito.codegen.api.context.KogitoBuildContext;
+import org.kie.kogito.codegen.manager.util.CodeGenManagerUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BuilderManager {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(BuilderManager.class);
+
+    public interface KogitoBuildContextInfo {
+        Path projectBaseAbsolutePath();
+
+        CodeGenManagerUtil.Framework framework();
+
+        boolean enablePersistence();
+
+        Set<URI> projectFilesUris();
+    }
+
+    public record BuildInfo(Set<URI> projectFilesUris,
+            Path projectBaseAbsolutePath, //MUST BE ABSOLUTE
+            Path outputDirectory,
+            String projectGroupId,
+            String projectArtifactId,
+            String projectVersion,
+            String javaSourceEncoding,
+            String javaVersion,
+            String jsonSchemaVersion,
+            boolean generatePartial,
+            boolean enablePersistence,
+            boolean onDemand,
+            boolean keepSources,
+            List<String> runtimeClassPathElements,
+            CodeGenManagerUtil.Framework framework,
+            Map<String, String> properties) implements KogitoBuildContextInfo {
+    }
+
+    public static void build(BuildInfo buildInfo) throws MalformedURLException 
{
+        LOGGER.info("Building project: {}:{}:{}", buildInfo.projectGroupId(), 
buildInfo.projectArtifactId(), buildInfo.projectVersion());
+        CodeGenManagerUtil.setSystemProperties(buildInfo.properties());
+        ClassLoader projectClassLoader = 
CodeGenManagerUtil.projectClassLoader(buildInfo.projectFilesUris());
+        KogitoGAV kogitoGAV = new KogitoGAV(buildInfo.projectGroupId(), 
buildInfo.projectArtifactId(), buildInfo.projectVersion());
+        KogitoBuildContext kogitoBuildContext = 
getKogitoBuildContext(projectClassLoader, kogitoGAV, buildInfo);
+        GenerateModelHelper.GenerateModelInfo generateModelInfo = new 
GenerateModelHelper.GenerateModelInfo(projectClassLoader,
+                kogitoBuildContext, buildInfo);
+        GenerateModelHelper.generateModel(generateModelInfo);
+        LOGGER.info("Project build done");
+    }
+
+    static KogitoBuildContext getKogitoBuildContext(ClassLoader 
projectClassLoader, KogitoGAV kogitoGAV, KogitoBuildContextInfo 
kogitoBuildContextInfo) {
+        return 
CodeGenManagerUtil.discoverKogitoRuntimeContext(projectClassLoader, 
kogitoBuildContextInfo.projectBaseAbsolutePath(), kogitoGAV,
+                new 
CodeGenManagerUtil.ProjectParameters(kogitoBuildContextInfo.framework(), "", 
"", "", "", kogitoBuildContextInfo.enablePersistence()),
+                className -> {
+                    try {
+                        return 
CodeGenManagerUtil.isClassNameInUrlClassLoader(kogitoBuildContextInfo.projectFilesUris(),
 className);
+                    } catch (MalformedURLException e) {
+                        throw new RuntimeException(e);
+                    }
+                });
+    }
+
+}
diff --git 
a/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/CompilerHelper.java
 
b/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/CompilerHelper.java
index 8d7b782671..a0029ed77f 100644
--- 
a/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/CompilerHelper.java
+++ 
b/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/CompilerHelper.java
@@ -44,28 +44,52 @@ public class CompilerHelper {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(CompilerHelper.class);
 
     private static final JavaCompiler JAVA_COMPILER = 
JavaCompilerFactory.loadCompiler(JavaConfiguration.CompilerType.NATIVE, "17");
-    private static final GeneratedFileWriter.Builder 
GENERATED_FILE_WRITER_BUILDER = GeneratedFileWriter.builder("kogito", 
"kogito.codegen.resources.directory", "kogito.codegen.sources.directory");
+    private static final GeneratedFileWriter.Builder 
GENERATED_FILE_WRITER_BUILDER =
+            GeneratedFileWriter.builder("kogito", 
"kogito.codegen.resources.directory", "kogito.codegen.sources.directory");
     public static final String SOURCES = "SOURCES";
     public static final String RESOURCES = "RESOURCES";
 
     private CompilerHelper() {
     }
 
-    public static void 
compileAndDumpGeneratedSources(Collection<GeneratedFile> generatedSources,
-            ClassLoader classLoader,
+    public record CompileInfo(Collection<GeneratedFile> generatedSources,
+            Collection<GeneratedFile> resources,
+            ClassLoader projectClassLoader,
             List<String> runtimeClassPathElements,
             File baseDir,
             String javaSourceEncoding,
-            String javaSourceVersion,
-            String javaTargetVersion) {
-        compileAndWriteClasses(generatedSources,
-                classLoader,
-                buildJavaCompilerSettings(runtimeClassPathElements,
-                        javaSourceEncoding,
-                        javaSourceVersion,
-                        javaTargetVersion),
-                getGeneratedFileWriter(baseDir));
-        writeFiles(generatedSources, baseDir);
+            String javaVersion) {
+
+        public CompileInfo(Collection<GeneratedFile> generatedSources, 
Collection<GeneratedFile> resources, GenerateModelHelper.GenerateModelInfo 
generateModelInfo) {
+            this(generatedSources,
+                    resources,
+                    generateModelInfo.projectClassLoader(),
+                    generateModelInfo.runtimeClassPathElements(),
+                    generateModelInfo.baseDir(),
+                    generateModelInfo.javaSourceEncoding(),
+                    generateModelInfo.javaVersion());
+        }
+    }
+
+    public static void compileAndDump(CompileInfo compileInfo) {
+        compileAndDumpGeneratedSources(compileInfo);
+        dumpResources(compileInfo.resources(), compileInfo.baseDir());
+    }
+
+    public static void compileAndDumpGeneratedSources(CompileInfo compileInfo) 
{
+        // Compile and write files
+        compileAndWriteClasses(compileInfo.generatedSources(),
+                compileInfo.projectClassLoader,
+                buildJavaCompilerSettings(compileInfo.runtimeClassPathElements,
+                        compileInfo.javaSourceEncoding,
+                        compileInfo.javaVersion),
+                getGeneratedFileWriter(compileInfo.baseDir));
+        // Dump resources
+        writeFiles(compileInfo.generatedSources, compileInfo.baseDir);
+    }
+
+    public static void dumpResources(Collection<GeneratedFile> resources, Path 
baseDir) {
+        dumpResources(resources, baseDir.toFile());
     }
 
     public static void dumpResources(Collection<GeneratedFile> resources, File 
baseDir) {
@@ -77,6 +101,15 @@ public class CompilerHelper {
         toWrite.forEach(generatedFile -> writeGeneratedFile(generatedFile, 
writer));
     }
 
+    static void writeFiles(Collection<GeneratedFile> toWrite, Path baseDir) {
+        GeneratedFileWriter writer = getGeneratedFileWriter(baseDir);
+        toWrite.forEach(generatedFile -> writeGeneratedFile(generatedFile, 
writer));
+    }
+
+    static GeneratedFileWriter getGeneratedFileWriter(Path baseDir) {
+        return GENERATED_FILE_WRITER_BUILDER.build(baseDir);
+    }
+
     static void writeGeneratedFile(GeneratedFile generatedFile, 
GeneratedFileWriter writer) {
         LOGGER.info("Writing compiled class: {}", 
generatedFile.relativePath());
         writer.write(generatedFile);
@@ -119,15 +152,14 @@ public class CompilerHelper {
 
     static JavaCompilerSettings buildJavaCompilerSettings(List<String> 
runtimeClassPathElements,
             String sourceEncoding,
-            String sourceVersion,
-            String targetVersion) {
+            String javaVersion) {
         JavaCompilerSettings settings = new JavaCompilerSettings();
         for (String path : runtimeClassPathElements) {
             settings.addClasspath(new File(path));
         }
         settings.setSourceEncoding(sourceEncoding);
-        settings.setSourceVersion(sourceVersion);
-        settings.setTargetVersion(targetVersion);
+        settings.setSourceVersion(javaVersion);
+        settings.setTargetVersion(javaVersion);
         return settings;
     }
 }
diff --git 
a/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/GenerateModelHelper.java
 
b/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/GenerateModelHelper.java
index ec6d51d5b5..23a569595d 100644
--- 
a/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/GenerateModelHelper.java
+++ 
b/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/GenerateModelHelper.java
@@ -20,28 +20,108 @@ package org.kie.kogito.codegen.manager;
 
 import java.io.File;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 
 import org.drools.codegen.common.GeneratedFile;
 import org.kie.kogito.codegen.api.context.KogitoBuildContext;
 import org.kie.kogito.codegen.core.ApplicationGenerator;
 import org.kie.kogito.codegen.core.utils.ApplicationGeneratorDiscovery;
+import org.kie.kogito.codegen.manager.processes.PersistenceGenerationHelper;
+import org.kie.kogito.codegen.manager.util.CodeGenManagerUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.drools.codegen.common.GeneratedFileType.COMPILED_CLASS;
+import static 
org.kie.efesto.common.api.constants.Constants.INDEXFILE_DIRECTORY_PROPERTY;
 import static org.kie.kogito.codegen.manager.CompilerHelper.RESOURCES;
 import static org.kie.kogito.codegen.manager.CompilerHelper.SOURCES;
 
 public class GenerateModelHelper {
 
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(GenerateModelHelper.class);
+
     private GenerateModelHelper() {
     }
 
-    public static Map<String, Collection<GeneratedFile>> 
generateModelFiles(KogitoBuildContext kogitoBuildContext, boolean 
generatePartial) {
-        ApplicationGenerator appGen = 
ApplicationGeneratorDiscovery.discover(kogitoBuildContext);
+    public record GenerateModelInfo(ClassLoader projectClassLoader,
+            KogitoBuildContext kogitoBuildContext,
+            boolean onDemand,
+            boolean generatePartial,
+            Map<String, String> properties,
+            File outputDirectory,
+            List<String> runtimeClassPathElements,
+            File baseDir,
+            String javaSourceEncoding,
+            String javaVersion,
+            String schemaVersion,
+            boolean keepSources) {
+
+        public GenerateModelInfo(ClassLoader projectClassLoader, 
KogitoBuildContext kogitoBuildContext, BuilderManager.BuildInfo buildInfo) {
+            this(projectClassLoader, kogitoBuildContext, buildInfo.onDemand(), 
buildInfo.generatePartial(), buildInfo.properties(),
+                    buildInfo.outputDirectory().toFile(),
+                    buildInfo.runtimeClassPathElements(),
+                    buildInfo.projectBaseAbsolutePath().toFile(),
+                    buildInfo.javaSourceEncoding(),
+                    buildInfo.javaVersion(),
+                    buildInfo.jsonSchemaVersion(),
+                    buildInfo.keepSources());
+        }
+    }
+
+    public record GenerateModelFilesInfo(KogitoBuildContext kogitoBuildContext,
+            boolean generatePartial) {
+
+        public GenerateModelFilesInfo(GenerateModelInfo generateModelInfo) {
+            this(generateModelInfo.kogitoBuildContext,
+                    generateModelInfo.generatePartial);
+        }
+    }
+
+    public static void generateModel(GenerateModelInfo generateModelInfo) {
+        Map<String, Collection<GeneratedFile>> generatedModelFiles;
+        if (generateModelInfo.onDemand) {
+            LOGGER.info("On-Demand Mode is On. Use mvn compile 
kogito:scaffold");
+            generatedModelFiles = new HashMap<>();
+        } else {
+            generatedModelFiles = generateModelFiles(new 
GenerateModelFilesInfo(generateModelInfo));
+        }
+        if (generateModelInfo.outputDirectory == null) {
+            throw new IllegalStateException("outputDirectory is null");
+        }
+        boolean indexFileDirectorySet = 
isIndexFileDirectorySet(generateModelInfo.outputDirectory);
+        if (indexFileDirectorySet) {
+            System.clearProperty(INDEXFILE_DIRECTORY_PROPERTY);
+        }
+
+        CompilerHelper.CompileInfo compileInfo =
+                new 
CompilerHelper.CompileInfo(generatedModelFiles.get(SOURCES),
+                        generatedModelFiles.get(RESOURCES), generateModelInfo);
+
+        // Compile and write model files
+        CompilerHelper.compileAndDump(compileInfo);
+
+        Map<String, Collection<GeneratedFile>> generatedPersistenceFiles =
+                
PersistenceGenerationHelper.generatePersistenceFiles(generateModelInfo.kogitoBuildContext,
 generateModelInfo.projectClassLoader, generateModelInfo.schemaVersion);
+
+        // Compile and write persistence files
+        compileInfo =
+                new 
CompilerHelper.CompileInfo(generatedPersistenceFiles.get(SOURCES),
+                        generatedPersistenceFiles.get(RESOURCES), 
generateModelInfo);
+        CompilerHelper.compileAndDump(compileInfo);
+
+        if (!generateModelInfo.keepSources()) {
+            
CodeGenManagerUtil.deleteDrlFiles(generateModelInfo.outputDirectory().toPath());
+        }
+    }
+
+    public static Map<String, Collection<GeneratedFile>> 
generateModelFiles(GenerateModelFilesInfo generateModelFilesInfo) {
+        ApplicationGenerator appGen = 
ApplicationGeneratorDiscovery.discover(generateModelFilesInfo.kogitoBuildContext());
 
         Collection<GeneratedFile> generatedFiles;
-        if (generatePartial) {
+        if (generateModelFilesInfo.generatePartial()) {
             generatedFiles = appGen.generateComponents();
         } else {
             generatedFiles = appGen.generate();
@@ -59,6 +139,15 @@ public class GenerateModelHelper {
         return Map.of(SOURCES, generatedClasses, RESOURCES, 
generatedResources);
     }
 
+    static boolean isIndexFileDirectorySet(File outputDirectory) {
+        boolean toReturn = false;
+        if (System.getProperty(INDEXFILE_DIRECTORY_PROPERTY) == null) {
+            System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
outputDirectory.toString());
+            toReturn = true;
+        }
+        return toReturn;
+    }
+
     private static String convertPath(String toConvert) {
         return toConvert.replace('.', File.separatorChar) + ".class";
     }
diff --git 
a/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/util/CodeGenManagerUtil.java
 
b/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/util/CodeGenManagerUtil.java
index 9fac05c91b..05addb853b 100644
--- 
a/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/util/CodeGenManagerUtil.java
+++ 
b/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/util/CodeGenManagerUtil.java
@@ -21,13 +21,17 @@ package org.kie.kogito.codegen.manager.util;
 import java.io.IOException;
 import java.io.UncheckedIOException;
 import java.lang.reflect.Modifier;
+import java.net.MalformedURLException;
+import java.net.URI;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.PathMatcher;
+import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 
@@ -56,9 +60,20 @@ public class CodeGenManagerUtil {
     public static final PathMatcher DRL_FILE_MATCHER = 
FileSystems.getDefault().getPathMatcher("glob:**.drl");
 
     public enum Framework {
-        QUARKUS,
-        SPRING,
-        NONE
+        QUARKUS("quarkus"),
+        SPRING("spring"),
+        NONE("");
+
+        private final String name;
+
+        Framework(String name) {
+            this.name = name;
+        }
+
+        public String toName() {
+            return name;
+        }
+
     }
 
     public record ProjectParameters(CodeGenManagerUtil.Framework framework,
@@ -69,6 +84,20 @@ public class CodeGenManagerUtil {
             boolean persistence) {
     }
 
+    public static ClassLoader projectClassLoader(Set<URI> uris) throws 
MalformedURLException {
+        URL[] urlArray = convertURIsToURLs(uris);
+        return URLClassLoader.newInstance(urlArray, 
Thread.currentThread().getContextClassLoader());
+    }
+
+    public static URL[] convertURIsToURLs(final Set<URI> uris) throws 
MalformedURLException {
+        URL[] toReturn = new URL[uris.size()];
+        int counter = 0;
+        for (URI uri : uris) {
+            toReturn[counter++] = uri.toURL();
+        }
+        return toReturn;
+    }
+
     public static KogitoBuildContext discoverKogitoRuntimeContext(ClassLoader 
projectClassLoader,
             Path projectDir,
             KogitoGAV kogitoGAV,
@@ -90,6 +119,16 @@ public class CodeGenManagerUtil {
         return context;
     }
 
+    public static void setSystemProperties(Map<String, String> properties) {
+        if (properties != null) {
+            LOGGER.debug("Additional system properties: {}", properties);
+            for (Map.Entry<String, String> property : properties.entrySet()) {
+                System.setProperty(property.getKey(), property.getValue());
+            }
+            LOGGER.debug("Configured system properties were successfully 
set.");
+        }
+    }
+
     static KogitoBuildContext.Builder 
contextBuilder(CodeGenManagerUtil.Framework framework) {
         return switch (framework) {
             case QUARKUS -> QuarkusKogitoBuildContext.builder();
@@ -158,7 +197,8 @@ public class CodeGenManagerUtil {
                 .anyMatch(c -> !c.isInterface() && 
!Modifier.isAbstract(c.getModifiers()));
     }
 
-    public static boolean isClassNameInUrlClassLoader(URL[] urls, String 
className) {
+    public static boolean isClassNameInUrlClassLoader(Set<URI> uris, String 
className) throws MalformedURLException {
+        URL[] urls = convertURIsToURLs(uris);
         try (URLClassLoader cl = new URLClassLoader(urls)) {
             cl.loadClass(className);
             return true;
diff --git 
a/kogito-codegen-modules/kogito-codegen-predictions/src/main/java/org/kie/kogito/codegen/prediction/PredictionCodegenUtils.java
 
b/kogito-codegen-modules/kogito-codegen-predictions/src/main/java/org/kie/kogito/codegen/prediction/PredictionCodegenUtils.java
index f42952c168..4980e0fe28 100644
--- 
a/kogito-codegen-modules/kogito-codegen-predictions/src/main/java/org/kie/kogito/codegen/prediction/PredictionCodegenUtils.java
+++ 
b/kogito-codegen-modules/kogito-codegen-predictions/src/main/java/org/kie/kogito/codegen/prediction/PredictionCodegenUtils.java
@@ -38,9 +38,9 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import static org.drools.codegen.common.GeneratedFileType.COMPILED_CLASS;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 import static 
org.kie.efesto.common.core.utils.JSONUtils.getGeneratedResourcesObject;
 import static 
org.kie.efesto.common.core.utils.JSONUtils.getGeneratedResourcesString;
-import static org.kie.kogito.codegen.api.Generator.REST_TYPE;
 import static 
org.kie.pmml.commons.utils.KiePMMLModelUtils.getSanitizedClassName;
 
 public class PredictionCodegenUtils {
@@ -131,7 +131,7 @@ public class PredictionCodegenUtils {
             KogitoBuildContext context, String applicationCanonicalName) {
         PMMLRestResourceGenerator resourceGenerator = new 
PMMLRestResourceGenerator(context, model,
                 applicationCanonicalName);
-        files.add(new GeneratedFile(REST_TYPE, 
resourceGenerator.generatedFilePath(), resourceGenerator.generate()));
+        files.add(new GeneratedFile(REST, 
resourceGenerator.generatedFilePath(), resourceGenerator.generate()));
 
         PMMLOASResult oasResult = PMMLOASResultFactory.getPMMLOASResult(model);
         try {
diff --git 
a/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenGenerateTest.java
 
b/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenGenerateTest.java
index c119c0f74a..e2e5c6a796 100644
--- 
a/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenGenerateTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenGenerateTest.java
@@ -48,9 +48,9 @@ import com.github.javaparser.ast.CompilationUnit;
 import static java.util.stream.Collectors.toList;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.drools.codegen.common.GeneratedFileType.COMPILED_CLASS;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 import static org.junit.jupiter.params.provider.Arguments.arguments;
 import static 
org.kie.efesto.common.api.constants.Constants.INDEXFILE_DIRECTORY_PROPERTY;
-import static org.kie.kogito.codegen.api.Generator.REST_TYPE;
 import static 
org.kie.kogito.codegen.api.utils.KogitoContextTestUtils.contextBuilders;
 import static 
org.kie.kogito.codegen.prediction.PredictionCodegenFactory.parsePredictions;
 import static 
org.kie.kogito.codegen.prediction.PredictionCodegenFactoryTest.REFLECT_JSON;
@@ -216,7 +216,7 @@ class PredictionCodegenGenerateTest {
         if (hasREST) {
             // REST resource
             assertThat(expectedRestEndpoints).isEqualTo(generatedFiles.stream()
-                    .filter(generatedFile -> 
generatedFile.type().equals(REST_TYPE))
+                    .filter(generatedFile -> generatedFile.type().equals(REST))
                     .count());
             // OpenAPI Json schema
             assertThat(expectedRestEndpoints).isEqualTo(generatedFiles.stream()
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
index fc33742b1e..8764aa28c0 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/process/ProcessCodegen.java
@@ -71,6 +71,7 @@ import 
com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
 import static com.github.javaparser.StaticJavaParser.parse;
 import static java.lang.String.format;
 import static java.util.stream.Collectors.toList;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 import static 
org.jbpm.process.core.constants.CalendarConstants.BUSINESS_CALENDAR_PATH;
 import static 
org.kie.kogito.codegen.process.util.BusinessCalendarUtil.conditionallyAddCustomBusinessCalendar;
 import static 
org.kie.kogito.codegen.process.util.CodegenUtil.generatorProperty;
@@ -495,7 +496,7 @@ public class ProcessCodegen extends AbstractGenerator {
 
         if (context().hasRESTForGenerator(this)) {
             for (ProcessResourceGenerator resourceGenerator : rgs) {
-                storeFile(REST_TYPE, resourceGenerator.generatedFilePath(),
+                storeFile(REST, resourceGenerator.generatedFilePath(),
                         resourceGenerator.generate());
                 storeFile(MODEL_TYPE, 
WorkItemModelClassGenerator.generatedFilePath(resourceGenerator.getTaskModelFactoryClassName()),
 resourceGenerator.getTaskModelFactory());
             }
@@ -530,7 +531,7 @@ public class ProcessCodegen extends AbstractGenerator {
         if (context().hasRest() && context().hasRESTForGenerator(this)) {
             final ProcessCloudEventMetaFactoryGenerator topicsGenerator =
                     new ProcessCloudEventMetaFactoryGenerator(context(), 
processExecutableModelGenerators);
-            storeFile(REST_TYPE, topicsGenerator.generatedFilePath(), 
topicsGenerator.generate());
+            storeFile(REST, topicsGenerator.generatedFilePath(), 
topicsGenerator.generate());
         }
 
         for (ProcessInstanceGenerator pi : pis) {
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/usertask/UserTaskCodegen.java
 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/usertask/UserTaskCodegen.java
index 5afa147e1c..a502f23d68 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/usertask/UserTaskCodegen.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes/src/main/java/org/kie/kogito/codegen/usertask/UserTaskCodegen.java
@@ -78,6 +78,7 @@ import com.github.javaparser.ast.stmt.BlockStmt;
 import com.github.javaparser.ast.stmt.ExplicitConstructorInvocationStmt;
 
 import static java.util.stream.Collectors.toList;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 import static 
org.kie.kogito.codegen.faultTolerance.FaultToleranceUtil.lookFaultToleranceAnnotatorForContext;
 import static 
org.kie.kogito.codegen.process.util.CodegenUtil.isFaultToleranceEnabled;
 import static 
org.kie.kogito.codegen.process.util.CodegenUtil.isTransactionEnabled;
@@ -182,7 +183,7 @@ public class UserTaskCodegen extends AbstractGenerator {
 
         Path basePath = UserTaskCodegenHelper.path(packageName);
 
-        return new GeneratedFile(GeneratedFileType.REST, 
basePath.resolve(className + ".java"), compilationUnit.toString());
+        return new GeneratedFile(REST, basePath.resolve(className + ".java"), 
compilationUnit.toString());
     }
 
     protected CompilationUnit createRestEndpointCompilationUnit() {
diff --git 
a/kogito-codegen-modules/kogito-codegen-rules/src/main/java/org/kie/kogito/codegen/rules/QueryEndpointGenerator.java
 
b/kogito-codegen-modules/kogito-codegen-rules/src/main/java/org/kie/kogito/codegen/rules/QueryEndpointGenerator.java
index ef34f2e81d..32c834d7f1 100644
--- 
a/kogito-codegen-modules/kogito-codegen-rules/src/main/java/org/kie/kogito/codegen/rules/QueryEndpointGenerator.java
+++ 
b/kogito-codegen-modules/kogito-codegen-rules/src/main/java/org/kie/kogito/codegen/rules/QueryEndpointGenerator.java
@@ -47,10 +47,10 @@ import com.github.javaparser.ast.stmt.TryStmt;
 import com.github.javaparser.ast.type.Type;
 
 import static com.github.javaparser.StaticJavaParser.parseStatement;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 import static 
org.drools.model.codegen.execmodel.util.RuleCodegenUtils.setGeneric;
 import static 
org.drools.model.codegen.execmodel.util.RuleCodegenUtils.toKebabCase;
 import static 
org.drools.model.codegen.execmodel.util.RuleCodegenUtils.toNonPrimitiveType;
-import static org.kie.kogito.codegen.api.Generator.REST_TYPE;
 
 public class QueryEndpointGenerator extends AbstractQueryEntrypointGenerator {
 
@@ -83,7 +83,7 @@ public class QueryEndpointGenerator extends 
AbstractQueryEntrypointGenerator {
         generateQueryMethods(cu, clazz, returnType);
         clazz.getMembers().sort(new BodyDeclarationComparator());
 
-        return new GeneratedFile(REST_TYPE,
+        return new GeneratedFile(REST,
                 generatedFilePath(),
                 cu.toString());
     }
diff --git 
a/kogito-codegen-modules/kogito-codegen-sample/kogito-codegen-sample-generator/src/main/java/org/kie/kogito/codegen/sample/generator/SampleCodegen.java
 
b/kogito-codegen-modules/kogito-codegen-sample/kogito-codegen-sample-generator/src/main/java/org/kie/kogito/codegen/sample/generator/SampleCodegen.java
index f95a6b5e61..66415eca84 100644
--- 
a/kogito-codegen-modules/kogito-codegen-sample/kogito-codegen-sample-generator/src/main/java/org/kie/kogito/codegen/sample/generator/SampleCodegen.java
+++ 
b/kogito-codegen-modules/kogito-codegen-sample/kogito-codegen-sample-generator/src/main/java/org/kie/kogito/codegen/sample/generator/SampleCodegen.java
@@ -45,6 +45,7 @@ import com.github.javaparser.ast.body.FieldDeclaration;
 import com.github.javaparser.ast.expr.ObjectCreationExpr;
 
 import static java.util.stream.Collectors.toList;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 
 public class SampleCodegen implements Generator {
 
@@ -95,7 +96,7 @@ public class SampleCodegen implements Generator {
                     
SampleCodegen::isSampleRuntimeField).forEach(SampleCodegen::initializeSampleRuntimeField);
         }
 
-        return context.hasRESTForGenerator(this) ? Collections.singleton(new 
GeneratedFile(REST_TYPE, generator.generatedFilePath(), 
compilationUnit.toString())) : Collections.emptyList();
+        return context.hasRESTForGenerator(this) ? Collections.singleton(new 
GeneratedFile(REST, generator.generatedFilePath(), compilationUnit.toString())) 
: Collections.emptyList();
     }
 
     @Override
diff --git 
a/kogito-codegen-modules/kogito-codegen-sample/kogito-codegen-sample-generator/src/test/java/org/kie/kogito/codegen/sample/generator/SampleCodegenTest.java
 
b/kogito-codegen-modules/kogito-codegen-sample/kogito-codegen-sample-generator/src/test/java/org/kie/kogito/codegen/sample/generator/SampleCodegenTest.java
index 2cccacf199..9605946304 100644
--- 
a/kogito-codegen-modules/kogito-codegen-sample/kogito-codegen-sample-generator/src/test/java/org/kie/kogito/codegen/sample/generator/SampleCodegenTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-sample/kogito-codegen-sample-generator/src/test/java/org/kie/kogito/codegen/sample/generator/SampleCodegenTest.java
@@ -39,7 +39,7 @@ import com.github.javaparser.ast.CompilationUnit;
 import com.github.javaparser.ast.body.FieldDeclaration;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.kie.kogito.codegen.api.Generator.REST_TYPE;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 
 class SampleCodegenTest {
 
@@ -90,7 +90,7 @@ class SampleCodegenTest {
 
         if (contextBuilder.build().hasRESTForGenerator(codeGenerator)) {
             assertThat(generatedFiles).hasSize(1);
-            List<GeneratedFile> generatedRests = 
generatedFiles.stream().filter(gf -> gf.type() == 
REST_TYPE).collect(Collectors.toList());
+            List<GeneratedFile> generatedRests = 
generatedFiles.stream().filter(gf -> gf.type() == 
REST).collect(Collectors.toList());
             assertThat(generatedRests).hasSize(1);
 
             CompilationUnit compilationUnit = StaticJavaParser.parse(new 
String(generatedRests.get(0).contents()));
diff --git a/kogito-maven-plugin-test/pom.xml b/kogito-maven-plugin-test/pom.xml
index 52dbda08d9..5daacf49f2 100644
--- a/kogito-maven-plugin-test/pom.xml
+++ b/kogito-maven-plugin-test/pom.xml
@@ -36,6 +36,7 @@
 
   <properties>
     <java.module.name>org.kie.kogito.maven.plugin.testing</java.module.name>
+    <maven.compiler.release>17</maven.compiler.release>
   </properties>
 
   <dependencyManagement>
diff --git 
a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/AbstractKieMojo.java
 
b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/AbstractKieMojo.java
index ee16a43a10..92aff14dd5 100644
--- 
a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/AbstractKieMojo.java
+++ 
b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/AbstractKieMojo.java
@@ -19,89 +19,124 @@
 package org.kie.kogito.maven.plugin;
 
 import java.io.File;
-import java.nio.file.Path;
+import java.io.IOException;
+import java.net.URI;
 import java.util.Map;
+import java.util.Set;
 
+import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
-import org.drools.codegen.common.GeneratedFileWriter;
+import org.kie.kogito.codegen.manager.BuilderManager;
 import org.kie.kogito.codegen.manager.util.CodeGenManagerUtil;
 import org.kie.kogito.maven.plugin.util.MojoUtil;
 
 public abstract class AbstractKieMojo extends AbstractMojo {
 
-    protected static final GeneratedFileWriter.Builder 
GENERATED_FILE_WRITER_BUILDER = GeneratedFileWriter.builder("kogito", 
"kogito.codegen.resources.directory", "kogito.codegen.sources.directory");
+    @Parameter(property = "kogito.codegen.decisions")
+    protected String generateDecisions;
 
-    @Parameter(required = true, defaultValue = "${project.basedir}")
-    protected File projectBaseDir;
+    /**
+     * Partial generation can be used when reprocessing a pre-compiled project
+     * for faster code-generation. It only generates code for rules and 
processes,
+     * and does not generate extra meta-classes (etc. Application).
+     * Use only when doing recompilation and for development purposes
+     */
+    @Parameter(property = "kogito.codegen.partial", defaultValue = "false")
+    protected boolean generatePartial;
 
-    @Parameter
-    protected Map<String, String> properties;
+    @Parameter(property = "kogito.codegen.predictions")
+    protected String generatePredictions;
 
-    @Parameter(required = true, defaultValue = "${project}")
-    protected MavenProject project;
+    @Parameter(property = "kogito.codegen.processes")
+    protected String generateProcesses;
 
-    @Parameter(required = true, defaultValue = 
"${project.build.sourceEncoding}")
-    protected String projectSourceEncoding;
+    @Parameter(property = "kogito.codegen.rules")
+    protected String generateRules;
 
-    @Parameter(required = true, defaultValue = 
"${project.build.outputDirectory}")
-    protected File outputDirectory;
+    @Parameter
+    protected Map<String, String> properties;
 
-    @Parameter(required = true, defaultValue = "${project.basedir}")
-    protected File baseDir;
+    @Parameter(defaultValue = "17", property = "maven.compiler.release")
+    protected String mavenCompilerJavaVersion;
 
     @Parameter(property = "kogito.codegen.persistence")
     protected boolean persistence;
 
-    @Parameter(property = "kogito.codegen.rules")
-    protected String generateRules;
+    @Parameter(required = true, defaultValue = "${project.basedir}")
+    protected File projectBaseDir;
 
-    @Parameter(property = "kogito.codegen.processes")
-    protected String generateProcesses;
+    @Parameter(required = true, defaultValue = 
"${project.build.outputDirectory}")
+    protected File projectBuildOutputDirectory;
 
-    @Parameter(property = "kogito.codegen.decisions")
-    protected String generateDecisions;
+    @Parameter(required = true, defaultValue = 
"${project.build.sourceEncoding}")
+    protected String projectSourceEncoding;
 
-    @Parameter(property = "kogito.codegen.predictions")
-    protected String generatePredictions;
+    @Parameter(property = "kogito.jsonSchema.version", required = false) 
//TODO double check this required false
+    protected String jsonSchemaVersion;
+
+    @Parameter(property = "kogito.codegen.ondemand", defaultValue = "false")
+    protected boolean onDemand;
+
+    @Parameter(property = "kogito.sources.keep", defaultValue = "false")
+    protected boolean keepSources;
+
+    @Parameter(required = true, defaultValue = "${project}")
+    protected MavenProject project;
 
-    protected void setSystemProperties(Map<String, String> properties) {
-        if (properties != null) {
-            getLog().debug("Additional system properties: " + properties);
-            for (Map.Entry<String, String> property : properties.entrySet()) {
-                System.setProperty(property.getKey(), property.getValue());
-            }
-            getLog().debug("Configured system properties were successfully 
set.");
+    @Component
+    protected MavenProject mavenProject;
+
+    public void buildProject() throws MojoExecutionException {
+        getLog().info("buildProject");
+        executionLog();
+        try {
+            Set<URI> projectFilesUris = MojoUtil.getProjectFiles(mavenProject, 
null);
+            BuilderManager.BuildInfo buildInfo = new 
BuilderManager.BuildInfo(projectFilesUris,
+                    projectBaseDir.toPath(),
+                    projectBuildOutputDirectory.toPath(),
+                    mavenProject.getGroupId(),
+                    mavenProject.getArtifactId(),
+                    mavenProject.getVersion(),
+                    projectSourceEncoding,
+                    mavenCompilerJavaVersion,
+                    jsonSchemaVersion,
+                    generatePartial,
+                    persistence,
+                    onDemand,
+                    keepSources,
+                    mavenProject.getRuntimeClasspathElements(),
+                    discoverFramework(),
+                    properties);
+            BuilderManager.build(buildInfo);
+        } catch (DependencyResolutionRequiredException | IOException e) {
+            throw new MojoExecutionException("Error building project", e);
         }
     }
 
-    protected ClassLoader projectClassLoader() throws MojoExecutionException {
-        ClassLoader contextClassLoader = 
Thread.currentThread().getContextClassLoader();
-        return MojoUtil.createProjectClassLoader(contextClassLoader,
-                project,
-                outputDirectory,
-                null);
+    protected void executionLog() {
+        getLog().info("Compiler Java Version: " + mavenCompilerJavaVersion);
+        getLog().info("Compiler Source Encoding: " + projectSourceEncoding);
+        getLog().info("Project base directory: " + 
projectBaseDir.getAbsolutePath());
+        getLog().info("Build output directory: " + 
projectBuildOutputDirectory);
+        getLog().info("Partial generation is enabled: " + generatePartial);
+        getLog().info("Json schema version: " + jsonSchemaVersion);
+        getLog().info("===================================");
     }
 
-    protected CodeGenManagerUtil.Framework discoverFramework() {
-        if (hasDependency("quarkus")) {
+    CodeGenManagerUtil.Framework discoverFramework() {
+        if (MojoUtil.hasDependency(mavenProject, 
CodeGenManagerUtil.Framework.QUARKUS)) {
             return CodeGenManagerUtil.Framework.QUARKUS;
         }
 
-        if (hasDependency("spring")) {
+        if (MojoUtil.hasDependency(mavenProject, 
CodeGenManagerUtil.Framework.SPRING)) {
             return CodeGenManagerUtil.Framework.SPRING;
         }
 
         return CodeGenManagerUtil.Framework.NONE;
     }
 
-    private boolean hasDependency(String dependency) {
-        return project.getDependencies().stream().anyMatch(d -> 
d.getArtifactId().contains(dependency));
-    }
-
-    protected GeneratedFileWriter getGeneratedFileWriter() {
-        return 
GENERATED_FILE_WRITER_BUILDER.build(Path.of(baseDir.getAbsolutePath()));
-    }
 }
diff --git 
a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateModelMojo.java
 
b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateModelMojo.java
index 17b910e149..9cf101dd55 100644
--- 
a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateModelMojo.java
+++ 
b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/GenerateModelMojo.java
@@ -15,171 +15,25 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
+ *
  */
-package org.kie.kogito.maven.plugin;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+package org.kie.kogito.maven.plugin;
 
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.apache.maven.project.MavenProject;
-import org.drools.codegen.common.GeneratedFile;
-import org.kie.kogito.KogitoGAV;
-import org.kie.kogito.codegen.api.context.KogitoBuildContext;
-import org.kie.kogito.codegen.manager.CompilerHelper;
-import org.kie.kogito.codegen.manager.GenerateModelHelper;
-import org.kie.kogito.codegen.manager.processes.PersistenceGenerationHelper;
-import org.kie.kogito.codegen.manager.util.CodeGenManagerUtil;
-import org.kie.kogito.maven.plugin.util.MojoUtil;
-
-import static 
org.kie.efesto.common.api.constants.Constants.INDEXFILE_DIRECTORY_PROPERTY;
-import static org.kie.kogito.codegen.manager.CompilerHelper.RESOURCES;
-import static org.kie.kogito.codegen.manager.CompilerHelper.SOURCES;
-import static 
org.kie.kogito.codegen.manager.util.CodeGenManagerUtil.discoverKogitoRuntimeContext;
 
 @Mojo(name = "generateModel",
         requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME,
-        requiresProject = true,
         defaultPhase = LifecyclePhase.COMPILE,
         threadSafe = true)
 public class GenerateModelMojo extends AbstractKieMojo {
 
-    /**
-     * Partial generation can be used when reprocessing a pre-compiled project
-     * for faster code-generation. It only generates code for rules and 
processes,
-     * and does not generate extra meta-classes (etc. Application).
-     * Use only when doing recompilation and for development purposes
-     */
-    @Parameter(property = "kogito.codegen.partial", defaultValue = "false")
-    private boolean generatePartial;
-
-    @Parameter(property = "kogito.codegen.ondemand", defaultValue = "false")
-    private boolean onDemand;
-
-    @Parameter(property = "kogito.sources.keep", defaultValue = "false")
-    private boolean keepSources;
-
-    @Parameter(property = "kogito.jsonSchema.version", required = false)
-    String schemaVersion;
-
-    @Parameter(defaultValue = "${mojoExecution}")
-    private MojoExecution mojoExecution;
-
-    /**
-     * The <code>maven-compiler-plugin</code> version to use.
-     * Default to <b>3.10.2</b>
-     */
-    @Parameter(defaultValue = "3.10.2", property = "version.compiler.plugin")
-    private String compilerPluginVersion;
-
-    @Parameter(defaultValue = "17", property = "maven.compiler.release")
-    private String compilerSourceJavaVersion;
-
-    @Parameter(defaultValue = "17", property = "maven.compiler.release")
-    private String compilerTargetJavaVersion;
-
-    @Component
-    private MavenProject mavenProject;
-
-    @Component
-    private MavenSession mavenSession;
-
     @Override
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        getLog().debug("Compiler Target Java Version:" + 
compilerTargetJavaVersion);
-        getLog().debug("Compiler Source Java Version:" + 
compilerSourceJavaVersion);
-        getLog().debug("Compiler Source Encoding:" + projectSourceEncoding);
-        getLog().debug("Targeting directory: " + outputDirectory);
-
-        boolean indexFileDirectorySet = false;
-        if (outputDirectory == null) {
-            throw new MojoExecutionException("${project.build.directory} is 
null");
-        }
-        if (System.getProperty(INDEXFILE_DIRECTORY_PROPERTY) == null) {
-            System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
outputDirectory.toString());
-            indexFileDirectorySet = true;
-        }
-        addCompileSourceRoots();
-        Map<String, Collection<GeneratedFile>> generatedModelFiles;
-        ClassLoader projectClassLoader = projectClassLoader();
-        KogitoBuildContext kogitoBuildContext = 
getKogitoBuildContext(projectClassLoader);
-        if (isOnDemand()) {
-            getLog().info("On-Demand Mode is On. Use mvn compile 
kogito:scaffold");
-            generatedModelFiles = new HashMap<>();
-        } else {
-            generatedModelFiles = generateModel(kogitoBuildContext);
-        }
-        if (indexFileDirectorySet) {
-            System.clearProperty(INDEXFILE_DIRECTORY_PROPERTY);
-        }
-
-        // Compile and write model files
-        compileAndDump(generatedModelFiles, projectClassLoader);
-
-        Map<String, Collection<GeneratedFile>> generatedPersistenceFiles = 
generatePersistence(kogitoBuildContext, projectClassLoader);
-
-        compileAndDump(generatedPersistenceFiles, projectClassLoader);
-
-        if (!keepSources) {
-            CodeGenManagerUtil.deleteDrlFiles(outputDirectory.toPath());
-        }
-    }
-
-    KogitoBuildContext getKogitoBuildContext(ClassLoader projectClassLoader) {
-        return discoverKogitoRuntimeContext(projectClassLoader,
-                projectBaseDir.toPath(),
-                new KogitoGAV(project.getGroupId(),
-                        project.getArtifactId(),
-                        project.getVersion()),
-                new CodeGenManagerUtil.ProjectParameters(discoverFramework(),
-                        generateDecisions,
-                        generatePredictions,
-                        generateProcesses,
-                        generateRules,
-                        persistence),
-                className -> MojoUtil.hasClassOnClasspath(project, className));
-    }
-
-    protected boolean isOnDemand() {
-        return onDemand;
-    }
-
-    protected void addCompileSourceRoots() {
-        
project.addCompileSourceRoot(getGeneratedFileWriter().getScaffoldedSourcesDir().toString());
-    }
-
-    protected Map<String, Collection<GeneratedFile>> 
generateModel(KogitoBuildContext kogitoBuildContext) {
-        setSystemProperties(properties);
-        return GenerateModelHelper.generateModelFiles(kogitoBuildContext, 
generatePartial);
-    }
-
-    protected Map<String, Collection<GeneratedFile>> 
generatePersistence(KogitoBuildContext kogitoBuildContext, ClassLoader 
projectClassloader) {
-        return 
PersistenceGenerationHelper.generatePersistenceFiles(kogitoBuildContext, 
projectClassloader, schemaVersion);
-    }
-
-    protected void compileAndDump(Map<String, Collection<GeneratedFile>> 
generatedFiles, ClassLoader classloader) throws MojoExecutionException {
-        try {
-            // Compile and write files
-            
CompilerHelper.compileAndDumpGeneratedSources(generatedFiles.get(SOURCES),
-                    classloader,
-                    project.getRuntimeClasspathElements(),
-                    baseDir,
-                    projectSourceEncoding,
-                    compilerSourceJavaVersion,
-                    compilerTargetJavaVersion);
-            // Dump resources
-            CompilerHelper.dumpResources(generatedFiles.get(RESOURCES), 
baseDir);
-        } catch (Exception e) {
-            throw new MojoExecutionException("Error during processing model 
classes: " + e.getMessage(), e);
-        }
+    public void execute() throws MojoExecutionException {
+        getLog().info("execute");
+        buildProject();
     }
 }
diff --git 
a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ScaffoldMojo.java
 
b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ScaffoldMojo.java
deleted file mode 100644
index 8bdd9d45b2..0000000000
--- 
a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ScaffoldMojo.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.kie.kogito.maven.plugin;
-
-import java.io.File;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.kie.kogito.codegen.api.context.KogitoBuildContext;
-
-@Mojo(name = "scaffold",
-        requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME,
-        requiresProject = true,
-        threadSafe = true)
-public class ScaffoldMojo extends GenerateModelMojo {
-
-    @Parameter(property = "kogito.codegen.ondemand", defaultValue = "true")
-    private boolean onDemand;
-
-    @Parameter(property = "kogito.codegen.sources.directory", defaultValue = 
"${project.build.sourceDirectory}")
-    private File customizableSources;
-
-    @Override
-    public void execute() throws MojoExecutionException {
-        addCompileSourceRoots();
-        ClassLoader projectClassLoader = projectClassLoader();
-        KogitoBuildContext kogitoBuildContext = 
getKogitoBuildContext(projectClassLoader);
-        generateModel(kogitoBuildContext);
-    }
-
-    @Override
-    public boolean isOnDemand() {
-        return onDemand;
-    }
-
-}
diff --git 
a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/util/MojoUtil.java
 
b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/util/MojoUtil.java
index 94bc4cee80..fcce7523db 100644
--- 
a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/util/MojoUtil.java
+++ 
b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/util/MojoUtil.java
@@ -20,6 +20,7 @@ package org.kie.kogito.maven.plugin.util;
 
 import java.io.File;
 import java.io.IOException;
+import java.net.URI;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.Arrays;
@@ -45,26 +46,33 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static 
org.drools.compiler.kie.builder.impl.KieBuilderImpl.setDefaultsforEmptyKieModule;
+import static 
org.kie.kogito.codegen.manager.util.CodeGenManagerUtil.convertURIsToURLs;
 
 public final class MojoUtil {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(MojoUtil.class);
 
-    public static Set<URL> getProjectFiles(final MavenProject mavenProject,
+    public static Set<URI> getProjectFiles(final MavenProject mavenProject,
             final List<InternalKieModule> kmoduleDeps)
             throws DependencyResolutionRequiredException, IOException {
-        final Set<URL> urls = new HashSet<>();
+        final Set<URI> toReturn = getScaffoldFiles(mavenProject, kmoduleDeps);
         for (final String element : 
mavenProject.getCompileClasspathElements()) {
-            urls.add(new File(element).toURI().toURL());
+            toReturn.add(new File(element).toURI());
         }
+        return toReturn;
+    }
 
+    public static Set<URI> getScaffoldFiles(final MavenProject mavenProject,
+            final List<InternalKieModule> kmoduleDeps)
+            throws IOException {
+        final Set<URI> toReturn = new HashSet<>();
         mavenProject.setArtifactFilter(new 
CumulativeScopeArtifactFilter(Arrays.asList("compile", "runtime")));
         for (final Artifact artifact : mavenProject.getArtifacts()) {
             if (artifact.getType().equals("jar")) {
-                populateURLsFromJarArtifact(urls, artifact, kmoduleDeps);
+                populateURLsFromJarArtifact(toReturn, artifact, kmoduleDeps);
             }
         }
-        return urls;
+        return toReturn;
     }
 
     public static ClassLoader createProjectClassLoader(final ClassLoader 
parentClassLoader,
@@ -72,9 +80,9 @@ public final class MojoUtil {
             final File outputDirectory,
             final List<InternalKieModule> kmoduleDeps) throws 
MojoExecutionException {
         try {
-            final Set<URL> urls = getProjectFiles(mavenProject, kmoduleDeps);
-            urls.add(outputDirectory.toURI().toURL());
-            URL[] urlArray = urls.toArray(new URL[urls.size()]);
+            final Set<URI> uris = getProjectFiles(mavenProject, kmoduleDeps);
+            uris.add(outputDirectory.toURI());
+            URL[] urlArray = convertURIsToURLs(uris);
             LOGGER.debug("Creating maven project class loading with: {}", 
Arrays.asList(urlArray));
             return URLClassLoader.newInstance(urlArray, parentClassLoader);
         } catch (final DependencyResolutionRequiredException | IOException e) {
@@ -82,11 +90,11 @@ public final class MojoUtil {
         }
     }
 
-    private static void populateURLsFromJarArtifact(final Set<URL> toPopulate, 
final Artifact artifact,
+    private static void populateURLsFromJarArtifact(final Set<URI> toPopulate, 
final Artifact artifact,
             final List<InternalKieModule> kmoduleDeps) throws IOException {
         final File file = artifact.getFile();
         if (file != null && file.isFile()) {
-            toPopulate.add(file.toURI().toURL());
+            toPopulate.add(file.toURI());
             final KieModuleModel depModel = getDependencyKieModel(file);
             if (kmoduleDeps != null && depModel != null) {
                 final ReleaseId releaseId = new 
ReleaseIdImpl(artifact.getGroupId(), artifact.getArtifactId(),
@@ -108,18 +116,18 @@ public final class MojoUtil {
         return null;
     }
 
+    public static boolean hasDependency(final MavenProject mavenProject, 
CodeGenManagerUtil.Framework framework) {
+        return mavenProject.getDependencies().stream().anyMatch(d -> 
d.getArtifactId().contains(framework.toName()));
+    }
+
     public static boolean hasClassOnClasspath(final MavenProject project, 
String className) {
         try {
             Set<Artifact> elements = project.getArtifacts();
-            URL[] urls = new URL[elements.size()];
-
-            int i = 0;
+            Set<URI> uris = new HashSet<>();
             for (Artifact artifact : elements) {
-                urls[i] = artifact.getFile().toURI().toURL();
-                i++;
+                uris.add(artifact.getFile().toURI());
             }
-
-            return CodeGenManagerUtil.isClassNameInUrlClassLoader(urls, 
className);
+            return CodeGenManagerUtil.isClassNameInUrlClassLoader(uris, 
className);
         } catch (Exception e) {
             return false;
         }
diff --git 
a/kogito-maven-plugin/src/test/java/org/kie/kogito/maven/plugin/GenerateModelMojoTest.java
 
b/kogito-maven-plugin/src/test/java/org/kie/kogito/maven/plugin/GenerateModelMojoTest.java
index ddeb07214f..cd56c4ea81 100644
--- 
a/kogito-maven-plugin/src/test/java/org/kie/kogito/maven/plugin/GenerateModelMojoTest.java
+++ 
b/kogito-maven-plugin/src/test/java/org/kie/kogito/maven/plugin/GenerateModelMojoTest.java
@@ -19,78 +19,69 @@
 package org.kie.kogito.maven.plugin;
 
 import java.io.File;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Map;
 
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.testing.junit5.InjectMojo;
 import org.apache.maven.plugin.testing.junit5.MojoTest;
-import org.drools.codegen.common.GeneratedFile;
 import org.junit.jupiter.api.Test;
-import org.kie.kogito.codegen.api.context.KogitoBuildContext;
+import org.kie.kogito.codegen.manager.BuilderManager;
 import org.kie.kogito.codegen.manager.CompilerHelper;
 import org.kie.kogito.codegen.manager.GenerateModelHelper;
 import org.kie.kogito.codegen.manager.processes.PersistenceGenerationHelper;
+import org.kie.kogito.codegen.manager.util.CodeGenManagerUtil;
 import org.mockito.MockedStatic;
+import org.mockito.verification.VerificationMode;
 
 import static org.assertj.core.api.Fail.fail;
-import static org.kie.kogito.codegen.manager.CompilerHelper.RESOURCES;
-import static org.kie.kogito.codegen.manager.CompilerHelper.SOURCES;
-import static org.mockito.Mockito.mock;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 
 @MojoTest
 class GenerateModelMojoTest {
 
-    private static final KogitoBuildContext kogitoBuildContextMocked = 
mock(KogitoBuildContext.class);
-    private static final ClassLoader classLoaderMocked = 
mock(ClassLoader.class);
-
     @Test
     @InjectMojo(goal = "generateModel", pom = 
"src/test/resources/unit/generate-model/pom.xml")
-    void generateModel(GenerateModelMojo mojo) {
-        commonSetup(mojo);
-        try (MockedStatic<GenerateModelHelper> generateModelHelperMockedStatic 
= mockStatic(GenerateModelHelper.class)) {
-            mojo.generateModel(kogitoBuildContextMocked);
-            generateModelHelperMockedStatic.verify(() -> 
GenerateModelHelper.generateModelFiles(kogitoBuildContextMocked, false), 
times(1));
-        }
+    void generateModelWithOnDemand(GenerateModelMojo mojo) {
+        commonSetup(mojo, true);
+        commonGenerateModel(mojo);
     }
 
     @Test
     @InjectMojo(goal = "generateModel", pom = 
"src/test/resources/unit/generate-model/pom.xml")
-    void generatePersistence(GenerateModelMojo mojo) {
-        commonSetup(mojo);
-        try (MockedStatic<PersistenceGenerationHelper> 
persistenceGenerationHelperMockedStatic = 
mockStatic(PersistenceGenerationHelper.class)) {
-            mojo.generatePersistence(kogitoBuildContextMocked, 
classLoaderMocked);
-            persistenceGenerationHelperMockedStatic.verify(() -> 
PersistenceGenerationHelper.generatePersistenceFiles(kogitoBuildContextMocked, 
classLoaderMocked, mojo.schemaVersion), times(1));
-        } catch (Exception e) {
-            fail(e.getMessage(), e);
-        }
+    void generateModelWithoutOnDemand(GenerateModelMojo mojo) {
+        commonSetup(mojo, false);
+        commonGenerateModel(mojo);
     }
 
-    @Test
-    @InjectMojo(goal = "generateModel", pom = 
"src/test/resources/unit/generate-model/pom.xml")
-    void compileAndDump(GenerateModelMojo mojo) {
-        commonSetup(mojo);
-        try (MockedStatic<CompilerHelper> compilerHelperMockedStatic = 
mockStatic(CompilerHelper.class)) {
-            Collection<GeneratedFile> generatedSources = new HashSet<>();
-            Collection<GeneratedFile> generatedResources = new HashSet<>();
-            Map<String, Collection<GeneratedFile>> generatedFiles = 
Map.of(SOURCES, generatedSources, RESOURCES, generatedResources);
-            mojo.compileAndDump(generatedFiles, classLoaderMocked);
-            compilerHelperMockedStatic.verify(
-                    () -> 
CompilerHelper.compileAndDumpGeneratedSources(generatedSources, 
classLoaderMocked, mojo.project.getRuntimeClasspathElements(), mojo.baseDir, 
"UTF-8", "17", "17"),
-                    times(1));
-            compilerHelperMockedStatic.verify(() -> 
CompilerHelper.dumpResources(generatedResources, mojo.baseDir), times(1));
+    private void commonGenerateModel(GenerateModelMojo mojo) {
+        try (MockedStatic<BuilderManager> builderManagerMockedStatic = 
mockStatic(BuilderManager.class);
+                MockedStatic<CodeGenManagerUtil> 
codeGenManagerUtilMockedStatic = mockStatic(CodeGenManagerUtil.class);
+                MockedStatic<GenerateModelHelper> 
generateModelHelperMockedStatic = mockStatic(GenerateModelHelper.class);
+                MockedStatic<CompilerHelper> compilerHelperMockedStatic = 
mockStatic(CompilerHelper.class);
+                MockedStatic<PersistenceGenerationHelper> 
persistenceGenerationHelperMockedStatic = 
mockStatic(PersistenceGenerationHelper.class)) {
+            builderManagerMockedStatic.when(() -> 
BuilderManager.build(any(BuilderManager.BuildInfo.class))).thenCallRealMethod();
+            generateModelHelperMockedStatic.when(() -> 
GenerateModelHelper.generateModel(any(GenerateModelHelper.GenerateModelInfo.class))).thenCallRealMethod();
+            mojo.execute();
+            builderManagerMockedStatic.verify(() -> 
BuilderManager.build(any(BuilderManager.BuildInfo.class)), times(1));
+            codeGenManagerUtilMockedStatic.verify(() -> 
CodeGenManagerUtil.setSystemProperties(any()), times(1));
+            generateModelHelperMockedStatic.verify(() -> 
GenerateModelHelper.generateModel(any(GenerateModelHelper.GenerateModelInfo.class)),
 times(1));
+            VerificationMode expectedGeneratedModelFiles = mojo.onDemand ? 
never() : times(1);
+            generateModelHelperMockedStatic.verify(() -> 
GenerateModelHelper.generateModelFiles(any(GenerateModelHelper.GenerateModelFilesInfo.class)),
 expectedGeneratedModelFiles);
+            compilerHelperMockedStatic.verify(() -> 
CompilerHelper.compileAndDump(any(CompilerHelper.CompileInfo.class)), times(2));
+            persistenceGenerationHelperMockedStatic.verify(() -> 
PersistenceGenerationHelper.generatePersistenceFiles(any(),
+                    any(),
+                    any()), times(1));
         } catch (MojoExecutionException e) {
             fail(e.getMessage(), e);
         }
     }
 
-    private void commonSetup(GenerateModelMojo mojo) {
-        mojo.outputDirectory = new 
File(mojo.project.getModel().getBuild().getOutputDirectory());
-        mojo.baseDir = mojo.project.getBasedir();
+    private void commonSetup(GenerateModelMojo mojo, boolean onDemand) {
+        mojo.projectBuildOutputDirectory = new 
File(mojo.project.getModel().getBuild().getOutputDirectory());
         mojo.projectBaseDir = mojo.project.getBasedir();
         mojo.projectSourceEncoding = "UTF-8";
+        mojo.onDemand = onDemand;
     }
 }
diff --git 
a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoAssetsProcessor.java
 
b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoAssetsProcessor.java
index 8dd96912d9..a4879226ea 100644
--- 
a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoAssetsProcessor.java
+++ 
b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoAssetsProcessor.java
@@ -44,7 +44,6 @@ import org.jboss.jandex.Indexer;
 import org.jboss.logging.Logger;
 import org.kie.efesto.quarkus.deployment.EfestoGeneratedClassBuildItem;
 import org.kie.kogito.KogitoGAV;
-import org.kie.kogito.codegen.api.Generator;
 import org.kie.kogito.codegen.api.context.KogitoBuildContext;
 import org.kie.kogito.codegen.core.utils.ApplicationGeneratorDiscovery;
 import org.kie.kogito.quarkus.KogitoRecorder;
@@ -77,6 +76,7 @@ import jakarta.inject.Inject;
 import jakarta.inject.Singleton;
 
 import static org.drools.codegen.common.GeneratedFileType.COMPILED_CLASS;
+import static org.drools.codegen.common.GeneratedFileType.REST;
 import static 
org.drools.quarkus.util.deployment.DroolsQuarkusResourceUtils.compileGeneratedSources;
 import static 
org.drools.quarkus.util.deployment.DroolsQuarkusResourceUtils.makeBuildItems;
 import static 
org.kie.efesto.common.api.constants.Constants.INDEXFILE_DIRECTORY_PROPERTY;
@@ -326,7 +326,7 @@ public class KogitoAssetsProcessor {
 
         generatedBeanBuildItems.forEach(generatedBeans::produce);
         Set<String> restResourceClassNameSet = generatedFiles.stream()
-                .filter(file -> file.type().equals(Generator.REST_TYPE))
+                .filter(file -> file.type().equals(REST))
                 .map(file -> toClassName(file.path().toString()))
                 .collect(Collectors.toSet());
         generatedBeanBuildItems.stream()
diff --git 
a/quarkus/integration-tests/integration-tests-kogito-plugin/src/it/integration-tests-kogito-plugin-it/invoker.properties
 
b/quarkus/integration-tests/integration-tests-kogito-plugin/src/it/integration-tests-kogito-plugin-it/invoker.properties
index c077dc99c5..67fbc68e16 100644
--- 
a/quarkus/integration-tests/integration-tests-kogito-plugin/src/it/integration-tests-kogito-plugin-it/invoker.properties
+++ 
b/quarkus/integration-tests/integration-tests-kogito-plugin/src/it/integration-tests-kogito-plugin-it/invoker.properties
@@ -19,4 +19,4 @@
 
 # disable verbose local download output
 
invoker.mavenOpts=-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
-invoker.goals = clean compile kogito:scaffold compile verify
+invoker.goals = clean compile verify
diff --git a/springboot/integration-tests/pom.xml 
b/springboot/integration-tests/pom.xml
index 4e76b10967..92ae70d977 100644
--- a/springboot/integration-tests/pom.xml
+++ b/springboot/integration-tests/pom.xml
@@ -33,6 +33,7 @@
   <properties>
     <sonar.exclusions>**/*</sonar.exclusions>
     
<java.module.name>org.kie.kogito.springboot.starter.tests</java.module.name>
+    <maven.compiler.release>17</maven.compiler.release>
   </properties>
 
   <modules>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to