clean code and update to version 7.38.0 of drools

This commit is contained in:
Nicolas Héron 2020-06-24 10:28:25 +02:00
commit fd551f7af8
9 changed files with 85 additions and 118 deletions

View file

@ -7,6 +7,8 @@ import org.chtijbug.drools.console.service.util.AppContext;
import org.drools.workbench.models.datamodel.rule.InterpolationVariable; import org.drools.workbench.models.datamodel.rule.InterpolationVariable;
import org.drools.workbench.models.guided.template.backend.RuleTemplateModelXMLPersistenceImpl; import org.drools.workbench.models.guided.template.backend.RuleTemplateModelXMLPersistenceImpl;
import org.drools.workbench.models.guided.template.shared.TemplateModel; import org.drools.workbench.models.guided.template.shared.TemplateModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -21,6 +23,8 @@ import java.util.Map;
@DependsOn("applicationContext") @DependsOn("applicationContext")
public class GuidedRuleTemplateExcelService { public class GuidedRuleTemplateExcelService {
private static final Logger logger = LoggerFactory.getLogger(GuidedRuleTemplateExcelService.class);
@Value("${adminConsole.tmpdir}") @Value("${adminConsole.tmpdir}")
public String tmpDir; public String tmpDir;
@ -29,7 +33,6 @@ public class GuidedRuleTemplateExcelService {
private UserConnectedService userConnectedService; private UserConnectedService userConnectedService;
private String assetContent;
public GuidedRuleTemplateExcelService() { public GuidedRuleTemplateExcelService() {
this.kieRepositoryService = AppContext.getApplicationContext().getBean(KieRepositoryService.class); this.kieRepositoryService = AppContext.getApplicationContext().getBean(KieRepositoryService.class);
@ -39,20 +42,18 @@ public class GuidedRuleTemplateExcelService {
} }
public String getAssetContent() { public String getAssetContent() {
assetContent = kieRepositoryService.getAssetSource(config.getKiewbUrl(), return kieRepositoryService.getAssetSource(config.getKiewbUrl(),
userConnectedService.getUserConnected().getUserName(), userConnectedService.getUserConnected().getUserName(),
userConnectedService.getUserConnected().getUserPassword(), userConnectedService.getUserConnected().getUserPassword(),
userConnectedService.getSpace(), userConnectedService.getSpace(),
userConnectedService.getProject(), userConnectedService.getProject(),
userConnectedService.getAsset()); userConnectedService.getAsset());
return assetContent;
} }
public List<HashMap<String, Object>> importExcel(InputStream inputStream) throws IOException { public List<HashMap<String, Object>> importExcel(InputStream inputStream) throws IOException {
List<HashMap<String, Object>> result = null; List<HashMap<String, Object>> result = null;
Workbook workbook = null;
try { try (Workbook workbook = WorkbookFactory.create(inputStream)) {
workbook = WorkbookFactory.create(inputStream);
DataFormatter dataFormatter = new DataFormatter(); DataFormatter dataFormatter = new DataFormatter();
result = new ArrayList<>(); result = new ArrayList<>();
for (Sheet sheet : workbook) { for (Sheet sheet : workbook) {
@ -69,12 +70,6 @@ public class GuidedRuleTemplateExcelService {
} }
} }
} }
} catch (IOException e) {
throw e;
} finally {
if (workbook != null) {
workbook.close();
}
} }
return result; return result;
} }
@ -83,12 +78,7 @@ public class GuidedRuleTemplateExcelService {
//Récupération des objets JAVA //Récupération des objets JAVA
String assetContent = kieRepositoryService.getAssetSource(config.getKiewbUrl(), String assetContent = getAssetContent();
userConnectedService.getUserConnected().getUserName(),
userConnectedService.getUserConnected().getUserPassword(),
userConnectedService.getSpace(),
userConnectedService.getProject(),
userConnectedService.getAsset());
TemplateModel model = RuleTemplateModelXMLPersistenceImpl.getInstance().unmarshal(assetContent); TemplateModel model = RuleTemplateModelXMLPersistenceImpl.getInstance().unmarshal(assetContent);
InterpolationVariable[] variablesList = model.getInterpolationVariablesList(); InterpolationVariable[] variablesList = model.getInterpolationVariablesList();
@ -106,9 +96,7 @@ public class GuidedRuleTemplateExcelService {
k++; k++;
} }
} }
try (Workbook workbook = new XSSFWorkbook()) {
Workbook workbook = new XSSFWorkbook();
CreationHelper createHelper = workbook.getCreationHelper();
Sheet sheet = workbook.createSheet(nameTemplate); Sheet sheet = workbook.createSheet(nameTemplate);
Font headerFont = workbook.createFont(); Font headerFont = workbook.createFont();
@ -120,7 +108,7 @@ public class GuidedRuleTemplateExcelService {
Row headerRow = sheet.createRow(0); Row headerRow = sheet.createRow(0);
if (rows != null && rows.size() != 0) { if (rows != null && !rows.isEmpty()) {
int columnIndex = 0; int columnIndex = 0;
for (Map.Entry<String, Object> t : rows.get(0).entrySet()) { for (Map.Entry<String, Object> t : rows.get(0).entrySet()) {
Cell cell = headerRow.createCell(columnIndex); Cell cell = headerRow.createCell(columnIndex);
@ -144,29 +132,16 @@ public class GuidedRuleTemplateExcelService {
} }
} }
ByteArrayOutputStream bos = new ByteArrayOutputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
FileOutputStream fileOutputStream = new FileOutputStream(tmpDir + "/" + nameTemplate + ".xlsx"); FileOutputStream fileOutputStream = new FileOutputStream(tmpDir + "/" + nameTemplate + ".xlsx");
workbook.write(fileOutputStream); workbook.write(fileOutputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
workbook.write(bos); workbook.write(bos);
} catch (IOException e) {
e.printStackTrace();
}
byte[] barray = bos.toByteArray(); byte[] barray = bos.toByteArray();
ByteArrayInputStream is = new ByteArrayInputStream(barray); return new ByteArrayInputStream(barray);
try {
workbook.close();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); logger.error("exportExcel", e);
} }
return null;
return is;
} }
} }

