This is an automated email from the ASF dual-hosted git repository.
yamer 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 28984ce104 kie-issues#2193: Preliminary changes to enable Gradle and
improvements to `kogito-maven-plugin` (#4166)
28984ce104 is described below
commit 28984ce104678c6b0beb96e54809de20fc6e5dba
Author: Yeser Amer <[email protected]>
AuthorDate: Thu Jan 15 12:10:41 2026 +0100
kie-issues#2193: Preliminary changes to enable Gradle and improvements to
`kogito-maven-plugin` (#4166)
* Improvements to code generation manager and plugin
* Minor
* Revert Maven plugin testing
* minor
* minor
* minor
* minor
* change request
* change request
* tests added
* tests added
* logback tests added.
* logback tests added.
* logback tests added.
* Improve compatibility with JDK 21+
* Revert Maven surefire plugin configuration for dynamic
---
.../kie/kogito/codegen/manager/BuilderManager.java | 19 +-
.../kie/kogito/codegen/manager/CompilerHelper.java | 63 +---
.../codegen/manager/GenerateModelHelper.java | 39 +--
.../codegen/manager/GeneratedFileManager.java | 131 ++++++++
.../codegen/manager/util/CodeGenManagerUtil.java | 26 --
.../codegen/manager/GeneratedFileManagerTest.java | 337 +++++++++++++++++++++
.../src/test/resources/logback-test.xml | 40 +++
kogito-maven-plugin-test/pom.xml | 1 -
kogito-maven-plugin/README.md | 1 -
kogito-maven-plugin/pom.xml | 1 +
.../kie/kogito/maven/plugin/AbstractKieMojo.java | 21 +-
.../kie/kogito/maven/plugin/GenerateModelMojo.java | 22 +-
.../kogito/maven/plugin/GenerateModelMojoTest.java | 19 +-
13 files changed, 584 insertions(+), 136 deletions(-)
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
index 23d1fab8b6..a59a6149ad 100644
---
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
@@ -57,7 +57,6 @@ public class BuilderManager {
String jsonSchemaVersion,
boolean generatePartial,
boolean enablePersistence,
- boolean onDemand,
boolean keepSources,
List<String> runtimeClassPathElements,
CodeGenManagerUtil.Framework framework,
@@ -65,6 +64,7 @@ public class BuilderManager {
}
public static void build(BuildInfo buildInfo) throws MalformedURLException
{
+ executeConfigurationLog(buildInfo);
LOGGER.info("Building project: {}:{}:{}", buildInfo.projectGroupId(),
buildInfo.projectArtifactId(), buildInfo.projectVersion());
CodeGenManagerUtil.setSystemProperties(buildInfo.properties());
ClassLoader projectClassLoader =
CodeGenManagerUtil.projectClassLoader(buildInfo.projectFilesUris());
@@ -76,6 +76,21 @@ public class BuilderManager {
LOGGER.info("Project build done");
}
+ static void executeConfigurationLog(BuildInfo buildInfo) {
+ LOGGER.info("========================================");
+ LOGGER.info(" Kogito Code Generation Configuration");
+ LOGGER.info("========================================");
+ LOGGER.info(" Java Version : {}", buildInfo.javaVersion());
+ LOGGER.info(" Source Encoding : {}",
buildInfo.javaSourceEncoding());
+ LOGGER.info(" Base Directory : {}",
buildInfo.projectBaseAbsolutePath());
+ LOGGER.info(" Output Directory : {}", buildInfo.outputDirectory());
+ LOGGER.info(" JSON Schema Version : {}",
buildInfo.jsonSchemaVersion() != null ? buildInfo.jsonSchemaVersion() : "nd");
+ LOGGER.info(" Persistence Enabled : {}",
buildInfo.enablePersistence());
+ LOGGER.info(" Keep Sources : {}", buildInfo.keepSources());
+ LOGGER.info(" Framework : {}", buildInfo.framework());
+ LOGGER.info("========================================");
+ }
+
static KogitoBuildContext getKogitoBuildContext(ClassLoader
projectClassLoader, KogitoGAV kogitoGAV, KogitoBuildContextInfo
kogitoBuildContextInfo) {
return
CodeGenManagerUtil.discoverKogitoRuntimeContext(projectClassLoader,
kogitoBuildContextInfo.projectBaseAbsolutePath(), kogitoGAV,
new
CodeGenManagerUtil.ProjectParameters(kogitoBuildContextInfo.framework(), "",
"", "", "", kogitoBuildContextInfo.enablePersistence()),
@@ -83,7 +98,7 @@ public class BuilderManager {
try {
return
CodeGenManagerUtil.isClassNameInUrlClassLoader(kogitoBuildContextInfo.projectFilesUris(),
className);
} catch (MalformedURLException e) {
- throw new RuntimeException(e);
+ throw new IllegalArgumentException(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 a0029ed77f..5e67d5a202 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
@@ -27,25 +27,17 @@ import java.util.stream.Collectors;
import org.drools.codegen.common.GeneratedFile;
import org.drools.codegen.common.GeneratedFileType;
-import org.drools.codegen.common.GeneratedFileWriter;
import org.drools.compiler.compiler.io.memory.MemoryFileSystem;
-import org.drools.util.PortablePath;
import org.kie.memorycompiler.CompilationProblem;
import org.kie.memorycompiler.CompilationResult;
import org.kie.memorycompiler.JavaCompiler;
import org.kie.memorycompiler.JavaCompilerFactory;
import org.kie.memorycompiler.JavaCompilerSettings;
import org.kie.memorycompiler.JavaConfiguration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
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");
public static final String SOURCES = "SOURCES";
public static final String RESOURCES = "RESOURCES";
@@ -72,53 +64,18 @@ public class CompilerHelper {
}
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) {
- writeFiles(resources, baseDir);
- }
-
- static void writeFiles(Collection<GeneratedFile> toWrite, File baseDir) {
- GeneratedFileWriter writer = getGeneratedFileWriter(baseDir);
- 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);
+ compileInfo.baseDir().toPath());
}
static void compileAndWriteClasses(Collection<GeneratedFile>
generatedClasses,
ClassLoader classLoader,
JavaCompilerSettings javaCompilerSettings,
- GeneratedFileWriter fileWriter) {
+ Path baseDir) {
MemoryFileSystem srcMfs = new MemoryFileSystem();
MemoryFileSystem trgMfs = new MemoryFileSystem();
@@ -139,15 +96,15 @@ public class CompilerHelper {
.collect(Collectors.joining(",")));
}
- for (PortablePath path : trgMfs.getFilePaths()) {
- byte[] data = trgMfs.getBytes(path);
- writeGeneratedFile(new
GeneratedFile(GeneratedFileType.COMPILED_CLASS, path.asString(), data),
fileWriter);
- }
- }
- }
+ Collection<GeneratedFile> compiledClasses =
trgMfs.getFilePaths().stream()
+ .map(path -> new GeneratedFile(
+ GeneratedFileType.COMPILED_CLASS,
+ path.asString(),
+ trgMfs.getBytes(path)))
+ .toList();
- static GeneratedFileWriter getGeneratedFileWriter(File baseDir) {
- return
GENERATED_FILE_WRITER_BUILDER.build(Path.of(baseDir.getAbsolutePath()));
+ GeneratedFileManager.dumpGeneratedFiles(compiledClasses, baseDir);
+ }
}
static JavaCompilerSettings buildJavaCompilerSettings(List<String>
runtimeClassPathElements,
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 23a569595d..6833634995 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,7 +20,6 @@ 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;
@@ -30,9 +29,6 @@ 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;
@@ -41,14 +37,11 @@ import static
org.kie.kogito.codegen.manager.CompilerHelper.SOURCES;
public class GenerateModelHelper {
- private static final Logger LOGGER =
LoggerFactory.getLogger(GenerateModelHelper.class);
-
private GenerateModelHelper() {
}
public record GenerateModelInfo(ClassLoader projectClassLoader,
KogitoBuildContext kogitoBuildContext,
- boolean onDemand,
boolean generatePartial,
Map<String, String> properties,
File outputDirectory,
@@ -60,7 +53,7 @@ public class GenerateModelHelper {
boolean keepSources) {
public GenerateModelInfo(ClassLoader projectClassLoader,
KogitoBuildContext kogitoBuildContext, BuilderManager.BuildInfo buildInfo) {
- this(projectClassLoader, kogitoBuildContext, buildInfo.onDemand(),
buildInfo.generatePartial(), buildInfo.properties(),
+ this(projectClassLoader, kogitoBuildContext,
buildInfo.generatePartial(), buildInfo.properties(),
buildInfo.outputDirectory().toFile(),
buildInfo.runtimeClassPathElements(),
buildInfo.projectBaseAbsolutePath().toFile(),
@@ -81,13 +74,6 @@ public class GenerateModelHelper {
}
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");
}
@@ -96,24 +82,41 @@ public class GenerateModelHelper {
System.clearProperty(INDEXFILE_DIRECTORY_PROPERTY);
}
+ /* 1. Execute Code Generation based on KIE models */
+ Map<String, Collection<GeneratedFile>> generatedModelFiles =
generateModelFiles(new GenerateModelFilesInfo(generateModelInfo));
+
CompilerHelper.CompileInfo compileInfo =
new
CompilerHelper.CompileInfo(generatedModelFiles.get(SOURCES),
generatedModelFiles.get(RESOURCES), generateModelInfo);
- // Compile and write model files
+ /* 2. Persist the models' code-generated source and resources files in
target (maven) or gradle (build) */
+
GeneratedFileManager.dumpGeneratedFiles(compileInfo.generatedSources(),
compileInfo.baseDir().toPath());
+ GeneratedFileManager.dumpGeneratedFiles(compileInfo.resources(),
compileInfo.baseDir().toPath());
+
+ /* 3. Compile and persist compiled files in target (maven) or gradle
(build) */
CompilerHelper.compileAndDump(compileInfo);
+ /*
+ * 4. Execute Code Generation based on process extensions modules.
+ * This MUST be executed AFTER models' code-generated sources are
compiled
+ * The code generated in this phase DEPENDS on the code previously
generated.
+ */
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);
+
+ /* 5. Persist the process extension code-generated source and
resources files in target (maven) or gradle (build) */
+
GeneratedFileManager.dumpGeneratedFiles(generatedPersistenceFiles.get(SOURCES),
compileInfo.baseDir().toPath());
+
GeneratedFileManager.dumpGeneratedFiles(generatedPersistenceFiles.get(RESOURCES),
compileInfo.baseDir().toPath());
+
+ /* 6. Compile and persist compiled files in target (maven) or gradle
(build) */
CompilerHelper.compileAndDump(compileInfo);
if (!generateModelInfo.keepSources()) {
-
CodeGenManagerUtil.deleteDrlFiles(generateModelInfo.outputDirectory().toPath());
+
GeneratedFileManager.deleteFilesByExtension(generateModelInfo.outputDirectory().toPath(),
"drl");
}
}
diff --git
a/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/GeneratedFileManager.java
b/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/GeneratedFileManager.java
new file mode 100644
index 0000000000..f3ef94292f
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-manager/src/main/java/org/kie/kogito/codegen/manager/GeneratedFileManager.java
@@ -0,0 +1,131 @@
+/*
+ * 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.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Collection;
+import java.util.Objects;
+import java.util.stream.Stream;
+
+import org.drools.codegen.common.GeneratedFile;
+import org.drools.codegen.common.GeneratedFileWriter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility class responsible for managing and writing generated files to
specific locations.
+ * This class provides methods to handle the dumping of generated files while
+ * leveraging an internally configured {@code GeneratedFileWriter} instance.
+ * The {@code GeneratedFileManager} is designed to be used as a static utility
and
+ * therefore cannot be instantiated.
+ */
+public class GeneratedFileManager {
+
+ private static final Logger LOGGER =
LoggerFactory.getLogger(GeneratedFileManager.class);
+
+ private static final GeneratedFileWriter.Builder
GENERATED_FILE_WRITER_BUILDER =
+ GeneratedFileWriter.builder("kogito",
"kogito.codegen.resources.directory", "kogito.codegen.sources.directory");
+
+ private GeneratedFileManager() {
+ // Not instantiable - static methods only.
+ }
+
+ /**
+ * Dumps a collection of generated files to the specified base path using
a configured {@code GeneratedFileWriter}.
+ * If the provided collection of generated files is null or empty, no
action is taken.
+ *
+ * @param generatedFiles the collection of {@code GeneratedFile} objects
to be written; may be null or empty.
+ * @param basePath the base directory {@code Path} where the files will be
written; must not be null.
+ * @throws NullPointerException if {@code basePath} is null.
+ */
+ public static void dumpGeneratedFiles(Collection<GeneratedFile>
generatedFiles, Path basePath) {
+ Objects.requireNonNull(basePath, "basePath must not be null");
+
+ if (generatedFiles == null || generatedFiles.isEmpty()) {
+ LOGGER.debug("No generated files to write (0 items).");
+ return;
+ }
+
+ GeneratedFileWriter writer =
GENERATED_FILE_WRITER_BUILDER.build(basePath);
+ generatedFiles.forEach(generatedFile ->
writeGeneratedFile(generatedFile, writer));
+ }
+
+ /**
+ * Writes a single {@code GeneratedFile} to its target destination using
the specified {@code GeneratedFileWriter}.
+ * The method logs the file path if logging at the INFO level is enabled.
+ *
+ * @param generatedFile the {@code GeneratedFile} to be written; must not
be null
+ * @param writer the {@code GeneratedFileWriter} responsible for handling
the file write operation; must not be null
+ */
+ static void writeGeneratedFile(GeneratedFile generatedFile,
GeneratedFileWriter writer) {
+ if (LOGGER.isInfoEnabled()) {
+ LOGGER.info("Writing file: {}", generatedFile.path());
+ }
+ writer.write(generatedFile);
+ }
+
+ /**
+ * Deletes all files with the specified extension in a given directory
+ *
+ * @param directory the directory to search for files
+ * @param extension the file extension to match (e.g., "drl", "dmn",
"java")
+ */
+ public static void deleteFilesByExtension(Path directory, String
extension) {
+ Objects.requireNonNull(directory, "directory must not be null");
+ Objects.requireNonNull(extension, "extension must not be null");
+
+ if (extension.isBlank()) {
+ throw new IllegalArgumentException("extension must not be blank");
+ }
+
+ if (!Files.exists(directory)) {
+ throw new IllegalArgumentException("directory does not exist: " +
directory);
+ }
+
+ if (!Files.isDirectory(directory)) {
+ throw new IllegalArgumentException("path is not a directory: " +
directory);
+ }
+
+ final String normalizedExtension = extension.startsWith(".") ?
extension : "." + extension;
+
+ LOGGER.debug("Deleting files with extension '{}' in directory: {}",
normalizedExtension, directory);
+
+ try (final Stream<Path> files = Files.find(directory,
+ Integer.MAX_VALUE,
+ (path, attributes) -> attributes.isRegularFile() &&
+
path.getFileName().toString().toLowerCase().endsWith(normalizedExtension.toLowerCase())))
{
+ files.forEach(path -> {
+ try {
+ Files.delete(path);
+ LOGGER.debug("Deleted file: {}", path);
+ } catch (IOException e) {
+ throw new UncheckedIOException("Failed to delete: " +
path, e);
+ }
+ });
+ } catch (IOException e) {
+ throw new UncheckedIOException(
+ "Error during " + normalizedExtension + " files deletion
in: " + directory, e);
+ }
+ }
+
+}
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 05addb853b..79160aa6f8 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
@@ -18,22 +18,16 @@
*/
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;
import org.drools.codegen.common.AppPaths;
import org.drools.codegen.common.DroolsModelBuildContext;
@@ -57,7 +51,6 @@ import org.slf4j.LoggerFactory;
public class CodeGenManagerUtil {
private static final Logger LOGGER =
LoggerFactory.getLogger(CodeGenManagerUtil.class);
- public static final PathMatcher DRL_FILE_MATCHER =
FileSystems.getDefault().getPathMatcher("glob:**.drl");
public enum Framework {
QUARKUS("quarkus"),
@@ -206,23 +199,4 @@ public class CodeGenManagerUtil {
return false;
}
}
-
- /**
- * It deletes all DRL files in a given Path directory
- */
- public static void deleteDrlFiles(Path directory) {
- try (final Stream<Path> drlFiles = Files.find(directory,
- Integer.MAX_VALUE,
- (p, f) -> DRL_FILE_MATCHER.matches(p))) {
- drlFiles.forEach(p -> {
- try {
- Files.delete(p);
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
- });
- } catch (IOException e) {
- throw new UncheckedIOException("Error during .drl files deletion",
e);
- }
- }
}
diff --git
a/kogito-codegen-modules/kogito-codegen-manager/src/test/java/org/kie/kogito/codegen/manager/GeneratedFileManagerTest.java
b/kogito-codegen-modules/kogito-codegen-manager/src/test/java/org/kie/kogito/codegen/manager/GeneratedFileManagerTest.java
new file mode 100644
index 0000000000..3661b12e93
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-manager/src/test/java/org/kie/kogito/codegen/manager/GeneratedFileManagerTest.java
@@ -0,0 +1,337 @@
+/*
+ * 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.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.drools.codegen.common.GeneratedFile;
+import org.drools.codegen.common.GeneratedFileType;
+import org.drools.codegen.common.GeneratedFileWriter;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.NullAndEmptySource;
+import org.junit.jupiter.params.provider.ValueSource;
+import org.mockito.ArgumentCaptor;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+class GeneratedFileManagerTest {
+
+ @TempDir
+ Path tempDir;
+
+ private Path testDirectory;
+
+ @BeforeEach
+ void setUp() throws IOException {
+ testDirectory = tempDir.resolve("test-dir");
+ Files.createDirectories(testDirectory);
+ }
+
+ @AfterEach
+ void tearDown() throws IOException {
+ if (Files.exists(testDirectory)) {
+ Files.walk(testDirectory)
+ .sorted(Comparator.reverseOrder())
+ .forEach(path -> {
+ try {
+ Files.deleteIfExists(path);
+ } catch (IOException e) {
+ // Ignore cleanup errors
+ }
+ });
+ }
+ }
+
+ @ParameterizedTest
+ @MethodSource("provideFileTypeTestCases")
+ void dumpGeneratedFiles_withDifferentFileTypes_shouldWriteAllTypes(
+ List<String> fileNames, List<String> expectedFiles) throws
IOException {
+ List<GeneratedFile> generatedFiles = new ArrayList<>();
+ for (String fileName : fileNames) {
+ generatedFiles.add(createMockGeneratedFile(fileName));
+ }
+
+ GeneratedFileManager.dumpGeneratedFiles(generatedFiles, testDirectory);
+
+ assertThat(testDirectory).exists();
+
+ // Verify the correct number of files were created
+ try (Stream<Path> files = Files.walk(testDirectory)) {
+ long fileCount = files.filter(Files::isRegularFile).count();
+ assertThat(fileCount).isEqualTo(expectedFiles.size());
+ }
+
+ // Verify each expected file exists somewhere in the directory tree
+ try (Stream<Path> files = Files.walk(testDirectory)) {
+ List<String> actualFileNames = files
+ .filter(Files::isRegularFile)
+ .map(Path::getFileName)
+ .map(Path::toString)
+ .sorted()
+ .toList();
+
+ List<String> sortedExpectedFiles = new ArrayList<>(expectedFiles);
+ sortedExpectedFiles.sort(String::compareTo);
+
+ assertThat(actualFileNames)
+ .as("All expected files should be written")
+ .containsExactlyElementsOf(sortedExpectedFiles);
+ }
+
+ // Verify file content for the first file
+ if (!expectedFiles.isEmpty()) {
+ try (Stream<Path> files = Files.walk(testDirectory)) {
+ Path firstFile = files
+ .filter(Files::isRegularFile)
+ .filter(p ->
p.getFileName().toString().equals(expectedFiles.get(0)))
+ .findFirst()
+ .orElseThrow();
+
+ String content = Files.readString(firstFile);
+ assertThat(content).isEqualTo("// Generated content");
+ }
+ }
+ }
+
+ @Test
+ void dumpGeneratedFiles_withNullBasePath_shouldThrowNullPointerException()
{
+ Collection<GeneratedFile> generatedFiles = createMockGeneratedFiles(1);
+
+ assertThatThrownBy(() ->
GeneratedFileManager.dumpGeneratedFiles(generatedFiles, null))
+ .isInstanceOf(NullPointerException.class)
+ .hasMessageContaining("basePath must not be null");
+ }
+
+ @ParameterizedTest
+ @NullAndEmptySource
+ void
dumpGeneratedFiles_withNullOrEmptyCollection_shouldNotWriteFiles(Collection<GeneratedFile>
generatedFiles) {
+ GeneratedFileManager.dumpGeneratedFiles(generatedFiles, testDirectory);
+
+ // no exception should be thrown and directory should still exist
+ assertThat(testDirectory).exists();
+ }
+
+ @Test
+ void writeGeneratedFile_withValidFile_shouldCallWriter() {
+ GeneratedFile generatedFile = createMockGeneratedFile("TestFile.java");
+ GeneratedFileWriter writer = mock(GeneratedFileWriter.class);
+
+ GeneratedFileManager.writeGeneratedFile(generatedFile, writer);
+
+ ArgumentCaptor<GeneratedFile> captor =
ArgumentCaptor.forClass(GeneratedFile.class);
+ verify(writer, times(1)).write(captor.capture());
+ assertThat(captor.getValue()).isEqualTo(generatedFile);
+ }
+
+ @ParameterizedTest
+ @MethodSource("provideExtensionTestCases")
+ void
deleteFilesByExtension_withVariousExtensions_shouldDeleteMatchingFiles(
+ String extension, List<String> filesToCreate, List<String>
expectedDeleted) throws IOException {
+
+ for (String fileName : filesToCreate) {
+ Path file = testDirectory.resolve(fileName);
+ Files.createDirectories(file.getParent());
+ Files.createFile(file);
+ }
+
+ GeneratedFileManager.deleteFilesByExtension(testDirectory, extension);
+
+ for (String fileName : filesToCreate) {
+ Path file = testDirectory.resolve(fileName);
+ if (expectedDeleted.contains(fileName)) {
+ assertThat(file).doesNotExist();
+ } else {
+ assertThat(file).exists();
+ }
+ }
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = { ".java", "java", ".JAVA", "JAVA" })
+ void
deleteFilesByExtension_withDifferentExtensionFormats_shouldNormalizeAndDelete(String
extension) throws IOException {
+ Path javaFile = testDirectory.resolve("Test.java");
+ Path txtFile = testDirectory.resolve("Test.txt");
+ Files.createFile(javaFile);
+ Files.createFile(txtFile);
+
+ GeneratedFileManager.deleteFilesByExtension(testDirectory, extension);
+
+ assertThat(javaFile).doesNotExist();
+ assertThat(txtFile).exists();
+ }
+
+ @Test
+ void
deleteFilesByExtension_withNestedDirectories_shouldDeleteRecursively() throws
IOException {
+ Path subDir = testDirectory.resolve("subdir");
+ Files.createDirectories(subDir);
+ Path file1 = testDirectory.resolve("file1.drl");
+ Path file2 = subDir.resolve("file2.drl");
+ Path file3 = subDir.resolve("file3.txt");
+ Files.createFile(file1);
+ Files.createFile(file2);
+ Files.createFile(file3);
+
+ GeneratedFileManager.deleteFilesByExtension(testDirectory, ".drl");
+
+ assertThat(file1).doesNotExist();
+ assertThat(file2).doesNotExist();
+ assertThat(file3).exists();
+ }
+
+ @Test
+ void
deleteFilesByExtension_withNonExistentDirectory_shouldThrowIllegalArgumentException()
{
+ Path nonExistentDir = tempDir.resolve("non-existent");
+
+ assertThatThrownBy(() ->
GeneratedFileManager.deleteFilesByExtension(nonExistentDir, ".java"))
+ .isInstanceOf(IllegalArgumentException.class)
+ .hasMessageContaining("directory does not exist");
+ }
+
+ @Test
+ void deleteFilesByExtension_withEmptyDirectory_shouldNotThrowException()
throws IOException {
+ Path emptyDir = testDirectory.resolve("empty");
+ Files.createDirectories(emptyDir);
+
+ GeneratedFileManager.deleteFilesByExtension(emptyDir, ".java");
+ assertThat(emptyDir).exists();
+ }
+
+ @Test
+ void deleteFilesByExtension_withNoMatchingFiles_shouldNotDeleteAnything()
throws IOException {
+ Path file1 = testDirectory.resolve("file1.txt");
+ Path file2 = testDirectory.resolve("file2.xml");
+ Files.createFile(file1);
+ Files.createFile(file2);
+
+ GeneratedFileManager.deleteFilesByExtension(testDirectory, ".java");
+
+ assertThat(file1).exists();
+ assertThat(file2).exists();
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = { "", " " })
+ void
deleteFilesByExtension_withEmptyOrBlankExtension_shouldThrowIllegalArgumentException(String
extension) {
+ assertThatThrownBy(() ->
GeneratedFileManager.deleteFilesByExtension(testDirectory, extension))
+ .isInstanceOf(IllegalArgumentException.class)
+ .hasMessageContaining("extension must not be blank");
+ }
+
+ @Test
+ void
deleteFilesByExtension_withNullDirectory_shouldThrowNullPointerException() {
+ assertThatThrownBy(() ->
GeneratedFileManager.deleteFilesByExtension(null, ".java"))
+ .isInstanceOf(NullPointerException.class)
+ .hasMessageContaining("directory must not be null");
+ }
+
+ @Test
+ void
deleteFilesByExtension_withNullExtension_shouldThrowNullPointerException() {
+ assertThatThrownBy(() ->
GeneratedFileManager.deleteFilesByExtension(testDirectory, null))
+ .isInstanceOf(NullPointerException.class)
+ .hasMessageContaining("extension must not be null");
+ }
+
+ @Test
+ void
deleteFilesByExtension_withFileInsteadOfDirectory_shouldThrowIllegalArgumentException()
throws IOException {
+ Path file = testDirectory.resolve("not-a-directory.txt");
+ Files.createFile(file);
+
+ assertThatThrownBy(() ->
GeneratedFileManager.deleteFilesByExtension(file, ".java"))
+ .isInstanceOf(IllegalArgumentException.class)
+ .hasMessageContaining("path is not a directory");
+ }
+
+ // Helper methods
+
+ private Collection<GeneratedFile> createMockGeneratedFiles(int count) {
+ List<GeneratedFile> files = new ArrayList<>();
+ for (int i = 0; i < count; i++) {
+ files.add(createMockGeneratedFile("File" + i + ".java"));
+ }
+ return files;
+ }
+
+ private GeneratedFile createMockGeneratedFile(String path) {
+ return new GeneratedFile(
+ GeneratedFileType.SOURCE,
+ path,
+ "// Generated content".getBytes());
+ }
+
+ private static Stream<Arguments> provideFileTypeTestCases() {
+ return Stream.of(
+ // Test case: files to create, expected files
+ Arguments.of(
+ List.of("Test.java", "Main.java", "Config.json"),
+ List.of("Test.java", "Main.java", "Config.json")),
+ Arguments.of(
+ List.of("Model.class", "Service.class"),
+ List.of("Model.class", "Service.class")),
+ Arguments.of(
+ List.of("schema.proto", "message.proto"),
+ List.of("schema.proto", "message.proto")),
+ Arguments.of(
+ List.of("data.json", "config.xml", "rules.drl"),
+ List.of("data.json", "config.xml", "rules.drl")),
+ Arguments.of(
+ List.of("app.properties", "settings.yaml",
"metadata.txt"),
+ List.of("app.properties", "settings.yaml",
"metadata.txt")),
+ Arguments.of(
+ List.of("mixed.java", "data.json", "schema.proto",
"binary.class"),
+ List.of("mixed.java", "data.json", "schema.proto",
"binary.class")));
+ }
+
+ private static Stream<Arguments> provideExtensionTestCases() {
+ return Stream.of(
+ // Test case: extension, files to create, files expected to be
deleted
+ Arguments.of(
+ ".java",
+ List.of("Test.java", "Main.java", "Config.xml"),
+ List.of("Test.java", "Main.java")),
+ Arguments.of(
+ ".drl",
+ List.of("rules.drl", "test.DRL", "other.txt"),
+ List.of("rules.drl", "test.DRL")),
+ Arguments.of(
+ "dmn",
+ List.of("decision.dmn", "process.bpmn", "model.DMN"),
+ List.of("decision.dmn", "model.DMN")),
+ Arguments.of(
+ ".txt",
+ List.of("readme.txt", "notes.TXT", "data.json"),
+ List.of("readme.txt", "notes.TXT")));
+ }
+}
diff --git
a/kogito-codegen-modules/kogito-codegen-manager/src/test/resources/logback-test.xml
b/kogito-codegen-modules/kogito-codegen-manager/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..6c11807ba3
--- /dev/null
+++
b/kogito-codegen-modules/kogito-codegen-manager/src/test/resources/logback-test.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<configuration>
+ <appender name="consoleAppender"
class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <!-- %l lowers performance -->
+ <!--<pattern>%d [%t] %-5p %l%n %m%n</pattern>-->
+ <pattern>%d [%t] %-5p %m%n</pattern>
+ </encoder>
+ </appender>
+
+ <!-- Suppress most logs during tests - only show ERROR level -->
+ <root level="ERROR">
+ <appender-ref ref="consoleAppender" />
+ </root>
+
+ <!-- Keep Kogito package at WARN to see important warnings -->
+ <logger name="org.kie.kogito" level="WARN" additivity="false">
+ <appender-ref ref="consoleAppender" />
+ </logger>
+</configuration>
\ No newline at end of file
diff --git a/kogito-maven-plugin-test/pom.xml b/kogito-maven-plugin-test/pom.xml
index 5daacf49f2..d77ce8630e 100644
--- a/kogito-maven-plugin-test/pom.xml
+++ b/kogito-maven-plugin-test/pom.xml
@@ -149,7 +149,6 @@
<version>${project.version}</version>
<executions>
<execution>
- <phase>compile</phase>
<goals>
<goal>generateModel</goal>
</goals>
diff --git a/kogito-maven-plugin/README.md b/kogito-maven-plugin/README.md
index bae92dfa2a..846aee3b67 100644
--- a/kogito-maven-plugin/README.md
+++ b/kogito-maven-plugin/README.md
@@ -45,7 +45,6 @@ In your Kogito project root `pom.xml` file, add the following
plugin declaration
<version>${version.org.kie.kogito}</version>
<executions>
<execution>
- <phase>compile</phase>
<goals>
<goal>generateModel</goal>
</goals>
diff --git a/kogito-maven-plugin/pom.xml b/kogito-maven-plugin/pom.xml
index face522094..2db77cc9fc 100644
--- a/kogito-maven-plugin/pom.xml
+++ b/kogito-maven-plugin/pom.xml
@@ -35,6 +35,7 @@
<packaging>maven-plugin</packaging>
<name>Kogito :: Maven Plugin</name>
+ <description>Maven plugin for Kogito code generation from DMN, BPMN, DRL,
and PMML assets</description>
<properties>
<java.module.name>org.kie.kogito.maven.plugin</java.module.name>
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 92aff14dd5..ad31a9b885 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
@@ -75,12 +75,9 @@ public abstract class AbstractKieMojo extends AbstractMojo {
@Parameter(required = true, defaultValue =
"${project.build.sourceEncoding}")
protected String projectSourceEncoding;
- @Parameter(property = "kogito.jsonSchema.version", required = false)
//TODO double check this required false
+ @Parameter(property = "kogito.jsonSchema.version")
protected String jsonSchemaVersion;
- @Parameter(property = "kogito.codegen.ondemand", defaultValue = "false")
- protected boolean onDemand;
-
@Parameter(property = "kogito.sources.keep", defaultValue = "false")
protected boolean keepSources;
@@ -91,11 +88,10 @@ public abstract class AbstractKieMojo extends AbstractMojo {
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,
+ BuilderManager.BuildInfo buildInfo = new BuilderManager.BuildInfo(
+ projectFilesUris,
projectBaseDir.toPath(),
projectBuildOutputDirectory.toPath(),
mavenProject.getGroupId(),
@@ -106,7 +102,6 @@ public abstract class AbstractKieMojo extends AbstractMojo {
jsonSchemaVersion,
generatePartial,
persistence,
- onDemand,
keepSources,
mavenProject.getRuntimeClasspathElements(),
discoverFramework(),
@@ -117,16 +112,6 @@ public abstract class AbstractKieMojo extends AbstractMojo
{
}
}
- 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("===================================");
- }
-
CodeGenManagerUtil.Framework discoverFramework() {
if (MojoUtil.hasDependency(mavenProject,
CodeGenManagerUtil.Framework.QUARKUS)) {
return CodeGenManagerUtil.Framework.QUARKUS;
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 9cf101dd55..cfadc8c08b 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
@@ -25,15 +25,33 @@ import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.ResolutionScope;
+/**
+ * Maven Mojo for generating Kogito model code from various asset types.
+ * <p>
+ * This goal generates Java code from Kogito assets including:
+ * <ul>
+ * <li>Business Process Models (BPMN)</li>
+ * <li>Decision Models (DMN)</li>
+ * <li>Business Rules (DRL)</li>
+ * <li>Predictive Models (PMML)</li>
+ * </ul>
+ * <p>
+ * The generated code includes process implementations, decision services,
rule units,
+ * and prediction models that are required for runtime execution of Kogito
applications.
+ * <p>
+ * This mojo is bound to the {@code process-classes} phase. This is required
to ensure that
+ * the project's static classes written by the end user in the src directory
are compiled
+ * prior to code generation.
+ *
+ */
@Mojo(name = "generateModel",
requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME,
- defaultPhase = LifecyclePhase.COMPILE,
+ defaultPhase = LifecyclePhase.PROCESS_CLASSES,
threadSafe = true)
public class GenerateModelMojo extends AbstractKieMojo {
@Override
public void execute() throws MojoExecutionException {
- getLog().info("execute");
buildProject();
}
}
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 cd56c4ea81..3167f8e56c 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
@@ -30,12 +30,10 @@ 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.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mockStatic;
-import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
@MojoTest
@@ -43,15 +41,8 @@ class GenerateModelMojoTest {
@Test
@InjectMojo(goal = "generateModel", pom =
"src/test/resources/unit/generate-model/pom.xml")
- void generateModelWithOnDemand(GenerateModelMojo mojo) {
- commonSetup(mojo, true);
- commonGenerateModel(mojo);
- }
-
- @Test
- @InjectMojo(goal = "generateModel", pom =
"src/test/resources/unit/generate-model/pom.xml")
- void generateModelWithoutOnDemand(GenerateModelMojo mojo) {
- commonSetup(mojo, false);
+ void generateModel(GenerateModelMojo mojo) {
+ commonSetup(mojo);
commonGenerateModel(mojo);
}
@@ -67,8 +58,7 @@ class GenerateModelMojoTest {
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);
+ generateModelHelperMockedStatic.verify(() ->
GenerateModelHelper.generateModelFiles(any(GenerateModelHelper.GenerateModelFilesInfo.class)),
times(1));
compilerHelperMockedStatic.verify(() ->
CompilerHelper.compileAndDump(any(CompilerHelper.CompileInfo.class)), times(2));
persistenceGenerationHelperMockedStatic.verify(() ->
PersistenceGenerationHelper.generatePersistenceFiles(any(),
any(),
@@ -78,10 +68,9 @@ class GenerateModelMojoTest {
}
}
- private void commonSetup(GenerateModelMojo mojo, boolean onDemand) {
+ private void commonSetup(GenerateModelMojo mojo) {
mojo.projectBuildOutputDirectory = new
File(mojo.project.getModel().getBuild().getOutputDirectory());
mojo.projectBaseDir = mojo.project.getBasedir();
mojo.projectSourceEncoding = "UTF-8";
- mojo.onDemand = onDemand;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]