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 a795aac3aa [incubator-kie-issues#1068] Fix gradle build output (#3471)
a795aac3aa is described below

commit a795aac3aac337a2da645b700bafefdd516ff147
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Wed Apr 17 10:33:59 2024 +0200

    [incubator-kie-issues#1068] Fix gradle build output (#3471)
    
    * [test-gradle-target] WIP
    
    * [incubator-kie-issues#1068] Enhancing dual build-system management. 
Locally working
    
    * [incubator-kie-issues#1068] Fix classes path for multimodule project
    
    * [incubator-kie-issues#1068] Restored kogito.codegen.sources.directory 
usage. Unified GeneratedFileWriter instantiation and usage
    
    * [incubator-kie-issues#1068] REmove duplicated class. REstored test
    
    * [incubator-kie-issues#1068] Remove unused parameter
    
    * [incubator-kie-issues#1068] Fixed formatting
    
    * [incubator-kie-issues#1068] Fixed formatting
    
    ---------
    
    Co-authored-by: Gabriele-Cardosi <[email protected]>
---
 .../runner/KogitoDMNScenarioRunnerHelper.java      |   3 +-
 .../context/impl/AbstractKogitoBuildContext.java   |   3 +-
 .../codegen/core/utils/GeneratedFileWriter.java    | 153 ---------------------
 .../prediction/PMMLRestResourceGeneratorTest.java  |   3 +-
 .../prediction/PredictionCodegenFactoryTest.java   |   3 +-
 .../prediction/PredictionCodegenGenerateTest.java  |   3 +-
 .../PredictionCodegenInternalGenerateTest.java     |   3 +-
 .../kie/kogito/maven/plugin/AbstractKieMojo.java   |  33 +++--
 .../kie/kogito/maven/plugin/GenerateModelMojo.java |  26 ++--
 .../kogito/maven/plugin/ProcessClassesMojo.java    |   6 +-
 .../common/deployment/KogitoAssetsProcessor.java   |  44 +++---
 .../deployment/KogitoQuarkusResourceUtils.java     |  19 +--
 .../deployment/KogitoAssetsProcessorTest.java      |  43 ++++--
 13 files changed, 98 insertions(+), 244 deletions(-)

diff --git 
a/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoDMNScenarioRunnerHelper.java
 
b/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoDMNScenarioRunnerHelper.java
index 9d6f96ef9e..2babf30313 100644
--- 
a/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoDMNScenarioRunnerHelper.java
+++ 
b/drools/kogito-scenario-simulation/src/main/java/org/kogito/scenariosimulation/runner/KogitoDMNScenarioRunnerHelper.java
@@ -28,6 +28,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Stream;
 
+import org.drools.codegen.common.AppPaths;
 import org.drools.io.FileSystemResource;
 import org.drools.scenariosimulation.api.model.ScenarioSimulationModel;
 import org.drools.scenariosimulation.api.model.ScesimModelDescriptor;
@@ -53,7 +54,7 @@ public class KogitoDMNScenarioRunnerHelper extends 
DMNScenarioRunnerHelper {
 
     private DMNRuntime dmnRuntime = initDmnRuntime();
 
-    private static final String targetFolder = File.separator + "target" + 
File.separator;
+    private static final String targetFolder = File.separator + 
AppPaths.TARGET_DIR + File.separator;
     private static final String generatedResourcesFolder = targetFolder + 
"generated-resources" + File.separator;
 
     @Override
diff --git 
a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/AbstractKogitoBuildContext.java
 
b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/AbstractKogitoBuildContext.java
index 25a0e8794d..d46cfdb118 100644
--- 
a/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/AbstractKogitoBuildContext.java
+++ 
b/kogito-codegen-modules/kogito-codegen-api/src/main/java/org/kie/kogito/codegen/api/context/impl/AbstractKogitoBuildContext.java
@@ -21,7 +21,6 @@ package org.kie.kogito.codegen.api.context.impl;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
-import java.nio.file.Path;
 import java.text.MessageFormat;
 import java.util.Collection;
 import java.util.Collections;
@@ -258,7 +257,7 @@ public abstract class AbstractKogitoBuildContext implements 
KogitoBuildContext {
         protected Predicate<String> classAvailabilityResolver = this::hasClass;
         protected Predicate<Class<?>> classSubTypeAvailabilityResolver = c -> 
false;
         // default fallback value (usually overridden)
-        protected AppPaths appPaths = AppPaths.fromProjectDir(new 
File(".").toPath(), Path.of(".", AppPaths.TARGET_DIR));
+        protected AppPaths appPaths = AppPaths.fromProjectDir(new 
File(".").toPath());
         protected KogitoGAV gav;
 
         protected AbstractBuilder() {
diff --git 
a/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/utils/GeneratedFileWriter.java
 
b/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/utils/GeneratedFileWriter.java
deleted file mode 100644
index d596702592..0000000000
--- 
a/kogito-codegen-modules/kogito-codegen-core/src/main/java/org/kie/kogito/codegen/core/utils/GeneratedFileWriter.java
+++ /dev/null
@@ -1,153 +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.codegen.core.utils;
-
-import java.io.IOException;
-import java.io.UncheckedIOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Collection;
-
-import org.drools.codegen.common.GeneratedFile;
-import org.drools.codegen.common.GeneratedFileType;
-
-/**
- * Writes {@link GeneratedFile} to the right directory, depending on its
- * {@link GeneratedFileType.Category}
- */
-public class GeneratedFileWriter {
-
-    public static class Builder {
-
-        private final String classesDir;
-        private final String sourcesDir;
-        private final String resourcePath;
-        private final String scaffoldedSourcesDir;
-
-        /**
-         *
-         * @param classesDir usually target/classes/
-         * @param sourcesDir usually target/generated-sources/kogito/
-         * @param resourcesDir usually target/generated-resources/kogito/
-         * @param scaffoldedSourcesDir usually src/main/java/
-         */
-        public Builder(String classesDir, String sourcesDir, String 
resourcesDir, String scaffoldedSourcesDir) {
-            this.classesDir = classesDir;
-            this.sourcesDir = sourcesDir;
-            this.resourcePath = resourcesDir;
-            this.scaffoldedSourcesDir = scaffoldedSourcesDir;
-        }
-
-        /**
-         * @param basePath the path to which the given subdirectories will be 
written
-         *        e.g. ${basePath}/${classesDir}/myfile.ext
-         *
-         */
-        public GeneratedFileWriter build(Path basePath) {
-            return new GeneratedFileWriter(
-                    basePath.resolve(classesDir),
-                    basePath.resolve(sourcesDir),
-                    basePath.resolve(resourcePath),
-                    basePath.resolve(scaffoldedSourcesDir));
-        }
-    }
-
-    private final Path classesDir;
-    private final Path sourcesDir;
-    private final Path resourcePath;
-    private final Path scaffoldedSourcesDir;
-
-    public static final String DEFAULT_SOURCES_DIR = 
"generated-sources/kogito/";
-    public static final String DEFAULT_RESOURCE_PATH = 
"generated-resources/kogito/";
-    public static final String DEFAULT_SCAFFOLDED_SOURCES_DIR = 
"src/main/java/";
-    public static final String DEFAULT_CLASSES_DIR = "target/classes";
-
-    /**
-     *
-     * @param classesDir usually {@link #DEFAULT_CLASSES_DIR}
-     * @param sourcesDir usually target/generated-sources/kogito/. See {@link 
#DEFAULT_SOURCES_DIR}
-     * @param resourcePath usually target/generated-resources/kogito/ {@link 
#DEFAULT_RESOURCE_PATH}
-     * @param scaffoldedSourcesDir usually {@link 
#DEFAULT_SCAFFOLDED_SOURCES_DIR}
-     */
-    public GeneratedFileWriter(Path classesDir, Path sourcesDir, Path 
resourcePath, Path scaffoldedSourcesDir) {
-        this.classesDir = classesDir;
-        this.sourcesDir = sourcesDir;
-        this.resourcePath = resourcePath;
-        this.scaffoldedSourcesDir = scaffoldedSourcesDir;
-    }
-
-    public void writeAll(Collection<GeneratedFile> generatedFiles) {
-        generatedFiles.forEach(this::write);
-    }
-
-    public void write(GeneratedFile f) throws UncheckedIOException {
-        try {
-            GeneratedFileType.Category category = f.category();
-            switch (category) {
-                case INTERNAL_RESOURCE: // since codegen happens after 
maven-resource-plugin (both in Quarkus and SB), need to manually place in the 
correct (CP) location
-                case STATIC_HTTP_RESOURCE:
-                case COMPILED_CLASS:
-                    writeGeneratedFile(f, classesDir);
-                    break;
-                case SOURCE:
-                    if (f.type().isCustomizable()) {
-                        writeGeneratedFile(f, scaffoldedSourcesDir);
-                    } else {
-                        writeGeneratedFile(f, sourcesDir);
-                    }
-                    break;
-                default:
-                    throw new IllegalArgumentException("Unknown Category " + 
category.name());
-            }
-        } catch (IOException e) {
-            throw new UncheckedIOException(e);
-        }
-    }
-
-    public Path getClassesDir() {
-        return classesDir;
-    }
-
-    public Path getSourcesDir() {
-        return sourcesDir;
-    }
-
-    public Path getResourcePath() {
-        return resourcePath;
-    }
-
-    public Path getScaffoldedSourcesDir() {
-        return scaffoldedSourcesDir;
-    }
-
-    private void writeGeneratedFile(GeneratedFile f, Path location) throws 
IOException {
-        if (location == null) {
-            return;
-        }
-        Files.write(
-                pathOf(location, f.path()),
-                f.contents());
-    }
-
-    private Path pathOf(Path location, Path end) throws IOException {
-        Path path = location.resolve(end);
-        Files.createDirectories(path.getParent());
-        return path;
-    }
-}
diff --git 
a/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGeneratorTest.java
 
b/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGeneratorTest.java
index 8fe6c0dd94..b69a9aa614 100644
--- 
a/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGeneratorTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PMMLRestResourceGeneratorTest.java
@@ -22,6 +22,7 @@ import java.net.URLEncoder;
 import java.util.NoSuchElementException;
 import java.util.Optional;
 
+import org.drools.codegen.common.AppPaths;
 import org.drools.codegen.common.di.impl.CDIDependencyInjectionAnnotator;
 import org.drools.util.StringUtils;
 import org.junit.jupiter.api.AfterAll;
@@ -80,7 +81,7 @@ class PMMLRestResourceGeneratorTest {
         String filePrefix = 
URLEncoder.encode(getSanitizedClassName(KIE_PMML_MODEL.getFileName().replace(".pmml",
 "")));
         String classPrefix = 
URLEncoder.encode(getSanitizedClassName(KIE_PMML_MODEL.getName()));
         expectedUrl = String.format("/%s/%s", filePrefix, classPrefix);
-        System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
"target/test-classes");
+        System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
String.format("%s/test-classes", AppPaths.TARGET_DIR));
     }
 
     @AfterAll
diff --git 
a/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenFactoryTest.java
 
b/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenFactoryTest.java
index 1c14e042a6..d378b501f7 100644
--- 
a/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenFactoryTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenFactoryTest.java
@@ -21,6 +21,7 @@ package org.kie.kogito.codegen.prediction;
 import java.util.Collections;
 import java.util.List;
 
+import org.drools.codegen.common.AppPaths;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -46,7 +47,7 @@ class PredictionCodegenFactoryTest {
 
     @BeforeAll
     public static void setup() {
-        System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
"target/test-classes");
+        System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
String.format("%s/test-classes", AppPaths.TARGET_DIR));
     }
 
     @AfterAll
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 b26c7bbef8..c563288e28 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
@@ -29,6 +29,7 @@ import java.util.Optional;
 import java.util.function.Function;
 import java.util.stream.Stream;
 
+import org.drools.codegen.common.AppPaths;
 import org.drools.codegen.common.GeneratedFile;
 import org.drools.codegen.common.GeneratedFileType;
 import org.junit.jupiter.api.AfterAll;
@@ -68,7 +69,7 @@ class PredictionCodegenGenerateTest {
 
     @BeforeAll
     public static void setup() {
-        System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
"target/test-classes");
+        System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
String.format("%s/test-classes", AppPaths.TARGET_DIR));
     }
 
     @AfterAll
diff --git 
a/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenInternalGenerateTest.java
 
b/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenInternalGenerateTest.java
index 27b91deb5b..6f6229c4de 100644
--- 
a/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenInternalGenerateTest.java
+++ 
b/kogito-codegen-modules/kogito-codegen-predictions/src/test/java/org/kie/kogito/codegen/prediction/PredictionCodegenInternalGenerateTest.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.function.Function;
 import java.util.stream.Stream;
 
+import org.drools.codegen.common.AppPaths;
 import org.drools.codegen.common.GeneratedFile;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
@@ -51,7 +52,7 @@ class PredictionCodegenInternalGenerateTest {
 
     @BeforeAll
     public static void setup() {
-        System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
"target/test-classes");
+        System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
String.format("%s/test-classes", AppPaths.TARGET_DIR));
     }
 
     @AfterAll
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 81eb6a6c26..b279c5eafc 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
@@ -22,6 +22,7 @@ import java.io.File;
 import java.lang.reflect.Modifier;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.nio.file.Path;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.Map;
@@ -37,13 +38,13 @@ import org.apache.maven.project.MavenProject;
 import org.drools.codegen.common.AppPaths;
 import org.drools.codegen.common.DroolsModelBuildContext;
 import org.drools.codegen.common.GeneratedFile;
+import org.drools.codegen.common.GeneratedFileWriter;
 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.api.context.impl.JavaKogitoBuildContext;
 import org.kie.kogito.codegen.api.context.impl.QuarkusKogitoBuildContext;
 import org.kie.kogito.codegen.api.context.impl.SpringBootKogitoBuildContext;
-import org.kie.kogito.codegen.core.utils.GeneratedFileWriter;
 import org.kie.kogito.codegen.decision.DecisionCodegen;
 import org.kie.kogito.codegen.prediction.PredictionCodegen;
 import org.kie.kogito.codegen.process.ProcessCodegen;
@@ -55,6 +56,8 @@ import org.reflections.util.ConfigurationBuilder;
 
 public abstract class AbstractKieMojo extends AbstractMojo {
 
+    protected static final GeneratedFileWriter.Builder 
generatedFileWriterBuilder = GeneratedFileWriter.builder("kogito", 
"kogito.codegen.resources.directory", "kogito.codegen.sources.directory");
+
     @Parameter(required = true, defaultValue = "${project.basedir}")
     protected File projectDir;
 
@@ -67,11 +70,8 @@ public abstract class AbstractKieMojo extends AbstractMojo {
     @Parameter(required = true, defaultValue = 
"${project.build.outputDirectory}")
     protected File outputDirectory;
 
-    @Parameter(defaultValue = "${project.build.directory}/" + 
GeneratedFileWriter.DEFAULT_SOURCES_DIR)
-    protected File generatedSources;
-
-    @Parameter(defaultValue = "${project.build.directory}/" + 
GeneratedFileWriter.DEFAULT_RESOURCE_PATH)
-    protected File generatedResources;
+    @Parameter(required = true, defaultValue = "${project.basedir}")
+    protected File baseDir;
 
     @Parameter(property = "kogito.codegen.persistence", defaultValue = "true")
     protected boolean persistence;
@@ -102,7 +102,7 @@ public abstract class AbstractKieMojo extends AbstractMojo {
     }
 
     protected KogitoBuildContext discoverKogitoRuntimeContext(ClassLoader 
classLoader) {
-        AppPaths appPaths = AppPaths.fromProjectDir(projectDir.toPath(), 
outputDirectory.toPath());
+        AppPaths appPaths = AppPaths.fromProjectDir(projectDir.toPath());
         KogitoBuildContext context = contextBuilder()
                 .withClassAvailabilityResolver(this::hasClassOnClasspath)
                 
.withClassSubTypeAvailabilityResolver(classSubTypeAvailabilityResolver())
@@ -250,20 +250,27 @@ public abstract class AbstractKieMojo extends 
AbstractMojo {
     }
 
     protected void writeGeneratedFiles(Collection<GeneratedFile> 
generatedFiles) {
-        generatedFiles.forEach(this::writeGeneratedFile);
+        GeneratedFileWriter writer = getGeneratedFileWriter();
+        generatedFiles.forEach(generatedFile -> 
writeGeneratedFile(generatedFile, writer));
     }
 
     protected void writeGeneratedFile(GeneratedFile generatedFile) {
-        GeneratedFileWriter writer = new 
GeneratedFileWriter(outputDirectory.toPath(),
-                generatedSources.toPath(),
-                generatedResources.toPath(),
-                getSourcesPath().toPath());
+        writeGeneratedFile(generatedFile, getGeneratedFileWriter());
+    }
 
+    protected void writeGeneratedFile(GeneratedFile generatedFile, 
GeneratedFileWriter writer) {
         getLog().info("Generating: " + generatedFile.relativePath());
         writer.write(generatedFile);
     }
 
     protected File getSourcesPath() {
-        return generatedSources;
+        // using runtime BT instead of static AppPaths.MAVEN to allow
+        // invocation from GRADLE
+        return Path.of(baseDir.getAbsolutePath(), 
AppPaths.BT.GENERATED_SOURCES_PATH.toString()).toFile();
+    }
+
+    protected GeneratedFileWriter getGeneratedFileWriter() {
+        return generatedFileWriterBuilder
+                .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 9b101d390d..b1c3c67510 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
@@ -54,9 +54,6 @@ public class GenerateModelMojo extends AbstractKieMojo {
 
     public static final PathMatcher drlFileMatcher = 
FileSystems.getDefault().getPathMatcher("glob:**.drl");
 
-    @Parameter(property = "kogito.codegen.sources.directory", defaultValue = 
"${project.build.directory}/generated-sources/kogito")
-    private File customizableSourcesPath;
-
     /**
      * Partial generation can be used when reprocessing a pre-compiled project
      * for faster code-generation. It only generates code for rules and 
processes,
@@ -72,19 +69,16 @@ public class GenerateModelMojo extends AbstractKieMojo {
     @Parameter(property = "kogito.sources.keep", defaultValue = "false")
     private boolean keepSources;
 
-    @Parameter(property = "build.output.directory", readonly = true, 
defaultValue = "${project.build.directory}/classes/")
-    private String buildOutputDirectory;
-
     @Override
     public void execute() throws MojoExecutionException {
         // TODO to be removed with DROOLS-7090
         boolean indexFileDirectorySet = false;
-        getLog().debug("execute -> " + buildOutputDirectory);
-        if (buildOutputDirectory == null) {
+        getLog().debug("execute -> " + outputDirectory);
+        if (outputDirectory == null) {
             throw new MojoExecutionException("${project.build.directory} is 
null");
         }
         if (System.getProperty(INDEXFILE_DIRECTORY_PROPERTY) == null) {
-            System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
buildOutputDirectory);
+            System.setProperty(INDEXFILE_DIRECTORY_PROPERTY, 
outputDirectory.toString());
             indexFileDirectorySet = true;
         }
         addCompileSourceRoots();
@@ -103,14 +97,8 @@ public class GenerateModelMojo extends AbstractKieMojo {
         return onDemand;
     }
 
-    @Override
-    protected File getSourcesPath() {
-        return customizableSourcesPath;
-    }
-
     protected void addCompileSourceRoots() {
-        project.addCompileSourceRoot(getSourcesPath().getPath());
-        project.addCompileSourceRoot(generatedSources.getPath());
+        
project.addCompileSourceRoot(getGeneratedFileWriter().getScaffoldedSourcesDir().toString());
     }
 
     protected void generateModel() throws MojoExecutionException {
@@ -129,9 +117,11 @@ public class GenerateModelMojo extends AbstractKieMojo {
 
         Map<GeneratedFileType, List<GeneratedFile>> mappedGeneratedFiles = 
generatedFiles.stream()
                 .collect(Collectors.groupingBy(GeneratedFile::type));
-        mappedGeneratedFiles.entrySet().stream()
+        List<GeneratedFile> generatedUncompiledFiles = 
mappedGeneratedFiles.entrySet().stream()
                 .filter(entry -> !entry.getKey().equals(COMPILED_CLASS))
-                .forEach(entry -> writeGeneratedFiles(entry.getValue()));
+                .flatMap(entry -> entry.getValue().stream())
+                .toList();
+        writeGeneratedFiles(generatedUncompiledFiles);
 
         List<GeneratedFile> generatedCompiledFiles = 
mappedGeneratedFiles.getOrDefault(COMPILED_CLASS,
                 Collections.emptyList())
diff --git 
a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ProcessClassesMojo.java
 
b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ProcessClassesMojo.java
index f5ffd9b3d8..ef491c7eca 100644
--- 
a/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ProcessClassesMojo.java
+++ 
b/kogito-maven-plugin/src/main/java/org/kie/kogito/maven/plugin/ProcessClassesMojo.java
@@ -98,14 +98,14 @@ public class ProcessClassesMojo extends AbstractKieMojo {
             compileAndWriteClasses(generatedClasses, classLoader, settings);
 
             // Dump resources
-            generatedResources.forEach(this::writeGeneratedFile);
+            this.writeGeneratedFiles(generatedResources);
 
             // Json schema generation
             Stream<Class<?>> processClassStream = 
getReflections().getTypesAnnotatedWith(ProcessInput.class).stream();
-            
generateJsonSchema(processClassStream).forEach(this::writeGeneratedFile);
+            writeGeneratedFiles(generateJsonSchema(processClassStream));
 
             Stream<Class<?>> userTaskClassStream = 
getReflections().getTypesAnnotatedWith(UserTask.class).stream();
-            
generateJsonSchema(userTaskClassStream).forEach(this::writeGeneratedFile);
+            writeGeneratedFiles(generateJsonSchema(userTaskClassStream));
         } catch (Exception e) {
             throw new MojoExecutionException("Error during processing model 
classes", e);
         }
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 ab63a083fd..346a0f5a40 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
@@ -34,6 +34,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import org.drools.codegen.common.AppPaths;
 import org.drools.codegen.common.DroolsModelBuildContext;
 import org.drools.codegen.common.GeneratedFile;
 import org.drools.codegen.common.GeneratedFileType;
@@ -107,10 +108,9 @@ public class KogitoAssetsProcessor {
     @BuildStep
     public KogitoBuildContextBuildItem 
generateKogitoBuildContext(List<KogitoBuildContextAttributeBuildItem> 
attributes) {
         // configure the application generator
-        PathCollection rootPaths = getRootPaths(root.getResolvedPaths());
+        PathCollection rootPaths = getRootPaths(root.getResolvedPaths(), 
AppPaths.BT);
         KogitoBuildContext context =
-                kogitoBuildContext(outputTargetBuildItem.getOutputDirectory(),
-                        rootPaths,
+                kogitoBuildContext(rootPaths,
                         combinedIndexBuildItem.getIndex(),
                         
curateOutcomeBuildItem.getApplicationModel().getAppArtifact());
         attributes.forEach(attribute -> 
context.addContextAttribute(attribute.getName(), attribute.getValue()));
@@ -218,26 +218,26 @@ public class KogitoAssetsProcessor {
         return new 
EfestoGeneratedClassBuildItem(kogitoGeneratedSourcesBuildItem.getGeneratedFiles());
     }
 
-    static PathCollection getRootPaths(PathCollection resolvedPaths) {
-        AtomicReference<PathCollection> toReturnRef = new 
AtomicReference<>(resolvedPaths);
-        if (resolvedPaths.stream().noneMatch(path -> 
path.endsWith(File.separator + "generated-resources"))) {
-            Optional<Path> optClassesPath =
-                    resolvedPaths.stream().filter(path -> {
-                        String fullPath = path.toString();
-                        String dir = 
fullPath.substring(fullPath.lastIndexOf(File.separator) + 1);
-                        return dir.equals("classes");
-                    }).findFirst();
-            optClassesPath.ifPresent(classesPath -> {
-                Path toAdd = 
Path.of(classesPath.toString().replace(File.separator + "classes",
-                        File.separator +
-                                "generated" +
-                                "-resources"));
-                List<Path> prevPaths = 
toReturnRef.get().stream().collect(Collectors.toList());
-                prevPaths.add(toAdd);
-                toReturnRef.set(PathList.from(prevPaths));
-            });
+    static PathCollection getRootPaths(PathCollection resolvedPaths, 
AppPaths.BuildTool bt) {
+        // Needed hack because during MAVEN build, resolvedPaths point to root 
of project,
+        // while during GRADLE build, resolved paths contains 
{root_project}/build/classes/java/main and
+        // {root_project}/build/resources/main
+        switch (bt) {
+            case GRADLE -> {
+                AtomicReference<PathCollection> toReturnRef = new 
AtomicReference<>(resolvedPaths);
+                Optional<Path> optClassesPath =
+                        resolvedPaths.stream().filter(path -> {
+                            String fullPath = path.toString();
+                            String lookingFor = 
"build/classes/java/main".replace("/", File.separator);
+                            return fullPath.endsWith(lookingFor);
+                        }).findFirst();
+                optClassesPath.ifPresent(classesPath -> 
toReturnRef.set(PathList.of(classesPath)));
+                return toReturnRef.get();
+            }
+            default -> {
+                return resolvedPaths;
+            }
         }
-        return toReturnRef.get();
     }
 
     private Collection<GeneratedFile> 
collectGeneratedFiles(KogitoGeneratedSourcesBuildItem sources, 
List<KogitoAddonsPreGeneratedSourcesBuildItem> preSources,
diff --git 
a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoQuarkusResourceUtils.java
 
b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoQuarkusResourceUtils.java
index 3b10caeaa9..6a83445f27 100644
--- 
a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoQuarkusResourceUtils.java
+++ 
b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/main/java/org/kie/kogito/quarkus/common/deployment/KogitoQuarkusResourceUtils.java
@@ -34,6 +34,7 @@ import org.drools.codegen.common.AppPaths;
 import org.drools.codegen.common.DroolsModelBuildContext;
 import org.drools.codegen.common.GeneratedFile;
 import org.drools.codegen.common.GeneratedFileType;
+import org.drools.codegen.common.GeneratedFileWriter;
 import org.drools.quarkus.util.deployment.QuarkusAppPaths;
 import org.drools.util.PortablePath;
 import org.eclipse.microprofile.config.ConfigProvider;
@@ -44,7 +45,6 @@ import org.kie.kogito.KogitoGAV;
 import org.kie.kogito.codegen.api.SourceFileCodegenBindNotifier;
 import org.kie.kogito.codegen.api.context.KogitoBuildContext;
 import org.kie.kogito.codegen.api.context.impl.QuarkusKogitoBuildContext;
-import org.kie.kogito.codegen.core.utils.GeneratedFileWriter;
 import org.kie.memorycompiler.resources.ResourceReader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -76,16 +76,11 @@ public class KogitoQuarkusResourceUtils {
 
     // since quarkus-maven-plugin is later phase of maven-resources-plugin,
     // need to manually late-provide the resource in the expected location for 
quarkus:dev phase --so not: writeGeneratedFile( f, resourcePath )
-    private static final GeneratedFileWriter.Builder 
generatedFileWriterBuilder =
-            new GeneratedFileWriter.Builder(
-                    "target/classes",
-                    System.getProperty("kogito.codegen.sources.directory", 
"target/generated-sources/kogito/"),
-                    System.getProperty("kogito.codegen.resources.directory", 
"target/generated-resources/kogito/"),
-                    "target/generated-sources/kogito/");
-
-    public static KogitoBuildContext kogitoBuildContext(Path outputTarget, 
Iterable<Path> paths, IndexView index, Dependency appArtifact) {
+    private static final GeneratedFileWriter.Builder 
generatedFileWriterBuilder = GeneratedFileWriter.builder("kogito", 
"kogito.codegen.resources.directory", "kogito.codegen.sources.directory");
+
+    public static KogitoBuildContext kogitoBuildContext(Iterable<Path> paths, 
IndexView index, Dependency appArtifact) {
         // scan and parse paths
-        AppPaths appPaths = QuarkusAppPaths.from(outputTarget, paths, 
AppPaths.BuildTool.findBuildTool());
+        AppPaths appPaths = QuarkusAppPaths.from(paths);
         ClassLoader classLoader = 
Thread.currentThread().getContextClassLoader();
         KogitoBuildContext context = QuarkusKogitoBuildContext.builder()
                 .withApplicationPropertyProvider(new 
KogitoQuarkusApplicationPropertiesProvider())
@@ -111,9 +106,7 @@ public class KogitoQuarkusResourceUtils {
     private static Predicate<Class<?>> 
classSubTypeAvailabilityResolver(IndexView index) {
         return clazz -> 
index.getAllKnownImplementors(DotName.createSimple(clazz.getCanonicalName()))
                 .stream()
-                .filter(c -> !Modifier.isInterface(c.flags()) && 
!Modifier.isAbstract(c.flags()))
-                .findFirst()
-                .isPresent();
+                .anyMatch(c -> !Modifier.isInterface(c.flags()) && 
!Modifier.isAbstract(c.flags()));
     }
 
     /**
diff --git 
a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/test/java/org/kie/kogito/quarkus/common/deployment/KogitoAssetsProcessorTest.java
 
b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/test/java/org/kie/kogito/quarkus/common/deployment/KogitoAssetsProcessorTest.java
index f641e28af9..fd7483bb67 100644
--- 
a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/test/java/org/kie/kogito/quarkus/common/deployment/KogitoAssetsProcessorTest.java
+++ 
b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common-deployment/src/test/java/org/kie/kogito/quarkus/common/deployment/KogitoAssetsProcessorTest.java
@@ -22,7 +22,9 @@ import java.io.File;
 import java.nio.file.Path;
 import java.util.Arrays;
 
-import org.junit.jupiter.api.Test;
+import org.drools.codegen.common.AppPaths;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import io.quarkus.bootstrap.model.PathsCollection;
 import io.quarkus.paths.PathCollection;
@@ -32,34 +34,45 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class KogitoAssetsProcessorTest {
 
-    @Test
-    void getRootPathsWithoutClasses() {
+    @ParameterizedTest
+    @ValueSource(booleans = { true, false })
+    void getRootPathsWithoutClasses(boolean withGradle) {
         String projectDirPath = "projectDir";
-        String outputTargetPath = "outputTarget";
         Path projectDir = Path.of(projectDirPath);
-        Path outputTarget = Path.of(outputTargetPath);
+        AppPaths.BuildTool bt;
+        if (withGradle) {
+            bt = AppPaths.BuildTool.GRADLE;
+        } else {
+            bt = AppPaths.BuildTool.MAVEN;
+        }
+        Path outputTarget = Path.of(bt.OUTPUT_DIRECTORY);
         Iterable<Path> paths = Arrays.asList(projectDir, outputTarget);
-
         PathCollection resolvedPaths = PathsCollection.from(paths);
-        PathCollection retrieved = 
KogitoAssetsProcessor.getRootPaths(resolvedPaths);
+        PathCollection retrieved = 
KogitoAssetsProcessor.getRootPaths(resolvedPaths, bt);
         assertEquals(resolvedPaths.size(), retrieved.size());
         paths.forEach(expected -> assertTrue(retrieved.contains(expected)));
     }
 
-    @Test
-    void getRootPathsWithClasses() {
+    @ParameterizedTest
+    @ValueSource(booleans = { true, false })
+    void getRootPathsWithClasses(boolean withGradle) {
         String projectDirPath = "projectDir";
-        String outputTargetPath = "outputTarget";
-        String outputTargetPathClasses = String.format("%s/%s/classes", 
projectDirPath, outputTargetPath).replace("/", File.separator);
+        AppPaths.BuildTool bt;
+        if (withGradle) {
+            bt = AppPaths.BuildTool.GRADLE;
+        } else {
+            bt = AppPaths.BuildTool.MAVEN;
+        }
+        String outputTargetPathClasses = String.format("%s/%s", 
projectDirPath, bt.CLASSES_PATH.toString()).replace("./", "").replace("/", 
File.separator);
         Path projectDir = Path.of(projectDirPath);
         Path outputTarget = Path.of(outputTargetPathClasses);
         Iterable<Path> paths = Arrays.asList(projectDir, outputTarget);
 
         PathCollection resolvedPaths = PathsCollection.from(paths);
-        PathCollection retrieved = 
KogitoAssetsProcessor.getRootPaths(resolvedPaths);
-        assertEquals(resolvedPaths.size() + 1, retrieved.size());
-        paths.forEach(expected -> assertTrue(retrieved.contains(expected)));
-        String expectedPath = String.format("%s/%s/generated-resources", 
projectDirPath, outputTargetPath).replace("/", File.separator);
+        PathCollection retrieved = 
KogitoAssetsProcessor.getRootPaths(resolvedPaths, bt);
+        int expectedSize = withGradle ? 1 : resolvedPaths.size();
+        assertEquals(expectedSize, retrieved.size());
+        String expectedPath = String.format("%s/%s", projectDirPath, 
bt.CLASSES_PATH).replace("/", File.separator);
         assertTrue(retrieved.contains(Path.of(expectedPath)));
     }
 }


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


Reply via email to