diff --git a/src/main/java/tech/jhipster/lite/generator/project/domain/GeneratorAction.java b/src/main/java/tech/jhipster/lite/generator/project/domain/GeneratorAction.java
index 11c4b0e0344..25a5111d1fe 100644
--- a/src/main/java/tech/jhipster/lite/generator/project/domain/GeneratorAction.java
+++ b/src/main/java/tech/jhipster/lite/generator/project/domain/GeneratorAction.java
@@ -59,8 +59,6 @@ private GeneratorAction() {}
public static final String USER_AND_AUTHORITY_ENTITIES_MYSQL = "user-and-authority-entities-mysql";
public static final String USER_AND_AUTHORITY_ENTITIES_MARIADB = "user-and-authority-entities-mariadb";
- public static final String FRONTEND_MAVEN_PLUGIN = "frontend-maven-plugin";
-
public static final String SPRINGBOOT_TOMCAT = "springboot-tomcat";
public static final String SPRINGBOOT_UNDERTOW = "springboot-undertow";
public static final String SPRINGBOOT_ACTUATOR = "springboot-actuator";
diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationService.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationService.java
index b59a4e280dc..140a655f3af 100644
--- a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationService.java
+++ b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationService.java
@@ -1,19 +1,20 @@
package tech.jhipster.lite.generator.server.javatool.frontendmaven.application;
import org.springframework.stereotype.Service;
-import tech.jhipster.lite.generator.project.domain.Project;
-import tech.jhipster.lite.generator.server.javatool.frontendmaven.domain.FrontendMavenService;
+import tech.jhipster.lite.generator.server.javatool.frontendmaven.domain.FrontendMavenModuleFactory;
+import tech.jhipster.lite.module.domain.JHipsterModule;
+import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties;
@Service
public class FrontendMavenApplicationService {
- private final FrontendMavenService frontendMavenService;
+ private final FrontendMavenModuleFactory factory;
- public FrontendMavenApplicationService(FrontendMavenService frontendMavenService) {
- this.frontendMavenService = frontendMavenService;
+ public FrontendMavenApplicationService() {
+ factory = new FrontendMavenModuleFactory();
}
- public void addFrontendMavenPlugin(Project project) {
- frontendMavenService.addFrontendMavenPlugin(project);
+ public JHipsterModule buildModule(JHipsterModuleProperties properties) {
+ return factory.buildModule(properties);
}
}
diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainService.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainService.java
deleted file mode 100644
index e03862015c5..00000000000
--- a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainService.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain;
-
-import static tech.jhipster.lite.common.domain.FileUtils.getPath;
-import static tech.jhipster.lite.generator.project.domain.Constants.MAIN_JAVA;
-import static tech.jhipster.lite.generator.project.domain.Constants.TECHNICAL_INFRASTRUCTURE_PRIMARY;
-import static tech.jhipster.lite.generator.project.domain.Constants.TEST_JAVA;
-import static tech.jhipster.lite.generator.project.domain.DefaultConfig.BASE_NAME;
-import static tech.jhipster.lite.generator.project.domain.DefaultConfig.PACKAGE_NAME;
-import static tech.jhipster.lite.generator.project.domain.DefaultConfig.PACKAGE_PATH;
-
-import java.util.List;
-import tech.jhipster.lite.error.domain.GeneratorException;
-import tech.jhipster.lite.generator.buildtool.generic.domain.BuildToolService;
-import tech.jhipster.lite.generator.buildtool.generic.domain.Plugin;
-import tech.jhipster.lite.generator.project.domain.Project;
-import tech.jhipster.lite.generator.project.domain.ProjectFile;
-import tech.jhipster.lite.generator.project.domain.ProjectRepository;
-
-public class FrontendMavenDomainService implements FrontendMavenService {
-
- private static final String SOURCE = "server/springboot/mvc/web/src";
- private static final String TEST = "server/springboot/mvc/web/test";
-
- private final BuildToolService buildToolService;
- private final ProjectRepository projectRepository;
-
- public FrontendMavenDomainService(BuildToolService buildToolService, ProjectRepository projectRepository) {
- this.buildToolService = buildToolService;
- this.projectRepository = projectRepository;
- }
-
- @Override
- public void addFrontendMavenPlugin(Project project) {
- List
- .of("node", "npm", "frontend-maven-plugin", "checksum-maven-plugin", "maven-antrun-plugin")
- .forEach(key -> addProperty(project, key));
-
- buildToolService.addPlugin(project, checksumMavenPlugin());
- buildToolService.addPlugin(project, mavenAntrunPlugin());
- buildToolService.addPlugin(project, frontendMavenPlugin());
-
- addRedirectionToWebappFiles(project);
- }
-
- private void addRedirectionToWebappFiles(Project project) {
- project.addDefaultConfig(PACKAGE_NAME);
- project.addDefaultConfig(BASE_NAME);
- String packageNamePath = project.getPackageNamePath().orElse(getPath(PACKAGE_PATH));
- String redirectionPath = getPath(TECHNICAL_INFRASTRUCTURE_PRIMARY, "redirection");
-
- projectRepository.template(
- ProjectFile
- .forProject(project)
- .withSource(SOURCE, "RedirectionResource.java")
- .withDestinationFolder(getPath(MAIN_JAVA, packageNamePath, redirectionPath))
- );
- projectRepository.template(
- ProjectFile
- .forProject(project)
- .withSource(TEST, "RedirectionResourceIT.java")
- .withDestinationFolder(getPath(TEST_JAVA, packageNamePath, redirectionPath))
- );
- }
-
- private Plugin frontendMavenPlugin() {
- return Plugin
- .builder()
- .groupId("com.github.eirslett")
- .artifactId("frontend-maven-plugin")
- .version("\\${frontend-maven-plugin.version}")
- .additionalElements(
- """
-
-
- install-node-and-npm
-
- install-node-and-npm
-
-
- \\${node.version}
- \\${npm.version}
-
-
-
- npm install
-
- npm
-
-
-
- build front
-
- npm
-
- generate-resources
-
- run build
-
- \\${project.version}
-
- false
-
-
-
- front test
-
- npm
-
- test
-
- run test
- false
-
-
-
- """
- )
- .build();
- }
-
- private Plugin mavenAntrunPlugin() {
- return Plugin
- .builder()
- .groupId("org.apache.maven.plugins")
- .artifactId("maven-antrun-plugin")
- .version("\\${maven-antrun-plugin.version}")
- .additionalElements(
- """
-
-
- eval-frontend-checksum
- generate-resources
-
- run
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
- """
- )
- .build();
- }
-
- private Plugin checksumMavenPlugin() {
- return Plugin
- .builder()
- .groupId("net.nicoulaj.maven.plugins")
- .artifactId("checksum-maven-plugin")
- .version("\\${checksum-maven-plugin.version}")
- .additionalElements(
- """
-
-
- create-pre-compiled-webapp-checksum
- generate-resources
-
- files
-
-
-
- create-compiled-webapp-checksum
-
- files
-
- compile
-
- checksums.csv.old
-
-
-
-
-
-
- \\${project.basedir}
-
- src/main/webapp/**/*.*
- target/classes/static/**/*.*
- package-lock.json
- package.json
- tsconfig.json
-
-
-
- false
- false
- false
-
- SHA-1
-
- true
- true
-
- """
- )
- .build();
- }
-
- private void addProperty(Project project, String key) {
- buildToolService
- .getVersion(project, key)
- .ifPresentOrElse(
- version -> buildToolService.addProperty(project, key + ".version", version),
- () -> {
- throw new GeneratorException("Version not found: " + key);
- }
- );
- }
-}
diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactory.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactory.java
new file mode 100644
index 00000000000..86a9d42c7c0
--- /dev/null
+++ b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactory.java
@@ -0,0 +1,192 @@
+package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain;
+
+import static tech.jhipster.lite.module.domain.JHipsterModule.*;
+
+import tech.jhipster.lite.error.domain.Assert;
+import tech.jhipster.lite.module.domain.JHipsterModule;
+import tech.jhipster.lite.module.domain.JHipsterSource;
+import tech.jhipster.lite.module.domain.javabuildplugin.JavaBuildPlugin;
+import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties;
+
+public class FrontendMavenModuleFactory {
+
+ private static final JHipsterSource SOURCE = from("server/springboot/mvc/web");
+ private static final JHipsterSource MAIN_SOURCE = SOURCE.append("src");
+ private static final JHipsterSource TEST_SOURCE = SOURCE.append("test");
+
+ private static final String REDIRECTION_PRIMARY = "technical/infrastructure/primary/redirection";
+
+ private static final String NODE_VERSION = "v16.16.0";
+ private static final String NPM_VERSION = "8.5.0";
+
+ public JHipsterModule buildModule(JHipsterModuleProperties properties) {
+ Assert.notNull("properties", properties);
+
+ String basePath = properties.basePackage().path();
+
+ //@formatter:off
+ return moduleBuilder(properties)
+ .javaDependencies()
+ .version(javaDependencyVersion("node", NODE_VERSION))
+ .version(javaDependencyVersion("npm", NPM_VERSION))
+ .and()
+ .javaBuildPlugins()
+ .plugin(checksumPlugin())
+ .plugin(antrunPlugin())
+ .plugin(frontendMavenPlugin())
+ .and()
+ .files()
+ .add(
+ MAIN_SOURCE.template("RedirectionResource.java"),
+ toSrcMainJava().append(basePath).append(REDIRECTION_PRIMARY).append("RedirectionResource.java")
+ )
+ .add(
+ TEST_SOURCE.template("RedirectionResourceIT.java"),
+ toSrcTestJava().append(basePath).append(REDIRECTION_PRIMARY).append("RedirectionResourceIT.java")
+ )
+ .and()
+ .build();
+ //@formatter:on
+ }
+
+ private JavaBuildPlugin checksumPlugin() {
+ return javaBuildPlugin()
+ .groupId("net.nicoulaj.maven.plugins")
+ .artifactId("checksum-maven-plugin")
+ .versionSlug("checksum-maven-plugin")
+ .additionalElements(
+ """
+
+
+ create-pre-compiled-webapp-checksum
+ generate-resources
+
+ files
+
+
+
+ create-compiled-webapp-checksum
+
+ files
+
+ compile
+
+ checksums.csv.old
+
+
+
+
+
+
+ ${project.basedir}
+
+ src/main/webapp/**/*.*
+ target/classes/static/**/*.*
+ package-lock.json
+ package.json
+ tsconfig.json
+
+
+
+ false
+ false
+ false
+
+ SHA-1
+
+ true
+ true
+
+ """
+ )
+ .build();
+ }
+
+ private JavaBuildPlugin antrunPlugin() {
+ return javaBuildPlugin()
+ .groupId("org.apache.maven.plugins")
+ .artifactId("maven-antrun-plugin")
+ .versionSlug("maven-antrun-plugin")
+ .additionalElements(
+ """
+
+
+ eval-frontend-checksum
+ generate-resources
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+ """
+ )
+ .build();
+ }
+
+ private JavaBuildPlugin frontendMavenPlugin() {
+ return javaBuildPlugin()
+ .groupId("com.github.eirslett")
+ .artifactId("frontend-maven-plugin")
+ .versionSlug("frontend-maven-plugin")
+ .additionalElements(
+ """
+
+
+ install-node-and-npm
+
+ install-node-and-npm
+
+
+ ${node.version}
+ ${npm.version}
+
+
+
+ npm install
+
+ npm
+
+
+
+ build front
+
+ npm
+
+ generate-resources
+
+ run build
+
+ ${project.version}
+
+ false
+
+
+
+ front test
+
+ npm
+
+ test
+
+ run test
+ false
+
+
+
+ """
+ )
+ .build();
+ }
+}
diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenService.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenService.java
deleted file mode 100644
index dd7d85c67e9..00000000000
--- a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenService.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain;
-
-import tech.jhipster.lite.generator.project.domain.Project;
-
-public interface FrontendMavenService {
- void addFrontendMavenPlugin(Project project);
-}
diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfiguration.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfiguration.java
deleted file mode 100644
index 530e7c83bb9..00000000000
--- a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfiguration.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package tech.jhipster.lite.generator.server.javatool.frontendmaven.infrastructure.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import tech.jhipster.lite.generator.buildtool.generic.domain.BuildToolService;
-import tech.jhipster.lite.generator.project.domain.ProjectRepository;
-import tech.jhipster.lite.generator.server.javatool.frontendmaven.domain.FrontendMavenDomainService;
-import tech.jhipster.lite.generator.server.javatool.frontendmaven.domain.FrontendMavenService;
-
-@Configuration
-public class FrontendMavenBeanConfiguration {
-
- private final BuildToolService buildToolService;
- private final ProjectRepository projectRepository;
-
- public FrontendMavenBeanConfiguration(BuildToolService buildToolService, ProjectRepository projectRepository) {
- this.buildToolService = buildToolService;
- this.projectRepository = projectRepository;
- }
-
- @Bean
- public FrontendMavenService frontendMavenService() {
- return new FrontendMavenDomainService(buildToolService, projectRepository);
- }
-}
diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/FrontendMavenModuleConfiguration.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/FrontendMavenModuleConfiguration.java
new file mode 100644
index 00000000000..d90ef5f3d77
--- /dev/null
+++ b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/FrontendMavenModuleConfiguration.java
@@ -0,0 +1,23 @@
+package tech.jhipster.lite.generator.server.javatool.frontendmaven.infrastructure.primary;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenApplicationService;
+import tech.jhipster.lite.module.domain.properties.JHipsterModulePropertiesDefinition;
+import tech.jhipster.lite.module.infrastructure.primary.JHipsterModuleApiDoc;
+import tech.jhipster.lite.module.infrastructure.primary.JHipsterModuleResource;
+
+@Configuration
+class FrontendMavenModuleConfiguration {
+
+ @Bean
+ JHipsterModuleResource frontendMavenModule(FrontendMavenApplicationService frontendMaven) {
+ return JHipsterModuleResource
+ .builder()
+ .legacyUrl("/api/developer-tools/frontend-maven-plugin")
+ .slug("frontend-maven-plugin")
+ .propertiesDefinition(JHipsterModulePropertiesDefinition.builder().addBasePackage().addProjectBaseName().addIndentation().build())
+ .apiDoc(new JHipsterModuleApiDoc("Frontend Maven Plugin", "Add Frontend Maven Plugin"))
+ .factory(frontendMaven::buildModule);
+ }
+}
diff --git a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResource.java b/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResource.java
deleted file mode 100644
index 864f40c04af..00000000000
--- a/src/main/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResource.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package tech.jhipster.lite.generator.server.javatool.frontendmaven.infrastructure.primary.rest;
-
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.responses.ApiResponse;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import tech.jhipster.lite.generator.project.domain.GeneratorAction;
-import tech.jhipster.lite.generator.project.domain.Project;
-import tech.jhipster.lite.generator.project.infrastructure.primary.dto.ProjectDTO;
-import tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenApplicationService;
-import tech.jhipster.lite.technical.infrastructure.primary.annotation.GeneratorStep;
-
-@RestController
-@RequestMapping("/api/developer-tools/frontend-maven-plugin")
-@Tag(name = "Frontend Maven Plugin")
-class FrontendMavenResource {
-
- private final FrontendMavenApplicationService frontendMavenApplicationService;
-
- public FrontendMavenResource(FrontendMavenApplicationService frontendMavenApplicationService) {
- this.frontendMavenApplicationService = frontendMavenApplicationService;
- }
-
- @Operation(summary = "Init", description = "Add Frontend Maven Plugin")
- @ApiResponse(responseCode = "500", description = "An error occurred while adding Frontend Maven Plugin")
- @PostMapping
- @GeneratorStep(id = GeneratorAction.FRONTEND_MAVEN_PLUGIN)
- public void addFrontendMavenPlugin(@RequestBody ProjectDTO projectDTO) {
- Project project = ProjectDTO.toProject(projectDTO);
- frontendMavenApplicationService.addFrontendMavenPlugin(project);
- }
-}
diff --git a/src/main/java/tech/jhipster/lite/module/domain/JHipsterModule.java b/src/main/java/tech/jhipster/lite/module/domain/JHipsterModule.java
index cdf36656fca..30fb62d1603 100644
--- a/src/main/java/tech/jhipster/lite/module/domain/JHipsterModule.java
+++ b/src/main/java/tech/jhipster/lite/module/domain/JHipsterModule.java
@@ -23,6 +23,7 @@
import tech.jhipster.lite.module.domain.javadependency.JHipsterModuleJavaDependencies.JHipsterModuleJavaDependenciesBuilder;
import tech.jhipster.lite.module.domain.javadependency.JavaDependency;
import tech.jhipster.lite.module.domain.javadependency.JavaDependency.JavaDependencyGroupIdBuilder;
+import tech.jhipster.lite.module.domain.javadependency.JavaDependencyVersion;
import tech.jhipster.lite.module.domain.javaproperties.JHipsterModuleSpringProperties;
import tech.jhipster.lite.module.domain.javaproperties.JHipsterModuleSpringProperties.JHipsterModuleSpringPropertiesBuilder;
import tech.jhipster.lite.module.domain.javaproperties.PropertyKey;
@@ -113,6 +114,10 @@ public static JavaDependencyGroupIdBuilder javaDependency() {
return JavaDependency.builder();
}
+ public static JavaDependencyVersion javaDependencyVersion(String slug, String version) {
+ return new JavaDependencyVersion(slug, version);
+ }
+
public static JavaBuildPluginGroupIdBuilder javaBuildPlugin() {
return JavaBuildPlugin.builder();
}
diff --git a/src/main/java/tech/jhipster/lite/module/domain/javadependency/JHipsterModuleJavaDependencies.java b/src/main/java/tech/jhipster/lite/module/domain/javadependency/JHipsterModuleJavaDependencies.java
index dfc37ebd16b..21c90ff9d8d 100644
--- a/src/main/java/tech/jhipster/lite/module/domain/javadependency/JHipsterModuleJavaDependencies.java
+++ b/src/main/java/tech/jhipster/lite/module/domain/javadependency/JHipsterModuleJavaDependencies.java
@@ -2,20 +2,25 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.function.Function;
import java.util.stream.Stream;
import tech.jhipster.lite.error.domain.Assert;
import tech.jhipster.lite.module.domain.JHipsterModule.JHipsterModuleBuilder;
import tech.jhipster.lite.module.domain.javabuild.ArtifactId;
import tech.jhipster.lite.module.domain.javabuild.GroupId;
import tech.jhipster.lite.module.domain.javabuild.VersionSlug;
+import tech.jhipster.lite.module.domain.javabuild.command.JavaBuildCommand;
import tech.jhipster.lite.module.domain.javabuild.command.JavaBuildCommands;
+import tech.jhipster.lite.module.domain.javabuild.command.SetVersion;
public class JHipsterModuleJavaDependencies {
+ private final Collection versions;
private final Collection dependenciesManagement;
private final Collection dependencies;
private JHipsterModuleJavaDependencies(JHipsterModuleJavaDependenciesBuilder builder) {
+ versions = builder.versions;
dependenciesManagement = builder.dependenciesManagement;
dependencies = builder.dependencies;
}
@@ -29,13 +34,23 @@ public JavaBuildCommands buildChanges(CurrentJavaDependenciesVersions currentVer
Assert.notNull("projectDependencies", projectDependencies);
return Stream
- .concat(
+ .of(
+ settedVersionsCommands(),
dependenciesManagementChanges(currentVersions, projectDependencies),
dependenciesChanges(currentVersions, projectDependencies)
)
+ .flatMap(Function.identity())
.reduce(JavaBuildCommands.EMPTY, JavaBuildCommands::merge);
}
+ private Stream settedVersionsCommands() {
+ return Stream.of(new JavaBuildCommands(versions.stream().map(toSetVersionCommand()).toList()));
+ }
+
+ private Function toSetVersionCommand() {
+ return (Function) SetVersion::new;
+ }
+
private Stream dependenciesManagementChanges(
CurrentJavaDependenciesVersions currentVersions,
ProjectJavaDependencies projectDependencies
@@ -53,6 +68,7 @@ private Stream dependenciesChanges(
public static class JHipsterModuleJavaDependenciesBuilder {
private final JHipsterModuleBuilder module;
+ private final Collection versions = new ArrayList<>();
private final Collection dependencies = new ArrayList<>();
private final Collection dependenciesManagement = new ArrayList<>();
@@ -80,6 +96,14 @@ public JHipsterModuleJavaDependenciesBuilder dependency(JavaDependency dependenc
return this;
}
+ public JHipsterModuleJavaDependenciesBuilder version(JavaDependencyVersion version) {
+ Assert.notNull("version", version);
+
+ versions.add(version);
+
+ return this;
+ }
+
public JHipsterModuleJavaDependenciesBuilder dependencyManagement(JavaDependency dependency) {
Assert.notNull("dependency", dependency);
diff --git a/src/main/resources/generator/dependencies/pom.xml b/src/main/resources/generator/dependencies/pom.xml
index 7a29b6cb7bf..3e8079340b4 100644
--- a/src/main/resources/generator/dependencies/pom.xml
+++ b/src/main/resources/generator/dependencies/pom.xml
@@ -21,8 +21,6 @@
3.1.3
1.6.9
1.16.2
- v16.15.0
- 8.5.0
1.12.1
1.11
3.1.0
diff --git a/src/test/features/frontend-maven.feature b/src/test/features/frontend-maven.feature
new file mode 100644
index 00000000000..b267e81092f
--- /dev/null
+++ b/src/test/features/frontend-maven.feature
@@ -0,0 +1,8 @@
+Feature: Frontend maven module
+
+ Scenario: Should apply frontend maven module
+ When I apply "frontend-maven-plugin" module to default project with maven file
+ | packageName | tech.jhipster.chips |
+ | baseName | jhipster |
+ Then I should have files in "src/main/java/tech/jhipster/chips/technical/infrastructure/primary/redirection"
+ | RedirectionResource.java |
diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationServiceIT.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationServiceIT.java
deleted file mode 100644
index be8de959921..00000000000
--- a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenApplicationServiceIT.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package tech.jhipster.lite.generator.server.javatool.frontendmaven.application;
-
-import static tech.jhipster.lite.TestUtils.tmpProjectWithPomXml;
-import static tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenAssert.assertChecksumMavenPlugin;
-import static tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenAssert.assertFrontendMavenPlugin;
-import static tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenAssert.assertMavenAntrunPlugin;
-import static tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenAssert.assertRedirectionFiles;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import tech.jhipster.lite.IntegrationTest;
-import tech.jhipster.lite.generator.project.domain.Project;
-
-@IntegrationTest
-class FrontendMavenApplicationServiceIT {
-
- @Autowired
- FrontendMavenApplicationService frontendMavenApplicationService;
-
- @Test
- void shouldAddFrontendMavenPlugin() {
- Project project = tmpProjectWithPomXml();
-
- frontendMavenApplicationService.addFrontendMavenPlugin(project);
-
- assertChecksumMavenPlugin(project);
- assertMavenAntrunPlugin(project);
- assertFrontendMavenPlugin(project);
- assertRedirectionFiles(project);
- }
-}
diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenAssert.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenAssert.java
deleted file mode 100644
index df01032ebd1..00000000000
--- a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/application/FrontendMavenAssert.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package tech.jhipster.lite.generator.server.javatool.frontendmaven.application;
-
-import static tech.jhipster.lite.TestUtils.assertFileContent;
-import static tech.jhipster.lite.TestUtils.assertFileExist;
-import static tech.jhipster.lite.common.domain.FileUtils.getPath;
-import static tech.jhipster.lite.generator.project.domain.Constants.MAIN_JAVA;
-import static tech.jhipster.lite.generator.project.domain.Constants.POM_XML;
-import static tech.jhipster.lite.generator.project.domain.Constants.TECHNICAL_INFRASTRUCTURE_PRIMARY;
-import static tech.jhipster.lite.generator.project.domain.Constants.TEST_JAVA;
-
-import java.util.List;
-import tech.jhipster.lite.generator.project.domain.DefaultConfig;
-import tech.jhipster.lite.generator.project.domain.Project;
-
-public class FrontendMavenAssert {
-
- private FrontendMavenAssert() {}
-
- public static void assertChecksumMavenPlugin(Project project) {
- assertFileContent(project, POM_XML, "");
- assertFileContent(
- project,
- POM_XML,
- List.of(
- "",
- "net.nicoulaj.maven.plugins",
- "checksum-maven-plugin",
- "${checksum-maven-plugin.version}",
- ""
- )
- );
- }
-
- public static void assertMavenAntrunPlugin(Project project) {
- assertFileContent(project, POM_XML, "");
- assertFileContent(
- project,
- POM_XML,
- List.of(
- "",
- "org.apache.maven.plugins",
- "maven-antrun-plugin",
- "${maven-antrun-plugin.version}",
- ""
- )
- );
- }
-
- public static void assertFrontendMavenPlugin(Project project) {
- assertFileContent(project, POM_XML, "");
- assertFileContent(project, POM_XML, "");
- assertFileContent(project, POM_XML, "");
- assertFileContent(
- project,
- POM_XML,
- List.of(
- "",
- "com.github.eirslett",
- "frontend-maven-plugin",
- "${frontend-maven-plugin.version}",
- ""
- )
- );
- }
-
- public static void assertRedirectionFiles(Project project) {
- String path = getPath(
- MAIN_JAVA,
- project.getPackageNamePath().orElse(DefaultConfig.PACKAGE_PATH),
- TECHNICAL_INFRASTRUCTURE_PRIMARY,
- "redirection"
- );
- String testPath = getPath(
- TEST_JAVA,
- project.getPackageNamePath().orElse(DefaultConfig.PACKAGE_PATH),
- TECHNICAL_INFRASTRUCTURE_PRIMARY,
- "redirection"
- );
-
- assertFileExist(project, path, "RedirectionResource.java");
- assertFileExist(project, testPath, "RedirectionResourceIT.java");
- }
-}
diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainServiceTest.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainServiceTest.java
deleted file mode 100644
index 719297c582f..00000000000
--- a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenDomainServiceTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain;
-
-import static org.mockito.Mockito.*;
-import static tech.jhipster.lite.TestUtils.*;
-
-import java.util.Optional;
-import org.assertj.core.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import tech.jhipster.lite.UnitTest;
-import tech.jhipster.lite.error.domain.GeneratorException;
-import tech.jhipster.lite.generator.buildtool.generic.domain.BuildToolService;
-import tech.jhipster.lite.generator.buildtool.generic.domain.Plugin;
-import tech.jhipster.lite.generator.project.domain.Project;
-import tech.jhipster.lite.generator.project.domain.ProjectFile;
-import tech.jhipster.lite.generator.project.domain.ProjectRepository;
-
-@UnitTest
-@ExtendWith(MockitoExtension.class)
-class FrontendMavenDomainServiceTest {
-
- @Mock
- BuildToolService buildToolService;
-
- @Mock
- ProjectRepository projectRepository;
-
- @InjectMocks
- FrontendMavenDomainService frontendMavenDomainService;
-
- @Test
- void shouldAddFrontendMavenPlugin() {
- Project project = tmpProjectWithPomXml();
- when(buildToolService.getVersion(any(Project.class), anyString())).thenReturn(Optional.of("0.0.0"));
-
- frontendMavenDomainService.addFrontendMavenPlugin(project);
-
- verify(buildToolService, times(5)).addProperty(any(Project.class), anyString(), anyString());
- verify(buildToolService, times(3)).addPlugin(any(Project.class), any(Plugin.class));
- verify(projectRepository, times(2)).template(any(ProjectFile.class));
- }
-
- @Test
- void shouldNotAddFrontendMavenPlugin() {
- Project project = tmpProjectWithPomXml();
-
- Assertions
- .assertThatThrownBy(() -> frontendMavenDomainService.addFrontendMavenPlugin(project))
- .isExactlyInstanceOf(GeneratorException.class);
- }
-}
diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactoryTest.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactoryTest.java
new file mode 100644
index 00000000000..0c46ce3ebc5
--- /dev/null
+++ b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/domain/FrontendMavenModuleFactoryTest.java
@@ -0,0 +1,167 @@
+package tech.jhipster.lite.generator.server.javatool.frontendmaven.domain;
+
+import static tech.jhipster.lite.module.infrastructure.secondary.JHipsterModulesAssertions.*;
+
+import org.junit.jupiter.api.Test;
+import tech.jhipster.lite.TestFileUtils;
+import tech.jhipster.lite.UnitTest;
+import tech.jhipster.lite.module.domain.JHipsterModule;
+import tech.jhipster.lite.module.domain.JHipsterModulesFixture;
+import tech.jhipster.lite.module.domain.properties.JHipsterModuleProperties;
+
+@UnitTest
+class FrontendMavenModuleFactoryTest {
+
+ private static final FrontendMavenModuleFactory factory = new FrontendMavenModuleFactory();
+
+ @Test
+ void shouldBuildModule() {
+ JHipsterModuleProperties properties = JHipsterModulesFixture
+ .propertiesBuilder(TestFileUtils.tmpDirForTest())
+ .basePackage("com.jhipster.test")
+ .projectBaseName("myapp")
+ .build();
+
+ JHipsterModule module = factory.buildModule(properties);
+
+ assertThatModuleWithFiles(module, pomFile())
+ .createFile("pom.xml")
+ .containing(" ")
+ .containing(" ")
+ .containing(
+ """
+
+ net.nicoulaj.maven.plugins
+ checksum-maven-plugin
+ ${checksum-maven-plugin.version}
+
+
+ create-pre-compiled-webapp-checksum
+ generate-resources
+
+ files
+
+
+
+ create-compiled-webapp-checksum
+
+ files
+
+ compile
+
+ checksums.csv.old
+
+
+
+
+
+
+ ${project.basedir}
+
+ src/main/webapp/**/*.*
+ target/classes/static/**/*.*
+ package-lock.json
+ package.json
+ tsconfig.json
+
+
+
+ false
+ false
+ false
+
+ SHA-1
+
+ true
+ true
+
+
+ """
+ )
+ .containing(
+ """
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+ ${maven-antrun-plugin.version}
+
+
+ eval-frontend-checksum
+ generate-resources
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+ """
+ )
+ .containing(
+ """
+
+ com.github.eirslett
+ frontend-maven-plugin
+ ${frontend-maven-plugin.version}
+
+
+ install-node-and-npm
+
+ install-node-and-npm
+
+
+ ${node.version}
+ ${npm.version}
+
+
+
+ npm install
+
+ npm
+
+
+
+ build front
+
+ npm
+
+ generate-resources
+
+ run build
+
+ ${project.version}
+
+ false
+
+
+
+ front test
+
+ npm
+
+ test
+
+ run test
+ false
+
+
+
+
+ """
+ )
+ .and()
+ .createJavaSources("com/jhipster/test/technical/infrastructure/primary/redirection/RedirectionResource.java")
+ .createJavaTests("com/jhipster/test/technical/infrastructure/primary/redirection/RedirectionResourceIT.java");
+ }
+}
diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfigurationIT.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfigurationIT.java
deleted file mode 100644
index de032142ea9..00000000000
--- a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/config/FrontendMavenBeanConfigurationIT.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package tech.jhipster.lite.generator.server.javatool.frontendmaven.infrastructure.config;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import tech.jhipster.lite.IntegrationTest;
-import tech.jhipster.lite.generator.server.javatool.frontendmaven.domain.FrontendMavenDomainService;
-
-@IntegrationTest
-class FrontendMavenBeanConfigurationIT {
-
- @Autowired
- ApplicationContext applicationContext;
-
- @Test
- void shouldGetBean() {
- assertThat(applicationContext.getBean("frontendMavenService")).isNotNull().isInstanceOf(FrontendMavenDomainService.class);
- }
-}
diff --git a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResourceIT.java b/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResourceIT.java
deleted file mode 100644
index f0d1e171967..00000000000
--- a/src/test/java/tech/jhipster/lite/generator/server/javatool/frontendmaven/infrastructure/primary/rest/FrontendMavenResourceIT.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package tech.jhipster.lite.generator.server.javatool.frontendmaven.infrastructure.primary.rest;
-
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-import static tech.jhipster.lite.generator.server.javatool.frontendmaven.application.FrontendMavenAssert.*;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.http.MediaType;
-import org.springframework.test.web.servlet.MockMvc;
-import tech.jhipster.lite.IntegrationTest;
-import tech.jhipster.lite.TestFileUtils;
-import tech.jhipster.lite.TestUtils;
-import tech.jhipster.lite.generator.project.domain.Project;
-import tech.jhipster.lite.generator.project.infrastructure.primary.dto.ProjectDTO;
-import tech.jhipster.lite.module.infrastructure.secondary.TestJHipsterModules;
-
-@IntegrationTest
-@AutoConfigureMockMvc
-class FrontendMavenResourceIT {
-
- @Autowired
- private MockMvc mockMvc;
-
- @Test
- void shouldAddFrontendMavenPlugin() throws Exception {
- ProjectDTO projectDTO = TestUtils.readFileToObject("json/chips.json", ProjectDTO.class).folder(TestFileUtils.tmpDirForTest());
- Project project = ProjectDTO.toProject(projectDTO);
- TestJHipsterModules.applyInit(project);
- TestJHipsterModules.applyMaven(project);
-
- mockMvc
- .perform(
- post("/api/developer-tools/frontend-maven-plugin")
- .contentType(MediaType.APPLICATION_JSON)
- .content(TestUtils.convertObjectToJsonBytes(projectDTO))
- )
- .andExpect(status().isOk());
-
- assertChecksumMavenPlugin(project);
- assertMavenAntrunPlugin(project);
- assertFrontendMavenPlugin(project);
- }
-}
diff --git a/src/test/java/tech/jhipster/lite/module/domain/JHipsterModulesFixture.java b/src/test/java/tech/jhipster/lite/module/domain/JHipsterModulesFixture.java
index f2960662794..991ce5444b0 100644
--- a/src/test/java/tech/jhipster/lite/module/domain/JHipsterModulesFixture.java
+++ b/src/test/java/tech/jhipster/lite/module/domain/JHipsterModulesFixture.java
@@ -65,6 +65,7 @@ public static JHipsterModule module() {
.and()
.and()
.javaDependencies()
+ .version(new JavaDependencyVersion("dummy-dependency", "4.5.8"))
.dependency(groupId("org.springframework.boot"), artifactId("spring-boot-starter"))
.dependency(groupId("org.zalando"), artifactId("problem-spring-web"), versionSlug("problem-spring"))
.dependency(groupId("io.jsonwebtoken"), artifactId("jjwt-api"), versionSlug("jjwt.version"))
diff --git a/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/FileSystemJHipsterModulesRepositoryTest.java b/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/FileSystemJHipsterModulesRepositoryTest.java
index 29ba3a52dca..8b51e9ef53f 100644
--- a/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/FileSystemJHipsterModulesRepositoryTest.java
+++ b/src/test/java/tech/jhipster/lite/module/infrastructure/secondary/FileSystemJHipsterModulesRepositoryTest.java
@@ -38,6 +38,7 @@ void shouldApplyModule() {
.containing("com.test.myapp")
.and()
.createFile("pom.xml")
+ .containing("4.5.8")
.containing(
"""