From 4b97f2bfbdbbaa6d1960e96471f0da04621474af Mon Sep 17 00:00:00 2001 From: linpeilie Date: Tue, 12 Mar 2024 16:14:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=BB=E9=99=A4hutool=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=88=B7=E5=8F=AF=E4=BB=A5=E6=8C=89=E9=9C=80?= =?UTF-8?q?=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/pom.xml | 6 + example/quick-start/pom.xml | 4 + example/spring-boot-with-lombok/pom.xml | 4 + example/spring-boot/pom.xml | 4 + .../io/github/linpeilie/QuickStartTest.java | 9 +- mapstruct-plus-object-convert/pom.xml | 30 ++++ .../linpeilie/map/MapObjectConvert.java | 0 mapstruct-plus-processor/pom.xml | 4 - .../processor/AutoMapperProcessor.java | 20 +-- .../linpeilie/processor/BuildCollator.java | 14 +- .../generator/AutoMapperGenerator.java | 24 ++- .../generator/MapperConfigGenerator.java | 5 +- .../SolonAdapterMapperGenerator.java | 4 +- .../SpringAdapterMapperGenerator.java | 13 +- .../metadata/AbstractMapperMetadata.java | 4 +- .../metadata/AutoMapMapperMetadata.java | 6 +- .../solon/SolonComponentProcessor.java | 7 +- .../processor/utils/ExceptionUtils.java | 15 ++ .../linpeilie/processor/utils/FileReader.java | 61 ++++++++ .../linpeilie/processor/utils/FileUtils.java | 145 ++++++++++++++++++ .../processor/utils/FileWrapper.java | 68 ++++++++ .../linpeilie/processor/utils/FileWriter.java | 89 +++++++++++ .../processor/utils/LineSeparator.java | 20 +++ .../processor/utils/ObjectUtils.java | 9 ++ .../processor/utils/ThreadUtils.java | 14 ++ mapstruct-plus/pom.xml | 4 +- .../linpeilie/BaseCycleAvoidingMapper.java | 1 - .../java/io/github/linpeilie/BaseMapper.java | 5 +- .../io/github/linpeilie/utils/CharUtils.java | 41 +++++ .../linpeilie/utils/CollectionUtils.java | 29 ++++ .../io/github/linpeilie/utils/StrUtil.java | 86 +++++++++++ pom.xml | 13 +- 32 files changed, 682 insertions(+), 76 deletions(-) create mode 100644 mapstruct-plus-object-convert/pom.xml rename {mapstruct-plus => mapstruct-plus-object-convert}/src/main/java/io/github/linpeilie/map/MapObjectConvert.java (100%) create mode 100644 mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ExceptionUtils.java create mode 100644 mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileReader.java create mode 100644 mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileUtils.java create mode 100644 mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileWrapper.java create mode 100644 mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileWriter.java create mode 100644 mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/LineSeparator.java create mode 100644 mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ObjectUtils.java create mode 100644 mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ThreadUtils.java create mode 100644 mapstruct-plus/src/main/java/io/github/linpeilie/utils/CharUtils.java create mode 100644 mapstruct-plus/src/main/java/io/github/linpeilie/utils/CollectionUtils.java create mode 100644 mapstruct-plus/src/main/java/io/github/linpeilie/utils/StrUtil.java diff --git a/example/pom.xml b/example/pom.xml index 1140c43..4c9dbbd 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -20,6 +20,7 @@ 1.5.1.Final 1.3.7-SNAPSHOTS 1.18.22 + 5.8.26 @@ -44,6 +45,11 @@ lombok ${lombok.version} + + cn.hutool + hutool-all + ${hutool.version} + diff --git a/example/quick-start/pom.xml b/example/quick-start/pom.xml index 323f2a0..b3f6f4c 100644 --- a/example/quick-start/pom.xml +++ b/example/quick-start/pom.xml @@ -28,6 +28,10 @@ 5.9.2 test + + cn.hutool + hutool-all + diff --git a/example/spring-boot-with-lombok/pom.xml b/example/spring-boot-with-lombok/pom.xml index 2ef8f86..81a92c8 100644 --- a/example/spring-boot-with-lombok/pom.xml +++ b/example/spring-boot-with-lombok/pom.xml @@ -46,6 +46,10 @@ org.projectlombok lombok + + cn.hutool + hutool-all + diff --git a/example/spring-boot/pom.xml b/example/spring-boot/pom.xml index 428f4ae..a97857c 100644 --- a/example/spring-boot/pom.xml +++ b/example/spring-boot/pom.xml @@ -42,6 +42,10 @@ io.github.linpeilie mapstruct-plus-spring-boot-starter + + cn.hutool + hutool-all + diff --git a/example/spring-boot/src/test/java/io/github/linpeilie/QuickStartTest.java b/example/spring-boot/src/test/java/io/github/linpeilie/QuickStartTest.java index 596685d..e8a89d5 100644 --- a/example/spring-boot/src/test/java/io/github/linpeilie/QuickStartTest.java +++ b/example/spring-boot/src/test/java/io/github/linpeilie/QuickStartTest.java @@ -1,6 +1,5 @@ package io.github.linpeilie; -import cn.hutool.core.date.DateUtil; import io.github.linpeilie.model.Goods; import io.github.linpeilie.model.GoodsDto; import io.github.linpeilie.model.MapModelA; @@ -27,14 +26,14 @@ public class QuickStartTest { private Converter converter; @Test - public void test() { + public void test() throws ParseException { Map mapModel1 = new HashMap<>(); mapModel1.put("str", "1jkf1ijkj3f"); mapModel1.put("i1", 111); mapModel1.put("l2", 11231); Map mapModel2 = new HashMap<>(); - mapModel2.put("date", DateUtil.parse("2023-02-23 01:03:23")); + mapModel2.put("date", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2023-02-23 01:03:23")); mapModel1.put("mapModelB", mapModel2); @@ -99,7 +98,7 @@ public class QuickStartTest { } @Test - public void multiClassConvertTest() { + public void multiClassConvertTest() throws ParseException { User user = new User(); List list = new ArrayList<>(); list.add("1"); @@ -110,7 +109,7 @@ public class QuickStartTest { user.setUsername("Nick"); user.setAge(12); user.setYoung(true); - user.setBirthday(DateUtil.parseDateTime("2023-02-23 02:01:43")); + user.setBirthday(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2023-02-23 02:01:43")); user.setAssets(123.234); user.setVoField("vofieldfff"); user.setMoney(12543.123); diff --git a/mapstruct-plus-object-convert/pom.xml b/mapstruct-plus-object-convert/pom.xml new file mode 100644 index 0000000..d931c4b --- /dev/null +++ b/mapstruct-plus-object-convert/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + + io.github.linpeilie + mapstruct-plus-pom + ${mapstruct-plus.version} + ../pom.xml + + + mapstruct-plus-object-convert + + + 8 + 8 + UTF-8 + + + + + cn.hutool + hutool-core + true + provided + + + + \ No newline at end of file diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/map/MapObjectConvert.java b/mapstruct-plus-object-convert/src/main/java/io/github/linpeilie/map/MapObjectConvert.java similarity index 100% rename from mapstruct-plus/src/main/java/io/github/linpeilie/map/MapObjectConvert.java rename to mapstruct-plus-object-convert/src/main/java/io/github/linpeilie/map/MapObjectConvert.java diff --git a/mapstruct-plus-processor/pom.xml b/mapstruct-plus-processor/pom.xml index bd6dcdf..e11702d 100644 --- a/mapstruct-plus-processor/pom.xml +++ b/mapstruct-plus-processor/pom.xml @@ -27,10 +27,6 @@ com.baidu.lbsyun javapoet - - org.apache.commons - commons-lang3 - org.mapstruct mapstruct-processor diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java index dd89a7a..78986c8 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java @@ -1,9 +1,5 @@ package io.github.linpeilie.processor; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.exceptions.ExceptionUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.TypeName; import io.github.linpeilie.ComponentModelConstant; @@ -31,6 +27,10 @@ import io.github.linpeilie.processor.metadata.AutoEnumMapperMetadata; import io.github.linpeilie.processor.metadata.AutoMapMapperMetadata; import io.github.linpeilie.processor.metadata.AutoMapperMetadata; import io.github.linpeilie.processor.metadata.AutoMappingMetadata; +import io.github.linpeilie.processor.utils.ExceptionUtils; +import io.github.linpeilie.processor.utils.ObjectUtils; +import io.github.linpeilie.utils.CollectionUtils; +import io.github.linpeilie.utils.StrUtil; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; @@ -149,7 +149,7 @@ public class AutoMapperProcessor extends AbstractProcessor { try { doProcess(annotations, roundEnv); } catch (Exception e) { - messager.printMessage(ERROR, ExceptionUtil.stacktraceToString(e)); + messager.printMessage(ERROR, ExceptionUtils.getStackTrace(e)); } return false; @@ -398,7 +398,7 @@ public class AutoMapperProcessor extends AbstractProcessor { // load previous mapper config final List typeElements = buildCollator.getRecords(); - if (CollectionUtil.isNotEmpty(typeElements)) { + if (CollectionUtils.isNotEmpty(typeElements)) { messager.printMessage(Diagnostic.Kind.NOTE, "The previous Mapper Config Class was read , class name : " + typeElements.get(0)); loadMapperConfig(typeElements.get(0).getAnnotation(MapperConfig.class)); @@ -413,7 +413,7 @@ public class AutoMapperProcessor extends AbstractProcessor { if (mapperConfigOptional.isPresent()) { loadMapperConfig(mapperConfigOptional.get().getAnnotation(MapperConfig.class)); // record - buildCollator.writeTypeElements(CollectionUtil.newArrayList((TypeElement) mapperConfigOptional.get())); + buildCollator.writeTypeElements(Collections.singletonList((TypeElement) mapperConfigOptional.get())); } } @@ -483,7 +483,7 @@ public class AutoMapperProcessor extends AbstractProcessor { if (!autoMapperMetadata.isReverseConvertGenerate()) { return; } - boolean defineReverseMapping = CollectionUtil.isNotEmpty(autoMapperMetadata.getFieldReverseMappingList()); + boolean defineReverseMapping = CollectionUtils.isNotEmpty(autoMapperMetadata.getFieldReverseMappingList()); final AutoMapperMetadata reverseMapperMetadata = reverseMapper(autoMapperMetadata); if (defineReverseMapping) { addMapper(reverseMapperMetadata); @@ -544,7 +544,7 @@ public class AutoMapperProcessor extends AbstractProcessor { reverseMapperMetadata.setSuperClass( ClassName.get(ContextConstants.BaseMapper.packageName, ContextConstants.BaseMapper.className)); } - if (CollectionUtil.isNotEmpty(autoMapperMetadata.getFieldReverseMappingList())) { + if (CollectionUtils.isNotEmpty(autoMapperMetadata.getFieldReverseMappingList())) { reverseMapperMetadata.setFieldMappingList(autoMapperMetadata.getFieldReverseMappingList()); } else { // 需要继承的属性 @@ -799,7 +799,7 @@ public class AutoMapperProcessor extends AbstractProcessor { String elementName = ele.getSimpleName().toString(); if (ele.getKind() == ElementKind.METHOD) { - elementName = ObjectUtil.defaultIfBlank(StrUtil.getGeneralField(elementName), elementName); + elementName = ObjectUtils.defaultIfNull(StrUtil.getGeneralField(elementName), elementName); } if (StrUtil.isNotEmpty(autoMapping.source())) { diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/BuildCollator.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/BuildCollator.java index a47aaa1..03c0cb5 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/BuildCollator.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/BuildCollator.java @@ -1,7 +1,7 @@ package io.github.linpeilie.processor; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.io.FileUtil; +import io.github.linpeilie.processor.utils.FileUtils; +import io.github.linpeilie.utils.CollectionUtils; import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; @@ -41,7 +41,7 @@ public class BuildCollator { ContextConstants.MetaInf.folder + fileName); this.collatorFile = new File(fileObject.getName()); if (collatorFile.exists()) { - records = FileUtil.readUtf8Lines(collatorFile) + records = FileUtils.readUtf8Lines(collatorFile) .stream() .map(line -> processingEnv.getElementUtils().getTypeElement(line)) .filter(Objects::nonNull) @@ -62,7 +62,7 @@ public class BuildCollator { } private void write(Collection lines) { - if (CollectionUtil.isEmpty(lines)) { + if (CollectionUtils.isEmpty(lines)) { return; } @@ -71,8 +71,8 @@ public class BuildCollator { .filter(Objects::nonNull) .collect(Collectors.toList()); - FileUtil.mkParentDirs(collatorFile); - FileUtil.writeUtf8Lines(lines, collatorFile); + FileUtils.mkParentDirs(collatorFile); + FileUtils.writeUtf8Lines(lines, collatorFile); } private List loadRecords() { @@ -87,7 +87,7 @@ public class BuildCollator { public void consumeRecords(Consumer consumer) { final List typeElements = getRecords(); - if (CollectionUtil.isNotEmpty(typeElements)) { + if (CollectionUtils.isNotEmpty(typeElements)) { typeElements.forEach(consumer); } } diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/AutoMapperGenerator.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/AutoMapperGenerator.java index 5d5378c..9dda68c 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/AutoMapperGenerator.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/AutoMapperGenerator.java @@ -1,7 +1,5 @@ package io.github.linpeilie.processor.generator; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.util.StrUtil; import com.squareup.javapoet.AnnotationSpec; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.CodeBlock; @@ -13,6 +11,8 @@ import com.squareup.javapoet.TypeSpec; import io.github.linpeilie.processor.ContextConstants; import io.github.linpeilie.processor.metadata.AutoMapperMetadata; import io.github.linpeilie.processor.metadata.AutoMappingMetadata; +import io.github.linpeilie.utils.CollectionUtils; +import io.github.linpeilie.utils.StrUtil; import java.io.IOException; import java.io.UncheckedIOException; import java.io.Writer; @@ -25,7 +25,6 @@ import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; -import org.apache.commons.lang3.StringUtils; public class AutoMapperGenerator { @@ -58,10 +57,9 @@ public class AutoMapperGenerator { ParameterSpec.builder(ClassName.get("io.github.linpeilie", "CycleAvoidingMappingContext"), "context") .addAnnotation(ClassName.get("org.mapstruct", "Context")) .build(); - if (metadata.getFieldMappingList() != null && !metadata.getFieldMappingList().isEmpty()) { builder.addMethod(addConvertMethodSpec( - metadata.isCycles() ? CollectionUtil.newArrayList(source, context) : Collections.singletonList(source), + metadata.isCycles() ? CollectionUtils.newArrayList(source, context) : Collections.singletonList(source), metadata.getFieldMappingList(), targetClassName, CONVERT_METHOD_NAME)); @@ -71,14 +69,14 @@ public class AutoMapperGenerator { if (targetIsImmutable) { builder.addMethod( addEmptyConvertMethodForImmutableEntity( - metadata.isCycles() ? CollectionUtil.newArrayList(source, target, - context) : CollectionUtil.newArrayList(source, target), + metadata.isCycles() ? CollectionUtils.newArrayList(source, target, + context) : CollectionUtils.newArrayList(source, target), targetClassName, CONVERT_METHOD_NAME)); } else if (metadata.getFieldMappingList() != null && !metadata.getFieldMappingList().isEmpty()) { builder.addMethod(addConvertMethodSpec( - metadata.isCycles() ? CollectionUtil.newArrayList(source, target, - context) : CollectionUtil.newArrayList(source, target), + metadata.isCycles() ? CollectionUtils.newArrayList(source, target, + context) : CollectionUtils.newArrayList(source, target), metadata.getFieldMappingList(), targetClassName, CONVERT_METHOD_NAME)); @@ -117,7 +115,7 @@ public class AutoMapperGenerator { .addParameters(parameterSpecs) .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) .returns(target); - if (CollectionUtil.isNotEmpty(autoMappingMetadataList)) { + if (CollectionUtils.isNotEmpty(autoMappingMetadataList)) { methodSpecBuilder.addAnnotations(buildMappingAnnotations(autoMappingMetadataList)); } return methodSpecBuilder.build(); @@ -140,17 +138,17 @@ public class AutoMapperGenerator { builder.addMember("defaultValue", CodeBlock.builder().add("$S", autoMappingMetadata.getDefaultValue()).build()); } - if (StringUtils.isNotEmpty(autoMappingMetadata.getExpression())) { + if (StrUtil.isNotEmpty(autoMappingMetadata.getExpression())) { builder.addMember("expression", CodeBlock.builder().add("$S", autoMappingMetadata.getExpression()).build()); } else { builder.addMember("source", CodeBlock.builder().add("$S", autoMappingMetadata.getSource()).build()); } - if (StringUtils.isNotEmpty(autoMappingMetadata.getDefaultExpression())) { + if (StrUtil.isNotEmpty(autoMappingMetadata.getDefaultExpression())) { builder.addMember("defaultExpression", CodeBlock.builder().add("$S", autoMappingMetadata.getDefaultExpression()).build()); } - if (StringUtils.isNotEmpty(autoMappingMetadata.getConditionExpression())) { + if (StrUtil.isNotEmpty(autoMappingMetadata.getConditionExpression())) { builder.addMember("conditionExpression", CodeBlock.builder().add("$S", autoMappingMetadata.getConditionExpression()).build()); } diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/MapperConfigGenerator.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/MapperConfigGenerator.java index 0e086f3..8dc5a9a 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/MapperConfigGenerator.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/MapperConfigGenerator.java @@ -1,18 +1,17 @@ package io.github.linpeilie.processor.generator; -import cn.hutool.core.collection.CollectionUtil; import com.squareup.javapoet.AnnotationSpec; import com.squareup.javapoet.ClassName; import com.squareup.javapoet.CodeBlock; import com.squareup.javapoet.JavaFile; import com.squareup.javapoet.TypeSpec; import io.github.linpeilie.processor.AutoMapperProperties; +import io.github.linpeilie.utils.CollectionUtils; import java.io.IOException; import java.io.Writer; import java.util.List; import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.Modifier; -import javax.lang.model.element.TypeElement; import javax.lang.model.type.TypeMirror; import static javax.tools.Diagnostic.Kind.ERROR; @@ -44,7 +43,7 @@ public class MapperConfigGenerator { private AnnotationSpec buildMapperConfigAnnotationSpec(final String adapterClassName, final List uses) { CodeBlock.Builder usesCodeBuilder = CodeBlock.builder().add("{"); usesCodeBuilder.add("$T.class", ClassName.get(AutoMapperProperties.getAdapterPackage(), adapterClassName)); - if (CollectionUtil.isNotEmpty(uses)) { + if (CollectionUtils.isNotEmpty(uses)) { uses.forEach(use -> { usesCodeBuilder.add(", $T.class", use); }); diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/SolonAdapterMapperGenerator.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/SolonAdapterMapperGenerator.java index 87c4447..bbc26bf 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/SolonAdapterMapperGenerator.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/SolonAdapterMapperGenerator.java @@ -1,8 +1,8 @@ package io.github.linpeilie.processor.generator; -import cn.hutool.core.collection.CollectionUtil; import com.squareup.javapoet.AnnotationSpec; import com.squareup.javapoet.ClassName; +import io.github.linpeilie.utils.CollectionUtils; import java.util.Collection; import java.util.List; @@ -25,6 +25,6 @@ public class SolonAdapterMapperGenerator extends IocAdapterMapperGenerator { @Override protected List injectAnnotations() { - return CollectionUtil.newArrayList(inject()); + return CollectionUtils.newArrayList(inject()); } } diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/SpringAdapterMapperGenerator.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/SpringAdapterMapperGenerator.java index 877aa96..e8f3337 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/SpringAdapterMapperGenerator.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/generator/SpringAdapterMapperGenerator.java @@ -1,18 +1,9 @@ package io.github.linpeilie.processor.generator; -import cn.hutool.core.collection.CollectionUtil; import com.squareup.javapoet.AnnotationSpec; import com.squareup.javapoet.ClassName; -import com.squareup.javapoet.CodeBlock; -import com.squareup.javapoet.FieldSpec; -import com.squareup.javapoet.MethodSpec; -import com.squareup.javapoet.ParameterSpec; -import com.squareup.javapoet.TypeSpec; -import io.github.linpeilie.processor.AbstractAdapterMapperGenerator; -import io.github.linpeilie.processor.metadata.AbstractAdapterMethodMetadata; -import java.util.Collection; +import io.github.linpeilie.utils.CollectionUtils; import java.util.List; -import javax.lang.model.element.Modifier; public class SpringAdapterMapperGenerator extends IocAdapterMapperGenerator { @@ -35,7 +26,7 @@ public class SpringAdapterMapperGenerator extends IocAdapterMapperGenerator { @Override protected List injectAnnotations() { - return CollectionUtil.newArrayList(autowired()); + return CollectionUtils.newArrayList(autowired()); } } diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AbstractMapperMetadata.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AbstractMapperMetadata.java index 4225adb..1ef5515 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AbstractMapperMetadata.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AbstractMapperMetadata.java @@ -2,14 +2,14 @@ package io.github.linpeilie.processor.metadata; import com.squareup.javapoet.ClassName; import io.github.linpeilie.processor.AutoMapperProperties; -import org.apache.commons.lang3.StringUtils; +import io.github.linpeilie.utils.StrUtil; public abstract class AbstractMapperMetadata { protected ClassName sourceClassName; public String mapperPackage() { - return StringUtils.isNotEmpty(AutoMapperProperties.getMapperPackage()) + return StrUtil.isNotEmpty(AutoMapperProperties.getMapperPackage()) ? AutoMapperProperties.getMapperPackage() : sourceClassName.packageName(); } diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMapMapperMetadata.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMapMapperMetadata.java index b22e27c..5438689 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMapMapperMetadata.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/metadata/AutoMapMapperMetadata.java @@ -1,13 +1,13 @@ package io.github.linpeilie.processor.metadata; import io.github.linpeilie.processor.AutoMapperProperties; -import org.apache.commons.lang3.StringUtils; +import io.github.linpeilie.utils.StrUtil; public class AutoMapMapperMetadata extends AutoMapperMetadata { @Override public String mapperPackage() { - return StringUtils.isNotEmpty(AutoMapperProperties.getMapperPackage()) - ? AutoMapperProperties.getMapperPackage() : getTargetClassName().packageName(); + return StrUtil.isNotEmpty( + AutoMapperProperties.getMapperPackage()) ? AutoMapperProperties.getMapperPackage() : getTargetClassName().packageName(); } } diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/solon/SolonComponentProcessor.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/solon/SolonComponentProcessor.java index 168668d..4c6aa63 100644 --- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/solon/SolonComponentProcessor.java +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/solon/SolonComponentProcessor.java @@ -1,8 +1,7 @@ package io.github.linpeilie.processor.solon; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.collection.ListUtil; import io.github.linpeilie.ComponentModelConstant; +import io.github.linpeilie.utils.CollectionUtils; import java.util.List; import org.mapstruct.ap.internal.model.Annotation; import org.mapstruct.ap.internal.model.Mapper; @@ -16,7 +15,7 @@ public class SolonComponentProcessor extends AnnotationBasedComponentModelProces @Override protected List getTypeAnnotations(final Mapper mapper) { - return CollectionUtil.newArrayList(component()); + return CollectionUtils.newArrayList(component()); } private Annotation component() { @@ -29,7 +28,7 @@ public class SolonComponentProcessor extends AnnotationBasedComponentModelProces @Override protected List getMapperReferenceAnnotations() { - return CollectionUtil.newArrayList(inject()); + return CollectionUtils.newArrayList(inject()); } @Override diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ExceptionUtils.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ExceptionUtils.java new file mode 100644 index 0000000..3573c67 --- /dev/null +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ExceptionUtils.java @@ -0,0 +1,15 @@ +package io.github.linpeilie.processor.utils; + +import java.io.PrintWriter; +import java.io.StringWriter; + +public class ExceptionUtils { + + public static String getStackTrace(final Throwable throwable) { + final StringWriter sw = new StringWriter(); + final PrintWriter pw = new PrintWriter(sw, true); + throwable.printStackTrace(pw); + return sw.getBuffer().toString(); + } + +} diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileReader.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileReader.java new file mode 100644 index 0000000..c4d71b2 --- /dev/null +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileReader.java @@ -0,0 +1,61 @@ +package io.github.linpeilie.processor.utils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.charset.Charset; +import java.util.Collection; + +public class FileReader extends FileWrapper { + private static final long serialVersionUID = 1L; + + public static FileReader create(File file, Charset charset){ + return new FileReader(file, charset); + } + + // ------------------------------------------------------- Constructor start + public FileReader(File file, Charset charset) { + super(file, charset); + checkFile(); + } + + // ------------------------------------------------------- Constructor end + + public > T readLines(T collection) { + BufferedReader reader = null; + try { + reader = FileUtils.getReader(file, charset); + String line; + while (true) { + line = reader.readLine(); + if (line == null) { + break; + } + collection.add(line); + } + return collection; + } catch (IOException e) { + throw new UncheckedIOException(e); + } finally { + if (null != reader) { + try { + reader.close(); + } catch (Exception e) { + // 静默关闭 + } + } + } + } + + private void checkFile() { + if (file == null) { + throw new UncheckedIOException(new IOException("File to write content is null !")); + } + if (this.file.exists() && !file.isFile()) { + throw new UncheckedIOException( + new IOException("File [" + this.file.getAbsoluteFile() + "] is not a file !")); + } + } + +} diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileUtils.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileUtils.java new file mode 100644 index 0000000..6ed0266 --- /dev/null +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileUtils.java @@ -0,0 +1,145 @@ +package io.github.linpeilie.processor.utils; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UncheckedIOException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class FileUtils { + + public static File writeUtf8Lines(Collection list, File file) { + return writeLines(list, file, StandardCharsets.UTF_8); + } + + public static File writeLines(Collection list, File file, Charset charset) { + return writeLines(list, file, charset, false); + } + + public static File writeLines(Collection list, File file, Charset charset, boolean isAppend) { + return FileWriter.create(file, charset).writeLines(list, isAppend); + } + + public static List readUtf8Lines(File file) { + return readLines(file, StandardCharsets.UTF_8); + } + + public static List readLines(File file, Charset charset) { + return readLines(file, charset, new ArrayList<>()); + } + + public static > T readLines(File file, Charset charset, T collection) { + return FileReader.create(file, charset).readLines(collection); + } + + public static BufferedInputStream getInputStream(File file) throws IOException { + return new BufferedInputStream(Files.newInputStream(file.toPath())); + } + + public static BufferedReader getReader(File file, Charset charset) throws IOException { + BufferedInputStream in = getInputStream(file); + InputStreamReader reader; + if (null == charset) { + reader = new InputStreamReader(in); + } else { + reader = new InputStreamReader(in, charset); + } + + return new BufferedReader(reader); + } + + public static File mkParentDirs(File file) { + if (null == file) { + return null; + } + return mkdir(getParent(file, 1)); + } + + public static File getParent(File file, int level) { + if (level < 1 || null == file) { + return file; + } + + File parentFile; + try { + parentFile = file.getCanonicalFile().getParentFile(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + if (1 == level) { + return parentFile; + } + return getParent(parentFile, level - 1); + } + + public static File mkdir(File dir) { + if (dir == null) { + return null; + } + if (false == dir.exists()) { + mkdirsSafely(dir, 5, 1); + } + return dir; + } + + public static boolean mkdirsSafely(File dir, int tryCount, long sleepMillis) { + if (dir == null) { + return false; + } + if (dir.isDirectory()) { + return true; + } + for (int i = 1; i <= tryCount; i++) { // 高并发场景下,可以看到 i 处于 1 ~ 3 之间 + // 如果文件已存在,也会返回 false,所以该值不能作为是否能创建的依据,因此不对其进行处理 + //noinspection ResultOfMethodCallIgnored + dir.mkdirs(); + if (dir.exists()) { + return true; + } + ThreadUtils.sleep(sleepMillis); + } + return dir.exists(); + } + + public static File touch(File file) { + if (null == file) { + return null; + } + if (false == file.exists()) { + mkParentDirs(file); + try { + //noinspection ResultOfMethodCallIgnored + file.createNewFile(); + } catch (Exception e) { + throw new UncheckedIOException(new IOException(e)); + } + } + return file; + } + + public static boolean isNotEmpty(File file) { + return !isEmpty(file); + } + + public static boolean isEmpty(File file) { + if (null == file || !file.exists()) { + return true; + } + + if (file.isDirectory()) { + String[] subFiles = file.list(); + return subFiles == null || subFiles.length == 0; + } else if (file.isFile()) { + return file.length() <= 0; + } + + return false; + } +} diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileWrapper.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileWrapper.java new file mode 100644 index 0000000..d26f740 --- /dev/null +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileWrapper.java @@ -0,0 +1,68 @@ +package io.github.linpeilie.processor.utils; + +import java.io.File; +import java.io.Serializable; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +/** + * 文件包装器,扩展文件对象 + * + * @author Looly + * + */ +public class FileWrapper implements Serializable { + private static final long serialVersionUID = 1L; + + protected File file; + protected Charset charset; + + /** 默认编码:UTF-8 */ + public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; + + // ------------------------------------------------------- Constructor start + public FileWrapper(File file, Charset charset) { + this.file = file; + this.charset = charset; + } + // ------------------------------------------------------- Constructor end + + // ------------------------------------------------------- Setters and Getters start start + /** + * 获得文件 + * @return 文件 + */ + public File getFile() { + return file; + } + + /** + * 设置文件 + * @param file 文件 + * @return 自身 + */ + public FileWrapper setFile(File file) { + this.file = file; + return this; + } + + /** + * 获得字符集编码 + * @return 编码 + */ + public Charset getCharset() { + return charset; + } + + /** + * 设置字符集编码 + * @param charset 编码 + * @return 自身 + */ + public FileWrapper setCharset(Charset charset) { + this.charset = charset; + return this; + } + // ------------------------------------------------------- Setters and Getters start end + +} diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileWriter.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileWriter.java new file mode 100644 index 0000000..4d3691e --- /dev/null +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/FileWriter.java @@ -0,0 +1,89 @@ +package io.github.linpeilie.processor.utils; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.UncheckedIOException; +import java.nio.charset.Charset; + +public class FileWriter extends FileWrapper { + + private static final long serialVersionUID = 1L; + + public static FileWriter create(File file, Charset charset) { + return new FileWriter(file, charset); + } + + // ------------------------------------------------------- Constructor start + + public FileWriter(File file, Charset charset) { + super(file, charset); + checkFile(); + } + + // ------------------------------------------------------- Constructor end + + public File writeLines(Iterable list, boolean isAppend) { + return writeLines(list, null, isAppend); + } + + public BufferedWriter getWriter(boolean isAppend) { + try { + return new BufferedWriter( + new OutputStreamWriter(new FileOutputStream(FileUtils.touch(file), isAppend), charset)); + } catch (Exception e) { + throw new UncheckedIOException(new IOException(e)); + } + } + + public PrintWriter getPrintWriter(boolean isAppend) { + return new PrintWriter(getWriter(isAppend)); + } + + public File writeLines(Iterable list, LineSeparator lineSeparator, boolean isAppend) { + try (PrintWriter writer = getPrintWriter(isAppend)) { + boolean isFirst = true; + for (T t : list) { + if (null != t) { + if (isFirst) { + isFirst = false; + if (isAppend && FileUtils.isNotEmpty(this.file)) { + // 追加模式下且文件非空,补充换行符 + printNewLine(writer, lineSeparator); + } + } else { + printNewLine(writer, lineSeparator); + } + writer.print(t); + + writer.flush(); + } + } + } + return this.file; + } + + private void printNewLine(PrintWriter writer, LineSeparator lineSeparator) { + if (null == lineSeparator) { + //默认换行符 + writer.println(); + } else { + //自定义换行符 + writer.print(lineSeparator.getValue()); + } + } + + private void checkFile() { + if (file == null) { + throw new UncheckedIOException(new IOException("File to write content is null !")); + } + if (this.file.exists() && !file.isFile()) { + throw new UncheckedIOException( + new IOException("File [" + this.file.getAbsoluteFile() + "] is not a file !")); + } + } + +} diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/LineSeparator.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/LineSeparator.java new file mode 100644 index 0000000..e7cb198 --- /dev/null +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/LineSeparator.java @@ -0,0 +1,20 @@ +package io.github.linpeilie.processor.utils; + +public enum LineSeparator { + /** Mac系统换行符:"\r" */ + MAC("\r"), + /** Linux系统换行符:"\n" */ + LINUX("\n"), + /** Windows系统换行符:"\r\n" */ + WINDOWS("\r\n"); + + private final String value; + + LineSeparator(String lineSeparator) { + this.value = lineSeparator; + } + + public String getValue() { + return this.value; + } +} diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ObjectUtils.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ObjectUtils.java new file mode 100644 index 0000000..db76207 --- /dev/null +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ObjectUtils.java @@ -0,0 +1,9 @@ +package io.github.linpeilie.processor.utils; + +public class ObjectUtils { + + public static T defaultIfNull(final T object, final T defaultValue) { + return object != null ? object : defaultValue; + } + +} diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ThreadUtils.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ThreadUtils.java new file mode 100644 index 0000000..0dcefc9 --- /dev/null +++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/utils/ThreadUtils.java @@ -0,0 +1,14 @@ +package io.github.linpeilie.processor.utils; + +public class ThreadUtils { + public static boolean sleep(long millis) { + if (millis > 0) { + try { + Thread.sleep(millis); + } catch (InterruptedException e) { + return false; + } + } + return true; + } +} diff --git a/mapstruct-plus/pom.xml b/mapstruct-plus/pom.xml index cca4476..faa09f6 100644 --- a/mapstruct-plus/pom.xml +++ b/mapstruct-plus/pom.xml @@ -24,8 +24,8 @@ mapstruct - cn.hutool - hutool-core + io.github.linpeilie + mapstruct-plus-object-convert diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/BaseCycleAvoidingMapper.java b/mapstruct-plus/src/main/java/io/github/linpeilie/BaseCycleAvoidingMapper.java index d26ab43..75ba1f6 100644 --- a/mapstruct-plus/src/main/java/io/github/linpeilie/BaseCycleAvoidingMapper.java +++ b/mapstruct-plus/src/main/java/io/github/linpeilie/BaseCycleAvoidingMapper.java @@ -1,6 +1,5 @@ package io.github.linpeilie; -import cn.hutool.core.collection.CollectionUtil; import io.github.linpeilie.annotations.DoIgnore; import java.util.List; import java.util.stream.Collectors; diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/BaseMapper.java b/mapstruct-plus/src/main/java/io/github/linpeilie/BaseMapper.java index a784b66..a89fa3e 100644 --- a/mapstruct-plus/src/main/java/io/github/linpeilie/BaseMapper.java +++ b/mapstruct-plus/src/main/java/io/github/linpeilie/BaseMapper.java @@ -1,9 +1,8 @@ package io.github.linpeilie; -import cn.hutool.core.collection.CollectionUtil; import io.github.linpeilie.annotations.DoIgnore; +import io.github.linpeilie.utils.CollectionUtils; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import org.mapstruct.MappingTarget; @@ -18,7 +17,7 @@ public interface BaseMapper { @DoIgnore default List convert(List sourceList) { - if (CollectionUtil.isEmpty(sourceList)) { + if (CollectionUtils.isEmpty(sourceList)) { return new ArrayList<>(); } return sourceList.stream().map(this::convert).collect(Collectors.toList()); diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/utils/CharUtils.java b/mapstruct-plus/src/main/java/io/github/linpeilie/utils/CharUtils.java new file mode 100644 index 0000000..284600d --- /dev/null +++ b/mapstruct-plus/src/main/java/io/github/linpeilie/utils/CharUtils.java @@ -0,0 +1,41 @@ +package io.github.linpeilie.utils; + +public class CharUtils { + /** + * 是否空白符
+ * 空白符包括空格、制表符、全角空格和不间断空格
+ * + * @param c 字符 + * @return 是否空白符 + * @see Character#isWhitespace(int) + * @see Character#isSpaceChar(int) + * @since 4.0.10 + */ + public static boolean isBlankChar(char c) { + return isBlankChar((int) c); + } + + /** + * 是否空白符
+ * 空白符包括空格、制表符、全角空格和不间断空格
+ * + * @param c 字符 + * @return 是否空白符 + * @see Character#isWhitespace(int) + * @see Character#isSpaceChar(int) + * @since 4.0.10 + */ + public static boolean isBlankChar(int c) { + return Character.isWhitespace(c) + || Character.isSpaceChar(c) + || c == '\ufeff' + || c == '\u202a' + || c == '\u0000' + // issue#I5UGSQ,Hangul Filler + || c == '\u3164' + // Braille Pattern Blank + || c == '\u2800' + // MONGOLIAN VOWEL SEPARATOR + || c == '\u180e'; + } +} diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/utils/CollectionUtils.java b/mapstruct-plus/src/main/java/io/github/linpeilie/utils/CollectionUtils.java new file mode 100644 index 0000000..857c0f1 --- /dev/null +++ b/mapstruct-plus/src/main/java/io/github/linpeilie/utils/CollectionUtils.java @@ -0,0 +1,29 @@ +package io.github.linpeilie.utils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +public class CollectionUtils { + + public static boolean isEmpty(Collection collection) { + return collection == null || collection.isEmpty(); + } + + public static boolean isNotEmpty(Collection collection) { + return !isEmpty(collection); + } + + public static List newArrayList(T... values) { + if (values == null || values.length == 0) { + return new ArrayList<>(); + } + List arrayList = new ArrayList<>(values.length); + Collections.addAll(arrayList, values); + return arrayList; + } + +} diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/utils/StrUtil.java b/mapstruct-plus/src/main/java/io/github/linpeilie/utils/StrUtil.java new file mode 100644 index 0000000..765e62d --- /dev/null +++ b/mapstruct-plus/src/main/java/io/github/linpeilie/utils/StrUtil.java @@ -0,0 +1,86 @@ +package io.github.linpeilie.utils; + +public class StrUtil { + + /** + * 去掉首部指定长度的字符串并将剩余字符串首字母小写
例如:str=setName, preLength=3 =》 return name + * + * @param str 被处理的字符串 + * @param preLength 去掉的长度 + * @return 处理后的字符串,不符合规范返回null + */ + public static String removePreAndLowerFirst(CharSequence str, int preLength) { + if (str == null) { + return null; + } + if (str.length() > preLength) { + char first = Character.toLowerCase(str.charAt(preLength)); + if (str.length() > preLength + 1) { + return first + str.toString().substring(preLength + 1); + } + return String.valueOf(first); + } else { + return str.toString(); + } + } + + /** + * 获得set或get或is方法对应的标准属性名
例如:setName 返回 name + * + *
+     * getName =》name
+     * setName =》name
+     * isName  =》name
+     * 
+ * + * @param getOrSetMethodName Get或Set方法名 + * @return 如果是set或get方法名,返回field, 否则null + */ + public static String getGeneralField(CharSequence getOrSetMethodName) { + final String getOrSetMethodNameStr = getOrSetMethodName.toString(); + if (getOrSetMethodNameStr.startsWith("get") || getOrSetMethodNameStr.startsWith("set")) { + return removePreAndLowerFirst(getOrSetMethodName, 3); + } else if (getOrSetMethodNameStr.startsWith("is")) { + return removePreAndLowerFirst(getOrSetMethodName, 2); + } + return null; + } + + public static boolean isEmpty(CharSequence cs) { + return cs == null || cs.length() == 0; + } + + public static boolean isNotEmpty(CharSequence cs) { + return !isEmpty(cs); + } + + public static boolean equalsIgnoreCase(CharSequence str1, CharSequence str2) { + if (null == str1) { + // 只有两个都为null才判断相等 + return str2 == null; + } + if (null == str2) { + // 字符串2空,字符串1非空,直接false + return false; + } + + return str1.toString().equalsIgnoreCase(str2.toString()); + } + + public static boolean isBlank(CharSequence str) { + final int length; + if ((str == null) || ((length = str.length()) == 0)) { + return true; + } + + for (int i = 0; i < length; i++) { + // 只要有一个非空字符即为非空字符串 + if (false == CharUtils.isBlankChar(str.charAt(i))) { + return false; + } + } + + return true; + } + +} diff --git a/pom.xml b/pom.xml index ede6ffd..c6c0fb1 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ mapstruct-plus mapstruct-plus-spring-boot-starter mapstruct-plus-processor + mapstruct-plus-object-convert @@ -22,12 +23,17 @@ 8 UTF-8 1.5.5.Final - 5.8.15 + 5.8.26 https://github.com/linpeilie/mapstruct-plus.git + + io.github.linpeilie + mapstruct-plus-object-convert + ${mapstruct-plus.version} + io.github.linpeilie mapstruct-plus @@ -43,11 +49,6 @@ javapoet 1.9.0 - - org.apache.commons - commons-lang3 - 3.12.0 - org.mapstruct mapstruct