diff --git a/lattice-model/pom.xml b/lattice-model/pom.xml index 175bdd28..f63f368a 100644 --- a/lattice-model/pom.xml +++ b/lattice-model/pom.xml @@ -5,7 +5,7 @@ lattice org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 lattice-model diff --git a/lattice-model/src/main/java/org/hiforce/lattice/annotation/Priority.java b/lattice-model/src/main/java/org/hiforce/lattice/annotation/Priority.java new file mode 100644 index 00000000..6dc7acc7 --- /dev/null +++ b/lattice-model/src/main/java/org/hiforce/lattice/annotation/Priority.java @@ -0,0 +1,17 @@ +package org.hiforce.lattice.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author Rocky Yu + * @since 2023/1/28 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) +public @interface Priority { + + int value() default 500; +} diff --git a/lattice-model/src/main/java/org/hiforce/lattice/annotation/model/PriorityAnnotation.java b/lattice-model/src/main/java/org/hiforce/lattice/annotation/model/PriorityAnnotation.java new file mode 100644 index 00000000..0a1ba96d --- /dev/null +++ b/lattice-model/src/main/java/org/hiforce/lattice/annotation/model/PriorityAnnotation.java @@ -0,0 +1,15 @@ +package org.hiforce.lattice.annotation.model; + +import lombok.Getter; +import lombok.Setter; + +/** + * @author Rocky Yu + * @since 2023/1/28 + */ +public class PriorityAnnotation { + + @Getter + @Setter + private int value; +} diff --git a/lattice-model/src/main/java/org/hiforce/lattice/annotation/parser/DefaultPriorityAnnotationParser.java b/lattice-model/src/main/java/org/hiforce/lattice/annotation/parser/DefaultPriorityAnnotationParser.java new file mode 100644 index 00000000..22c1b2b1 --- /dev/null +++ b/lattice-model/src/main/java/org/hiforce/lattice/annotation/parser/DefaultPriorityAnnotationParser.java @@ -0,0 +1,22 @@ +package org.hiforce.lattice.annotation.parser; + +import com.google.auto.service.AutoService; +import org.hiforce.lattice.annotation.Priority; +import org.hiforce.lattice.spi.annotation.PriorityAnnotationParser; + +/** + * @author Rocky Yu + * @since 2023/1/28 + */ +@AutoService(PriorityAnnotationParser.class) +public class DefaultPriorityAnnotationParser extends PriorityAnnotationParser { + @Override + public Class getAnnotationClass() { + return Priority.class; + } + + @Override + public int getValue(Priority annotation) { + return annotation.value(); + } +} diff --git a/lattice-model/src/main/java/org/hiforce/lattice/spi/LatticeAnnotationSpiFactory.java b/lattice-model/src/main/java/org/hiforce/lattice/spi/LatticeAnnotationSpiFactory.java index 3fe17e9c..cd933340 100644 --- a/lattice-model/src/main/java/org/hiforce/lattice/spi/LatticeAnnotationSpiFactory.java +++ b/lattice-model/src/main/java/org/hiforce/lattice/spi/LatticeAnnotationSpiFactory.java @@ -36,6 +36,8 @@ public class LatticeAnnotationSpiFactory { private List useCaseAnnotationParsers; + private List priorityAnnotationParsers; + private LatticeAnnotationSpiFactory() { } @@ -48,6 +50,13 @@ public static LatticeAnnotationSpiFactory getInstance() { return instance; } + public List getPriorityAnnotationParsers() { + if (null == priorityAnnotationParsers) { + priorityAnnotationParsers = getCustomServiceProviders(PriorityAnnotationParser.class); + } + return priorityAnnotationParsers; + } + /** * @return The Ability's Custom Annotation Parsers.. */ diff --git a/lattice-model/src/main/java/org/hiforce/lattice/spi/annotation/PriorityAnnotationParser.java b/lattice-model/src/main/java/org/hiforce/lattice/spi/annotation/PriorityAnnotationParser.java new file mode 100644 index 00000000..54aae50e --- /dev/null +++ b/lattice-model/src/main/java/org/hiforce/lattice/spi/annotation/PriorityAnnotationParser.java @@ -0,0 +1,49 @@ +package org.hiforce.lattice.spi.annotation; + +import org.hiforce.lattice.annotation.model.PriorityAnnotation; +import org.hiforce.lattice.spi.LatticeAnnotationSpiFactory; +import org.hiforce.lattice.utils.LatticeAnnotationUtils; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Method; + +/** + * @author Rocky Yu + * @since 2023/1/28 + */ +@SuppressWarnings("all") +public abstract class PriorityAnnotationParser extends LatticeAnnotationParser { + + public abstract int getValue(T annotation); + + public PriorityAnnotation buildAnnotationInfo(T annotation) { + if (null == annotation) { + return null; + } + PriorityAnnotation info = new PriorityAnnotation(); + info.setValue(getValue(annotation)); + return info; + } + + public static PriorityAnnotation getPriorityAnnotationInfo(Class targetClass) { + for (PriorityAnnotationParser parser : LatticeAnnotationSpiFactory.getInstance().getPriorityAnnotationParsers()) { + Annotation annotation = targetClass.getDeclaredAnnotation(parser.getAnnotationClass()); + if (null == annotation) { + continue; + } + return parser.buildAnnotationInfo(annotation); + } + return null; + } + + public static PriorityAnnotation getPriorityAnnotationInfo(Method method) { + for (PriorityAnnotationParser parser : LatticeAnnotationSpiFactory.getInstance().getPriorityAnnotationParsers()) { + Annotation annotation = LatticeAnnotationUtils.findAnnotation(method, parser.getAnnotationClass()); + if (null == annotation) { + continue; + } + return parser.buildAnnotationInfo(annotation); + } + return null; + } +} \ No newline at end of file diff --git a/lattice-remote/lattice-remote-client/pom.xml b/lattice-remote/lattice-remote-client/pom.xml index 8a2d9786..c5a414c7 100644 --- a/lattice-remote/lattice-remote-client/pom.xml +++ b/lattice-remote/lattice-remote-client/pom.xml @@ -5,7 +5,7 @@ lattice-remote org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 diff --git a/lattice-remote/lattice-remote-container/pom.xml b/lattice-remote/lattice-remote-container/pom.xml index 96c659ae..cbde6a9a 100644 --- a/lattice-remote/lattice-remote-container/pom.xml +++ b/lattice-remote/lattice-remote-container/pom.xml @@ -5,7 +5,7 @@ lattice-remote org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 diff --git a/lattice-remote/lattice-remote-runner/lattice-remote-runner-dubbo/pom.xml b/lattice-remote/lattice-remote-runner/lattice-remote-runner-dubbo/pom.xml index 6893ca3c..0b0d8d9c 100644 --- a/lattice-remote/lattice-remote-runner/lattice-remote-runner-dubbo/pom.xml +++ b/lattice-remote/lattice-remote-runner/lattice-remote-runner-dubbo/pom.xml @@ -5,7 +5,7 @@ lattice-remote-runner org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 diff --git a/lattice-remote/lattice-remote-runner/pom.xml b/lattice-remote/lattice-remote-runner/pom.xml index 52aaca1c..a460cfe3 100644 --- a/lattice-remote/lattice-remote-runner/pom.xml +++ b/lattice-remote/lattice-remote-runner/pom.xml @@ -5,7 +5,7 @@ lattice-remote org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 diff --git a/lattice-remote/pom.xml b/lattice-remote/pom.xml index ba08d3b5..ecab321a 100644 --- a/lattice-remote/pom.xml +++ b/lattice-remote/pom.xml @@ -5,7 +5,7 @@ lattice org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 diff --git a/lattice-runtime/pom.xml b/lattice-runtime/pom.xml index b0ca87a9..0ed9b8a0 100644 --- a/lattice-runtime/pom.xml +++ b/lattice-runtime/pom.xml @@ -5,7 +5,7 @@ lattice org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/Lattice.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/Lattice.java index 064e969f..baf5602a 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/Lattice.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/Lattice.java @@ -19,6 +19,7 @@ import org.hiforce.lattice.model.config.builder.BusinessConfigBuilder; import org.hiforce.lattice.model.register.*; import org.hiforce.lattice.model.scenario.ScenarioRequest; +import org.hiforce.lattice.runtime.ability.creator.DefaultAbilityCreator; import org.hiforce.lattice.runtime.ability.register.AbilityBuildRequest; import org.hiforce.lattice.runtime.ability.register.AbilityRegister; import org.hiforce.lattice.runtime.ability.register.TemplateRegister; @@ -81,6 +82,12 @@ private Lattice() { } + public AbilitySpec getAbilitySpecByCode(String code) { + return registeredAbilities.stream() + .filter(p -> StringUtils.equals(code, p.getCode())) + .findFirst().orElse(null); + } + public static Lattice getInstance() { if (null == instance) { instance = new Lattice(); @@ -480,4 +487,55 @@ public BusinessTemplate getFirstMatchedBusiness(ScenarioRequest request) { return TemplateRegister.getInstance().getFirstMatchedBusiness(request); } + @SuppressWarnings("all") + public static List getAllAbilities(Class abilityClass, IBizObject target) { + if( null == abilityClass ){ + throw new LatticeRuntimeException("LATTICE-CORE-RT-0025"); + } + return getAllAbilities(abilityClass.getName(), target); + } + + @SuppressWarnings("all") + public static List getAllAbilities(String abilityCode, IBizObject target) { + DefaultAbilityCreator creator = new DefaultAbilityCreator(abilityCode, target); + List abilityList = creator.getAllAbilityInstancesWithCache(); + + if (abilityList.isEmpty()) { + return Collections.emptyList(); + } + List abilities = new ArrayList<>(abilityList.size()); + for (Ability ability : abilityList) { + boolean supportChecking = ability.supportChecking(); + if (supportChecking) { + abilities.add(ability); + } + } + return abilities; + } + + @SuppressWarnings("all") + public static Ability getFirstMatchedAbility(Class abilityClass, IBizObject target) { + if( null == abilityClass ){ + throw new LatticeRuntimeException("LATTICE-CORE-RT-0025"); + } + return getFirstMatchedAbility(abilityClass.getName(), target); + } + @SuppressWarnings("all") + public static Ability getFirstMatchedAbility(String abilityCode, IBizObject target) { + DefaultAbilityCreator creator = new DefaultAbilityCreator(abilityCode, target); + List domainAbilitySet = creator.getAllAbilityInstancesWithCache(); + if (domainAbilitySet.isEmpty()) { + return null; + } + + for (Ability ability : domainAbilitySet) { + boolean supportChecking = ability.supportChecking(); + if (supportChecking) { + return ability; + } + } + return null; + } + + } diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/cache/AbilityInstCache.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/cache/AbilityInstCache.java new file mode 100644 index 00000000..1a43e68a --- /dev/null +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/cache/AbilityInstCache.java @@ -0,0 +1,50 @@ +package org.hiforce.lattice.runtime.ability.cache; + +import org.hiforce.lattice.model.ability.IAbility; +import org.hiforce.lattice.runtime.cache.LatticeCache; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author Rocky Yu + * @since 2023/1/28 + */ +public class AbilityInstCache implements LatticeCache { + + private static AbilityInstCache instance; + + private static final Object lock = new Object(); + + private static final Map>> ABILITY_INST_MAP = new ConcurrentHashMap<>(); + + public static AbilityInstCache getInstance() { + if (null == instance) { + synchronized (lock) { + if (null == instance) { + instance = new AbilityInstCache(); + } + } + } + return instance; + } + + public List> getAbilityInstCodes(String abilityCode){ + return ABILITY_INST_MAP.get(abilityCode); + } + + public void cacheAbilityInstanceRelation(String abilityCode, List> instanceClasses){ + ABILITY_INST_MAP.put(abilityCode, instanceClasses); + } + + @Override + public void init() { + + } + + @Override + public void clear() { + ABILITY_INST_MAP.clear(); + } +} diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/cache/AbilityInstCacheKey.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/cache/AbilityInstCacheKey.java new file mode 100644 index 00000000..74833fb2 --- /dev/null +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/cache/AbilityInstCacheKey.java @@ -0,0 +1,39 @@ +package org.hiforce.lattice.runtime.ability.cache; + + +import java.util.Objects; + +public final class AbilityInstCacheKey { + private String bizCode; + private String abilityCode; + + private int hash; + + private AbilityInstCacheKey() { + } + + public AbilityInstCacheKey(String bizCode, String abilityCode) { + this.bizCode = bizCode; + this.abilityCode = abilityCode; + } + + @Override + public boolean equals(Object o) { + if (this == o) { return true; } + if (o == null || getClass() != o.getClass()) { return false; } + + AbilityInstCacheKey that = (AbilityInstCacheKey)o; + + if (!Objects.equals(bizCode, that.bizCode)) { return false; } + return Objects.equals(abilityCode, that.abilityCode); + } + + @Override + public int hashCode() { + if (hash == 0) { + int result = bizCode != null ? bizCode.hashCode() : 0; + hash = 31 * result + (abilityCode != null ? abilityCode.hashCode() : 0); + } + return hash; + } +} diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/creator/DefaultAbilityCreator.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/creator/DefaultAbilityCreator.java new file mode 100644 index 00000000..5e8abd76 --- /dev/null +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/creator/DefaultAbilityCreator.java @@ -0,0 +1,85 @@ +package org.hiforce.lattice.runtime.ability.creator; + +import org.apache.commons.lang3.StringUtils; +import org.hiforce.lattice.model.ability.IAbility; +import org.hiforce.lattice.model.business.IBizObject; +import org.hiforce.lattice.model.register.AbilityInstSpec; +import org.hiforce.lattice.model.register.AbilitySpec; +import org.hiforce.lattice.runtime.Lattice; +import org.hiforce.lattice.runtime.ability.cache.AbilityInstCache; +import org.hiforce.lattice.runtime.ability.cache.AbilityInstCacheKey; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +import static org.hiforce.lattice.runtime.utils.LatticeBeanUtils.getAndCreateSpringBeanViaClass; + +/** + * @author Rocky Yu + * @since 2023/1/26 + */ +@SuppressWarnings("all") +public class DefaultAbilityCreator { + + + private String abilityCode; + private IBizObject target; + + private final Map> abilitySelectorCache + = new ConcurrentHashMap<>(1024); + + public DefaultAbilityCreator(String abilityCode, IBizObject target) { + this.target = target; + this.abilityCode = abilityCode; + } + + public List getAllAbilityInstancesWithCache() { + AbilityInstCacheKey selectorCacheKey = new AbilityInstCacheKey(target.getBizCode(), abilityCode); + List abilityList = abilitySelectorCache + .computeIfAbsent(selectorCacheKey, (key) -> { + LinkedHashSet abilities = new LinkedHashSet<>(); + List> list = availableAbilities(); + for (Class instanceClass : list) { + Ability ability = getAndCreateSpringBeanViaClass(instanceClass, target); + if (ability != null) { + abilities.add(ability); + } + } + return new ArrayList<>(abilities); + }); + + return abilityList; + } + + private List> availableAbilities() { + List> returnValue = AbilityInstCache.getInstance().getAbilityInstCodes(abilityCode); + if (returnValue != null) { + return returnValue; + } + + List> abilityClasses = new ArrayList<>(8); + AbilitySpec abilitySpec = Lattice.getInstance().getAbilitySpecByCode(abilityCode); + if (null == abilitySpec) { + AbilityInstCache.getInstance().cacheAbilityInstanceRelation(abilityCode, abilityClasses); + return abilityClasses; + } + + Set abilityInstanceSpecList = abilitySpec.getAbilityInstances(); + List result = new ArrayList<>(); + for (AbilityInstSpec abilityInstanceSpec : abilityInstanceSpecList) { + if (StringUtils.isNotEmpty(abilityInstanceSpec.getInstanceClass())) { + result.add(abilityInstanceSpec); + } + } + result.sort(Comparator.comparingInt(AbilityInstSpec::getPriority)); + for (AbilityInstSpec spec : result) { + try { + abilityClasses.add((Class) Class.forName(spec.getInstanceClass())); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + AbilityInstCache.getInstance().cacheAbilityInstanceRelation(abilityCode, abilityClasses); + return abilityClasses; + } +} diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/register/AbilityRegister.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/register/AbilityRegister.java index eb1dbfc6..e806ed47 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/register/AbilityRegister.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/ability/register/AbilityRegister.java @@ -2,10 +2,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.tuple.Pair; -import org.hiforce.lattice.annotation.model.AbilityAnnotation; -import org.hiforce.lattice.annotation.model.ExtensionAnnotation; -import org.hiforce.lattice.annotation.model.ProtocolType; -import org.hiforce.lattice.annotation.model.ReduceType; +import org.hiforce.lattice.annotation.model.*; import org.hiforce.lattice.exception.LatticeRuntimeException; import org.hiforce.lattice.message.Message; import org.hiforce.lattice.model.ability.IAbility; @@ -25,6 +22,7 @@ import java.util.*; import static org.hiforce.lattice.runtime.utils.LatticeBeanUtils.getAndCreateSpringBeanViaClass; +import static org.hiforce.lattice.spi.annotation.PriorityAnnotationParser.getPriorityAnnotationInfo; import static org.hiforce.lattice.utils.LatticeAnnotationUtils.getExtensionAnnotation; /** @@ -174,6 +172,12 @@ private AbilityInstBuildResult buildAbilityInstanceSpec( instanceDesc.setCode(instance.getInstanceCode()); instanceDesc.setName(instanceClass.getSimpleName()); instanceDesc.getExtensions().addAll(scanAbilityExtensions(instance, abilitySpec)); + + PriorityAnnotation annotation = getPriorityAnnotationInfo(instanceClass); + if (null != annotation) { + instanceDesc.setPriority(annotation.getValue()); + } + abilitySpec.addAbilityInstance(instanceDesc); return AbilityInstBuildResult.success(instanceDesc); } catch (LatticeRuntimeException ex) { diff --git a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/LatticeRuntimeCache.java b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/LatticeRuntimeCache.java index 9cdb8e16..667bd7a4 100644 --- a/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/LatticeRuntimeCache.java +++ b/lattice-runtime/src/main/java/org/hiforce/lattice/runtime/cache/LatticeRuntimeCache.java @@ -4,6 +4,7 @@ import lombok.Getter; import org.apache.commons.lang3.StringUtils; import org.hiforce.lattice.cache.ILatticeRuntimeCache; +import org.hiforce.lattice.runtime.ability.cache.AbilityInstCache; import org.hiforce.lattice.runtime.ability.cache.BusinessExtCache; import org.hiforce.lattice.runtime.ability.register.TemplateRegister; import org.hiforce.lattice.runtime.cache.ability.AbilityCache; @@ -66,6 +67,7 @@ public synchronized void init() { getInvokeCache().init(); getBusinessConfigCache().init(); getBusinessExtCache().init(); + AbilityInstCache.getInstance().init(); } public synchronized void clear() { @@ -75,5 +77,6 @@ public synchronized void clear() { getInvokeCache().clear(); getBusinessConfigCache().clear(); getBusinessExtCache().clear(); + AbilityInstCache.getInstance().clear(); } } diff --git a/lattice-runtime/src/main/resources/i18n/infos_en_AA.properties b/lattice-runtime/src/main/resources/i18n/infos_en_AA.properties index 3d59c3c8..11b8e05e 100644 --- a/lattice-runtime/src/main/resources/i18n/infos_en_AA.properties +++ b/lattice-runtime/src/main/resources/i18n/infos_en_AA.properties @@ -21,4 +21,5 @@ LATTICE-CORE-RT-0020 = The ability [{0}] not support current bizObject: [1], ext LATTICE-CORE-RT-0021 = No remote extension runner builder bean found, extCode: [{0}] LATTICE-CORE-RT-0022 = The getDefaultRealization() of IAbility can not be anonymous class or a interface: {0} LATTICE-CORE-RT-0023 = Lattice not initialized, maybe in reload process. -LATTICE-CORE-RT-0024 = The BizSessionScope not defined when invoke ext: {0} \ No newline at end of file +LATTICE-CORE-RT-0024 = The BizSessionScope not defined when invoke ext: {0} +LATTICE-CORE-RT-0025 = The ability class should not be null. \ No newline at end of file diff --git a/lattice-tools/lattice-dynamic-loading/pom.xml b/lattice-tools/lattice-dynamic-loading/pom.xml index 2884c0c5..b3fd49fb 100644 --- a/lattice-tools/lattice-dynamic-loading/pom.xml +++ b/lattice-tools/lattice-dynamic-loading/pom.xml @@ -5,7 +5,7 @@ lattice-tools org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 diff --git a/lattice-tools/lattice-load-config-res/pom.xml b/lattice-tools/lattice-load-config-res/pom.xml index 7b1d0c73..2604298e 100644 --- a/lattice-tools/lattice-load-config-res/pom.xml +++ b/lattice-tools/lattice-load-config-res/pom.xml @@ -5,7 +5,7 @@ lattice-tools org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 diff --git a/lattice-tools/lattice-maven-build/lattice-maven-build-model/pom.xml b/lattice-tools/lattice-maven-build/lattice-maven-build-model/pom.xml index fa562c85..32fab9fe 100644 --- a/lattice-tools/lattice-maven-build/lattice-maven-build-model/pom.xml +++ b/lattice-tools/lattice-maven-build/lattice-maven-build-model/pom.xml @@ -5,7 +5,7 @@ lattice-maven-build org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 diff --git a/lattice-tools/lattice-maven-build/lattice-maven-build-plugin/pom.xml b/lattice-tools/lattice-maven-build/lattice-maven-build-plugin/pom.xml index 589b2847..21c591e3 100644 --- a/lattice-tools/lattice-maven-build/lattice-maven-build-plugin/pom.xml +++ b/lattice-tools/lattice-maven-build/lattice-maven-build-plugin/pom.xml @@ -5,7 +5,7 @@ lattice-maven-build org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 maven-plugin diff --git a/lattice-tools/lattice-maven-build/pom.xml b/lattice-tools/lattice-maven-build/pom.xml index fa7f249e..3fc4beb3 100644 --- a/lattice-tools/lattice-maven-build/pom.xml +++ b/lattice-tools/lattice-maven-build/pom.xml @@ -5,7 +5,7 @@ lattice-tools org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 pom diff --git a/lattice-tools/pom.xml b/lattice-tools/pom.xml index 2907e1e4..06929437 100644 --- a/lattice-tools/pom.xml +++ b/lattice-tools/pom.xml @@ -5,7 +5,7 @@ lattice org.hiforce.lattice - 1.0.14.1 + 1.0.15 4.0.0 pom diff --git a/pom.xml b/pom.xml index 7ba1d404..4fb6a47d 100644 --- a/pom.xml +++ b/pom.xml @@ -16,9 +16,9 @@ https://github.com/hiforce/lattice 2022 - 1.0.14.1 + 1.0.15 - 1.0.14.1 + 1.0.15 5.3.23 2.7.4 1.2