View file

@ -17,6 +17,8 @@ import org.chtijbug.drools.proxy.persistence.repository.ContainerRuntimeReposito
import org.chtijbug.drools.proxy.persistence.repository.ProjectRepository; import org.chtijbug.drools.proxy.persistence.repository.ProjectRepository;
import org.chtijbug.drools.proxy.persistence.repository.RuntimeRepository; import org.chtijbug.drools.proxy.persistence.repository.RuntimeRepository;
import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectResponse; import org.chtijbug.guvnor.server.jaxrs.model.PlatformProjectResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -24,14 +26,15 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import static com.google.common.base.Throwables.propagate;
@Service @Service
@DependsOn("applicationContext") @DependsOn("applicationContext")
public class ProjectPersistService { public class ProjectPersistService {
public static String PROJECT = "4"; private static final Logger logger = LoggerFactory.getLogger(ProjectPersistService.class);
private static String projectVariable = "4";
@Autowired @Autowired
private ProjectRepository projectRepository; private ProjectRepository projectRepository;
@ -59,13 +62,8 @@ public class ProjectPersistService {
} }
public static String getPROJECT() {
return PROJECT;
}
public static void setPROJECT(String PROJECT) {
ProjectPersistService.PROJECT = PROJECT;
}
public void saveIfnotExist(List<PlatformProjectResponse> platformProjectResponses) { public void saveIfnotExist(List<PlatformProjectResponse> platformProjectResponses) {
@ -90,13 +88,13 @@ public class ProjectPersistService {
} }
} }
public HashMap<String, ProjectPersist> getProjectsSession() { public Map<String, ProjectPersist> getProjectsSession() {
return (HashMap<String, ProjectPersist>) VaadinSession.getCurrent().getAttribute(PROJECT); return (Map<String, ProjectPersist>) VaadinSession.getCurrent().getAttribute(projectVariable);
} }
public void addProjectToSession(ProjectPersist projectPersist, boolean isModifiable) { public void addProjectToSession(ProjectPersist projectPersist, boolean isModifiable) {
HashMap<String, ProjectPersist> projectPersists = getProjectsSession(); Map<String, ProjectPersist> projectPersists = getProjectsSession();
if (projectPersists == null) { if (projectPersists == null) {
projectPersists = new HashMap<>(); projectPersists = new HashMap<>();
@ -112,7 +110,7 @@ public class ProjectPersistService {
} }
} }
VaadinSession.getCurrent().setAttribute(PROJECT, projectPersists); VaadinSession.getCurrent().setAttribute(projectVariable, projectPersists);
} }
public boolean associate(ProjectPersist projectPersist, List<RuntimePersist> runtimePersists) { public boolean associate(ProjectPersist projectPersist, List<RuntimePersist> runtimePersists) {
@ -120,12 +118,8 @@ public class ProjectPersistService {
projectPersist.setContainerID(projectPersist.getDeploymentName() + "-" + projectPersist.getProjectName()); projectPersist.setContainerID(projectPersist.getDeploymentName() + "-" + projectPersist.getProjectName());
projectPersist.getServerNames().clear(); projectPersist.getServerNames().clear();
for (RuntimePersist runtimePersist : runtimePersists) { for (RuntimePersist runtimePersist : runtimePersists) {
List<String> names = new ArrayList<String>(); List<String> names = new ArrayList<>();
names.add(runtimePersist.getServerName()); names.add(runtimePersist.getServerName());
List<ProjectPersist> projectPersists = projectRepository.findByServerNamesInAndDeploymentName(names, projectPersist.getDeploymentName());
//if (projectPersists.size() != 0) {
// return false;
// }
projectPersist.getServerNames().add(runtimePersist.getServerName()); projectPersist.getServerNames().add(runtimePersist.getServerName());
ContainerPojoPersist existingContainer = containerRepository.findByServerNameAndContainerId(runtimePersist.getServerName(), projectPersist.getContainerID()); ContainerPojoPersist existingContainer = containerRepository.findByServerNameAndContainerId(runtimePersist.getServerName(), projectPersist.getContainerID());
if (existingContainer == null) { if (existingContainer == null) {
@ -175,6 +169,7 @@ public class ProjectPersistService {
UserConnected userConnected = userConnectedService.getUserConnected(); UserConnected userConnected = userConnectedService.getUserConnected();
Thread thread = new Thread() { Thread thread = new Thread() {
@Override
public void run() { public void run() {
JobStatus result = kieRepositoryService.buildProject(config.getKiewbUrl(), userConnected.getUserName(), JobStatus result = kieRepositoryService.buildProject(config.getKiewbUrl(), userConnected.getUserName(),
@ -187,11 +182,10 @@ public class ProjectPersistService {
executeWrite(url, username, password, workOnGoingView, result.getJobId(), ui); executeWrite(url, username, password, workOnGoingView, result.getJobId(), ui);
// ContainerPojoPersist toto = containerRepository.findByServerNameAndContainerId(projectPersist.getContainerID());
for (String serverName : projectPersist.getServerNames()) { for (String serverName : projectPersist.getServerNames()) {
List<ContainerRuntimePojoPersist> existingContainers = containerRuntimeRepository.findByServerNameAndContainerId(serverName, projectPersist.getContainerID()); List<ContainerRuntimePojoPersist> existingContainers = containerRuntimeRepository.findByServerNameAndContainerId(serverName, projectPersist.getContainerID());
if (existingContainers.size() > 0) { if (!existingContainers.isEmpty()) {
for (ContainerRuntimePojoPersist containerRuntimePojoPersist : existingContainers) { for (ContainerRuntimePojoPersist containerRuntimePojoPersist : existingContainers) {
containerRuntimePojoPersist.setStatus(ContainerRuntimePojoPersist.STATUS.TODEPLOY.name()); containerRuntimePojoPersist.setStatus(ContainerRuntimePojoPersist.STATUS.TODEPLOY.name());
containerRuntimeRepository.save(containerRuntimePojoPersist); containerRuntimeRepository.save(containerRuntimePojoPersist);
@ -236,13 +230,10 @@ public class ProjectPersistService {
this.wait(1000); this.wait(1000);
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
propagate(e); logger.error("executeWrite",e);
Thread.currentThread().interrupt();
}
} }
} /*else if("RESOURCE_NOT_EXIST".equals(jobStatus.getStatus())||
"SERVER_ERROR".equals(jobStatus.getStatus())||
"FAIL".equals(jobStatus.getStatus())){
isJobDone = "ERROR";
}*/
} }
} }

View file

@ -28,7 +28,7 @@
<dependency> <dependency>
<groupId>org.kie</groupId> <groupId>org.kie</groupId>
<artifactId>business-central</artifactId> <artifactId>business-central</artifactId>
<classifier>wildfly14</classifier> <classifier>wildfly18</classifier>
<version>${jbpm.version}</version> <version>${jbpm.version}</version>
<type>war</type> <type>war</type>
<exclusions> <exclusions>
@ -83,7 +83,7 @@
<artifactItem> <artifactItem>
<groupId>org.kie</groupId> <groupId>org.kie</groupId>
<artifactId>business-central</artifactId> <artifactId>business-central</artifactId>
<classifier>wildfly14</classifier> <classifier>wildfly18</classifier>
<version>${jbpm.version}</version> <version>${jbpm.version}</version>
<type>war</type> <type>war</type>
<outputDirectory>${project.build.directory}/unpack-tmp</outputDirectory> <outputDirectory>${project.build.directory}/unpack-tmp</outputDirectory>

View file

@ -25,7 +25,6 @@ import org.chtijbug.drools.runtime.listener.HistoryListener;
import org.chtijbug.drools.runtime.resource.FileKnowledgeResource; import org.chtijbug.drools.runtime.resource.FileKnowledgeResource;
import org.chtijbug.drools.runtime.resource.KnowledgeModule; import org.chtijbug.drools.runtime.resource.KnowledgeModule;
import org.chtijbug.drools.runtime.resource.WorkbenchClient; import org.chtijbug.drools.runtime.resource.WorkbenchClient;
import org.kie.api.builder.ReleaseId;
import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession; import org.kie.api.runtime.KieSession;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -62,7 +61,6 @@ public class RuleBaseSingleton implements RuleBasePackage {
private String ruleBaseName; private String ruleBaseName;
private Long ruleBaseID; private Long ruleBaseID;
private KieContainer kieContainer; private KieContainer kieContainer;
private ReleaseId releaseId;
private String groupId; private String groupId;
private String artifactId; private String artifactId;
private String version; private String version;
@ -135,9 +133,6 @@ public class RuleBaseSingleton implements RuleBasePackage {
KnowledgeBaseCreatedEvent knowledgeBaseCreatedEvent = new KnowledgeBaseCreatedEvent(eventCounter.next(), new Date(), ruleBaseID); KnowledgeBaseCreatedEvent knowledgeBaseCreatedEvent = new KnowledgeBaseCreatedEvent(eventCounter.next(), new Date(), ruleBaseID);
this.historyListener.fireEvent(knowledgeBaseCreatedEvent); this.historyListener.fireEvent(knowledgeBaseCreatedEvent);
} }
this.groupId = groupId;
this.artifactId = artifactId;
this.version = version;
this.knowledgeModule = new KnowledgeModule(this.ruleBaseName, this.historyListener, eventCounter); this.knowledgeModule = new KnowledgeModule(this.ruleBaseName, this.historyListener, eventCounter);
} }
public RuleBaseSingleton(Long ruleBaseID, int maxNumberRulesToExecute, HistoryListener historyListener) throws DroolsChtijbugException { public RuleBaseSingleton(Long ruleBaseID, int maxNumberRulesToExecute, HistoryListener historyListener) throws DroolsChtijbugException {
@ -148,9 +143,6 @@ public class RuleBaseSingleton implements RuleBasePackage {
KnowledgeBaseCreatedEvent knowledgeBaseCreatedEvent = new KnowledgeBaseCreatedEvent(eventCounter.next(), new Date(), ruleBaseID); KnowledgeBaseCreatedEvent knowledgeBaseCreatedEvent = new KnowledgeBaseCreatedEvent(eventCounter.next(), new Date(), ruleBaseID);
this.historyListener.fireEvent(knowledgeBaseCreatedEvent); this.historyListener.fireEvent(knowledgeBaseCreatedEvent);
} }
this.groupId = groupId;
this.artifactId = artifactId;
this.version = version;
this.knowledgeModule = new KnowledgeModule(this.ruleBaseID, this.historyListener, eventCounter); this.knowledgeModule = new KnowledgeModule(this.ruleBaseID, this.historyListener, eventCounter);
} }
@ -178,7 +170,7 @@ public class RuleBaseSingleton implements RuleBasePackage {
@Override @Override
public RuleBaseSession createRuleBaseSession(int maxNumberRulesToExecute, HistoryListener sessionHistoryListener, String sessionName) throws DroolsChtijbugException { public RuleBaseSession createRuleBaseSession(int maxNumberRulesToExecute, HistoryListener sessionHistoryListener, String sessionName) throws DroolsChtijbugException {
logger.debug(">>createRuleBaseSession", maxNumberRulesToExecute); logger.debug(">>createRuleBaseSession number Rules to execute {}", maxNumberRulesToExecute);
RuleBaseSession newRuleBaseSession = null; RuleBaseSession newRuleBaseSession = null;
try { try {
if (kieContainer != null) { if (kieContainer != null) {
@ -268,7 +260,7 @@ public class RuleBaseSingleton implements RuleBasePackage {
this.historyListener.fireEvent(new KnowledgeBaseAddResourceEvent(eventCounter.next(), new Date(), this.ruleBaseID)); this.historyListener.fireEvent(new KnowledgeBaseAddResourceEvent(eventCounter.next(), new Date(), this.ruleBaseID));
} }
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw propagate(e); Thread.currentThread().interrupt();
} }
} }
@ -327,6 +319,15 @@ public class RuleBaseSingleton implements RuleBasePackage {
} }
} }
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("RuleBaseSingleton{");
sb.append("ruleBaseName='").append(ruleBaseName).append('\'');
sb.append(", ruleBaseID=").append(ruleBaseID);
sb.append(", groupId='").append(groupId).append('\'');
sb.append(", artifactId='").append(artifactId).append('\'');
sb.append(", version='").append(version).append('\'');
sb.append('}');
return sb.toString();
}
} }

View file

@ -97,8 +97,8 @@
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" /> <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.7" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.7" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.7" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.7" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.35.0.Final" level="project" /> <orderEntry type="library" name="Maven: org.kie:kie-internal:7.38.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-api:7.35.0.Final" level="project" /> <orderEntry type="library" name="Maven: org.kie:kie-api:7.38.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.35.0.Final" level="project" /> <orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.38.0.Final" level="project" />
</component> </component>
</module> </module>

View file

@ -95,8 +95,8 @@
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" /> <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:13.0.1" level="project" /> <orderEntry type="library" name="Maven: com.google.guava:guava:13.0.1" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.1" level="project" /> <orderEntry type="library" name="Maven: commons-io:commons-io:2.1" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.35.0.Final" level="project" /> <orderEntry type="library" name="Maven: org.kie:kie-internal:7.38.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-api:7.35.0.Final" level="project" /> <orderEntry type="library" name="Maven: org.kie:kie-api:7.38.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.35.0.Final" level="project" /> <orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.38.0.Final" level="project" />
</component> </component>
</module> </module>

View file

@ -41,9 +41,9 @@
<orderEntry type="library" name="Maven: com.google.guava:guava:13.0.1" level="project" /> <orderEntry type="library" name="Maven: com.google.guava:guava:13.0.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.7" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.7" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.7" level="project" /> <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.7" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-internal:7.35.0.Final" level="project" /> <orderEntry type="library" name="Maven: org.kie:kie-internal:7.38.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie:kie-api:7.35.0.Final" level="project" /> <orderEntry type="library" name="Maven: org.kie:kie-api:7.38.0.Final" level="project" />
<orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.35.0.Final" level="project" /> <orderEntry type="library" name="Maven: org.kie.soup:kie-soup-maven-support:7.38.0.Final" level="project" />
<orderEntry type="library" name="Maven: com.github.mkopylec:charon-spring-boot-starter:3.1.0" level="project" /> <orderEntry type="library" name="Maven: com.github.mkopylec:charon-spring-boot-starter:3.1.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.0.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.1.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.0.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.0.RELEASE" level="project" />

View file

@ -17,7 +17,7 @@
<packaging>pom</packaging> <packaging>pom</packaging>
<properties> <properties>
<jbpm.version>7.35.0.Final</jbpm.version> <jbpm.version>7.38.0.Final</jbpm.version>
<node.version>v10.16.3</node.version> <node.version>v10.16.3</node.version>
<npm.version>6.11.3</npm.version> <npm.version>6.11.3</npm.version>
<frontend-maven-plugin.version>1.8.0</frontend-maven-plugin.version> <frontend-maven-plugin.version>1.8.0</frontend-maven-plugin.version>