diff --git a/mock-db/pom.xml b/mock-db/pom.xml index fa2ea83..36f0b25 100644 --- a/mock-db/pom.xml +++ b/mock-db/pom.xml @@ -1,29 +1,18 @@ - - - - mock - com.github.developframework - 0.2-SNAPSHOT - - 4.0.0 - - mock-db - - - - org.projectlombok - lombok - true - - - com.github.developframework - mock-text - - - org.slf4j - slf4j-api - - + + + + mock + com.github.developframework + 0.3-SNAPSHOT + + 4.0.0 + + mock-db + + + + com.github.developframework + mock-text + + \ No newline at end of file diff --git a/mock-db/src/main/java/com/github/developframework/mock/db/InsertSQLSubmitter.java b/mock-db/src/main/java/com/github/developframework/mock/db/InsertSQLSubmitter.java index 9c79056..4dce22a 100644 --- a/mock-db/src/main/java/com/github/developframework/mock/db/InsertSQLSubmitter.java +++ b/mock-db/src/main/java/com/github/developframework/mock/db/InsertSQLSubmitter.java @@ -3,7 +3,7 @@ import com.github.developframework.mock.MockCache; import com.github.developframework.mock.MockTask; import com.github.developframework.mock.RandomGeneratorRegistry; -import develop.framework.components.KeyValuePair; +import develop.toolkit.base.struct.KeyValuePair; import java.sql.SQLException; import java.util.LinkedList; diff --git a/mock-text/pom.xml b/mock-text/pom.xml index f7df10f..e6bdf93 100644 --- a/mock-text/pom.xml +++ b/mock-text/pom.xml @@ -1,38 +1,36 @@ - - - - mock - com.github.developframework - 0.2-SNAPSHOT - - 4.0.0 - - mock-text - - - - org.projectlombok - lombok - true - - - com.github.developframework - develop-framework-commons - - - com.github.developframework - chinese-administrative-region-data - - - commons-io - commons-io - - - org.apache.commons - commons-lang3 - - - + + + + mock + com.github.developframework + 0.3-SNAPSHOT + + 4.0.0 + + mock-text + + + + org.apache.maven.plugins + maven-compiler-plugin + + 11 + 11 + + + + + + + + com.github.developframework + chinese-administrative-region-data + + + com.github.developframework + develop-toolkit-base + + + \ No newline at end of file diff --git a/mock-text/src/main/java/com/github/developframework/mock/Mock.java b/mock-text/src/main/java/com/github/developframework/mock/Mock.java new file mode 100644 index 0000000..d457908 --- /dev/null +++ b/mock-text/src/main/java/com/github/developframework/mock/Mock.java @@ -0,0 +1,15 @@ +package com.github.developframework.mock; + +import java.lang.annotation.*; + +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Mock { + + String value() default ""; + + Class with() default void.class; + + int size() default 0; +} diff --git a/mock-text/src/main/java/com/github/developframework/mock/MockClient.java b/mock-text/src/main/java/com/github/developframework/mock/MockClient.java index c181d29..b4fc29c 100644 --- a/mock-text/src/main/java/com/github/developframework/mock/MockClient.java +++ b/mock-text/src/main/java/com/github/developframework/mock/MockClient.java @@ -1,14 +1,15 @@ package com.github.developframework.mock; +import develop.toolkit.base.utils.ObjectAdvice; import lombok.Getter; -import lombok.NonNull; -import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.reflect.FieldUtils; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.Charset; -import java.util.LinkedList; +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * 客户端 @@ -17,6 +18,7 @@ * * @since 0.1 */ +@SuppressWarnings("unchecked") public class MockClient { @Getter @@ -36,52 +38,107 @@ public void clearCache() { * @param template 模板 * @return 随机值字符串 */ - public String mock(@NonNull String template) { - MockTask mockTask = new MockTask(randomGeneratorRegistry, mockCache, template); - return mockTask.run(); + public String mock(String template) { + return new MockTask(randomGeneratorRegistry, mockCache, template).run(); } /** - * 依据模板批量填充随机值 - * @param template 模板 - * @param quantity 数量 - * @return 随机值字符串列表 + * 构建实例 + * + * @param clazz + * @param + * @return */ - public List mock(@NonNull String template, int quantity) { - List list = new LinkedList(); - for (int i = 0; i < quantity; i++) { - list.add(mock(template)); + public T mock(Class clazz) { + T entity = ObjectAdvice.newInstanceQuietly(clazz); + Field[] fields = FieldUtils.getFieldsWithAnnotation(clazz, Mock.class); + for (Field field : fields) { + Mock annotation = field.getAnnotation(Mock.class); + Object object = complexMock(annotation.value(), field.getType(), annotation.with(), annotation.size()); + ObjectAdvice.set(entity, field.getName(), object, true); } - return list; + return entity; } + /** - * 从输入流构建 - * @param inputStream 输入流 - * @param charset 编码 - * @return 生成的随机值 - * @throws IOException IO异常 + * 构建数组 + * + * @param template + * @param withClass + * @param size + * @param + * @return */ - public String mock(InputStream inputStream, Charset charset) throws IOException { - StringBuffer templateBuffer = new StringBuffer(); - IOUtils.readLines(inputStream, charset).forEach(line -> templateBuffer.append(line).append('\n')); - return mock(templateBuffer.toString()); + public T[] mockArray(String template, Class withClass, int size) { + T[] array = (T[]) Array.newInstance(withClass, size); + for (int i = 0; i < size; i++) { + array[i] = (T) complexMock(template, withClass, null, null); + } + return array; } /** - * 从输入流批量构建 - * @param inputStream 输入流 - * @param charset 编码 - * @param quantity 数量 - * @return 生成的随机值 - * @throws IOException IO异常 + * 构建列表 + * + * @param template + * @param withClass + * @param size + * @param + * @return */ - public List mock(InputStream inputStream, Charset charset, int quantity) throws IOException { - StringBuffer templateBuffer = new StringBuffer(); - IOUtils.readLines(inputStream, charset).forEach(line -> templateBuffer.append(line).append('\n')); - List list = new LinkedList(); - for (int i = 0; i < quantity; i++) { - list.add(mock(templateBuffer.toString())); + public List mockList(String template, Class withClass, int size) { + List list = new ArrayList(size); + for (int i = 0; i < size; i++) { + list.add((T) complexMock(template, withClass, null, null)); } return list; } + + /** + * 构建集合 + * + * @param template + * @param withClass + * @param size + * @param + * @return + */ + public Set mockSet(String template, Class withClass, int size) { + Set set = new HashSet(size); + for (int i = 0; i < size; i++) { + set.add((T) complexMock(template, withClass, null, null)); + } + return set; + } + + /** + * 复合构建 + * + * @param template + * @param clazz + * @param withClass + * @param size + * @return + */ + private Object complexMock(String template, Class clazz, Class withClass, Integer size) { + if (clazz == String.class) { + return mock(template); + } else if (ObjectAdvice.isPrimitiveType(clazz)) { + // 基本类型 + return ObjectAdvice.primitiveTypeCast(mock(template), clazz); + } else if (clazz.isArray()) { + // 数组类型 + Class c = withClass == void.class ? clazz.getComponentType() : withClass; + return mockArray(template, c, size); + } else if (List.class.isAssignableFrom(clazz)) { + // List类型 + return mockList(template, withClass, size); + } else if (Set.class.isAssignableFrom(clazz)) { + // Set类型 + return mockSet(template, withClass, size); + } else { + // 其它普通类 + return mock(clazz); + } + } } diff --git a/mock-text/src/main/java/com/github/developframework/mock/MockException.java b/mock-text/src/main/java/com/github/developframework/mock/MockException.java index 7a4d2a8..a41461d 100644 --- a/mock-text/src/main/java/com/github/developframework/mock/MockException.java +++ b/mock-text/src/main/java/com/github/developframework/mock/MockException.java @@ -1,6 +1,7 @@ package com.github.developframework.mock; -import develop.framework.commons.exceptions.FormatRuntimeException; + +import develop.toolkit.base.exception.FormatRuntimeException; /** * Mock异常 diff --git a/mock-text/src/main/java/com/github/developframework/mock/MockPlaceholder.java b/mock-text/src/main/java/com/github/developframework/mock/MockPlaceholder.java index 92e9966..d3c4155 100644 --- a/mock-text/src/main/java/com/github/developframework/mock/MockPlaceholder.java +++ b/mock-text/src/main/java/com/github/developframework/mock/MockPlaceholder.java @@ -25,9 +25,8 @@ public class MockPlaceholder { public MockPlaceholder(String placeholder) { this.placeholder = placeholder; - final String content = placeholder.substring(2, placeholder.length() - 1).trim(); - if (content.contains("|")) { - String[] fragments = content.split("\\s*\\|\\s*"); + if (placeholder.contains("|")) { + String[] fragments = placeholder.split("\\s*\\|\\s*"); this.name = fragments[0].trim(); if(fragments.length> 1) { this.parameters = createParameters(fragments[1].trim()); @@ -35,7 +34,7 @@ public MockPlaceholder(String placeholder) { this.parameters = Collections.emptyMap(); } } else { - this.name = content; + this.name = placeholder; this.parameters = Collections.emptyMap(); } } @@ -70,11 +69,13 @@ private Object guessType(String value) { } } + @SuppressWarnings("unchecked") public Optional getParameter(String name, Class clazz) { Object obj = parameters.get(name); return obj == null ? Optional.empty() : Optional.of((T) obj); } + @SuppressWarnings("unchecked") public T getParameterOrDefault(String name, Class clazz, T defValue) { Object obj = parameters.get(name); return obj == null ? defValue : (T) obj; @@ -83,4 +84,9 @@ public T getParameterOrDefault(String name, Class clazz, T defValue) { public Optional getId() { return getParameter("id", String.class); } + + @Override + public String toString() { + return String.format("${%s}", placeholder); + } } diff --git a/mock-text/src/main/java/com/github/developframework/mock/MockTask.java b/mock-text/src/main/java/com/github/developframework/mock/MockTask.java index aa58ed2..b92b5f5 100644 --- a/mock-text/src/main/java/com/github/developframework/mock/MockTask.java +++ b/mock-text/src/main/java/com/github/developframework/mock/MockTask.java @@ -1,12 +1,10 @@ package com.github.developframework.mock; import com.github.developframework.mock.random.RandomGenerator; +import develop.toolkit.base.utils.StringAdvice; -import java.util.LinkedList; import java.util.List; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.stream.Collectors; /** * 一个任务 @@ -16,8 +14,6 @@ */ public class MockTask { - private static final String REGEX = "(?=\\$\\{)(.*?)(?<=\\})"; - private RandomGeneratorRegistry randomGeneratorRegistry; private String template; @@ -35,30 +31,32 @@ public MockTask(RandomGeneratorRegistry randomGeneratorRegistry, MockCache cache * * @return 随机生成结果 */ + @SuppressWarnings("unchecked") public String run() { List mockPlaceholders = extractPlaceholder(template); String result = template; for (MockPlaceholder mockPlaceholder : mockPlaceholders) { RandomGenerator randomGenerator = randomGeneratorRegistry.getRandomGenerator(mockPlaceholder.getName()); - Optional idOptional = mockPlaceholder.getId(); Object value = randomGenerator.randomValue(randomGeneratorRegistry, mockPlaceholder, cache); // 加入缓存 - if (idOptional.isPresent()) { - cache.put(idOptional.get(), new MockCache.Cache(value, mockPlaceholder)); - } + mockPlaceholder.getId().ifPresent(s -> cache.put(s, new MockCache.Cache(value, mockPlaceholder))); final String stringValue = randomGenerator.forString(mockPlaceholder, value); - result = result.replace(mockPlaceholder.getPlaceholder(), stringValue); + result = result.replace(mockPlaceholder.toString(), stringValue); } return result; } + /** + * 提取占位符 + * + * @param template + * @return + */ private List extractPlaceholder(String template) { - List list = new LinkedList(); - Pattern pattern = Pattern.compile(REGEX); - Matcher m = pattern.matcher(template); - while(m.find()) { - list.add(new MockPlaceholder(m.group())); - } - return list; + return StringAdvice + .regexMatchStartEnd(template, "\\$\\{", "\\}") + .stream() + .map(MockPlaceholder::new) + .collect(Collectors.toList()); } } diff --git a/mock-text/src/main/java/com/github/developframework/mock/RandomGeneratorRegistry.java b/mock-text/src/main/java/com/github/developframework/mock/RandomGeneratorRegistry.java index 086e860..7cd2719 100644 --- a/mock-text/src/main/java/com/github/developframework/mock/RandomGeneratorRegistry.java +++ b/mock-text/src/main/java/com/github/developframework/mock/RandomGeneratorRegistry.java @@ -1,39 +1,39 @@ -package com.github.developframework.mock; - -import com.github.developframework.mock.random.*; -import develop.framework.components.EntityRegistry; - -/** - * 生成器注册器 - * @author qiuzhenhao - * @since 0.1 - */ -public class RandomGeneratorRegistry extends EntityRegistry, String> { - - @Override - protected RandomGenerator[] defaultEntity() { - return new RandomGenerator[] { - new StringRandomGenerator(), - new NumberRandomGenerator(), - new PersonNameRandomGenerator(), - new MobileRandomGenerator(), - new DateTimeRandomGenerator(), - new DateRandomGenerator(), - new TimeRandomGenerator(), - new EnumRandomGenerator(), - new BooleanRandomGenerator(), - new QuoteRandomGenerator(), - new IdentityCardRandomGenerator(), - new AddressRandomGenerator(), - new IPRandomGenerator() - }; - } - - public void customRandomGenerators(RandomGenerator[] customRandomGenerators) { - super.addCustomEntities(customRandomGenerators); - } - - public RandomGenerator getRandomGenerator(String name) { - return super.extractRequired(name, new MockException("\"%s\" generator is not exist.", name)); - } -} +package com.github.developframework.mock; + +import com.github.developframework.mock.random.*; +import develop.toolkit.base.components.EntityRegistry; + +/** + * 生成器注册器 + * @author qiuzhenhao + * @since 0.1 + */ +public class RandomGeneratorRegistry extends EntityRegistry, String> { + + @Override + protected RandomGenerator[] defaultEntity() { + return new RandomGenerator[] { + new StringRandomGenerator(), + new NumberRandomGenerator(), + new PersonNameRandomGenerator(), + new MobileRandomGenerator(), + new DateTimeRandomGenerator(), + new DateRandomGenerator(), + new TimeRandomGenerator(), + new EnumRandomGenerator(), + new BooleanRandomGenerator(), + new QuoteRandomGenerator(), + new IdentityCardRandomGenerator(), + new AddressRandomGenerator(), + new IPRandomGenerator() + }; + } + + public void customRandomGenerators(RandomGenerator[] customRandomGenerators) { + super.addCustomEntities(customRandomGenerators); + } + + public RandomGenerator getRandomGenerator(String name) { + return super.extractRequired(name, new MockException("\"%s\" generator is not exist.", name)); + } +} diff --git a/mock-text/src/main/java/com/github/developframework/mock/random/EnumRandomGenerator.java b/mock-text/src/main/java/com/github/developframework/mock/random/EnumRandomGenerator.java index 79ffd5b..3fdae18 100644 --- a/mock-text/src/main/java/com/github/developframework/mock/random/EnumRandomGenerator.java +++ b/mock-text/src/main/java/com/github/developframework/mock/random/EnumRandomGenerator.java @@ -20,9 +20,7 @@ public class EnumRandomGenerator implements RandomGenerator { @Override public String randomValue(RandomGeneratorRegistry randomGeneratorRegistry, MockPlaceholder mockPlaceholder, MockCache mockCache) { List enums = new ArrayList(mockPlaceholder.getParameters().keySet()); - if (enums.contains("id")) { - enums.remove("id"); - } + enums.remove("id"); int index = RandomUtils.nextInt(0, enums.size()); return enums.get(index); } diff --git a/mock-text/src/main/java/com/github/developframework/mock/random/IdentityCardRandomGenerator.java b/mock-text/src/main/java/com/github/developframework/mock/random/IdentityCardRandomGenerator.java index 52919fc..19db6ac 100644 --- a/mock-text/src/main/java/com/github/developframework/mock/random/IdentityCardRandomGenerator.java +++ b/mock-text/src/main/java/com/github/developframework/mock/random/IdentityCardRandomGenerator.java @@ -47,7 +47,7 @@ private County getAddress(RandomGeneratorRegistry randomGeneratorRegistry, MockP if (addressRef.equals("random")) { // 随机生成一个地址 RandomGenerator addressRandomGenerator = randomGeneratorRegistry.getRandomGenerator("address"); - MockPlaceholder addressMockPlaceholder = new MockPlaceholder("${ address }"); + MockPlaceholder addressMockPlaceholder = new MockPlaceholder("address"); return (County) addressRandomGenerator.randomValue(randomGeneratorRegistry, addressMockPlaceholder, mockCache); } else { // 引用一个地址 @@ -70,7 +70,7 @@ private Date getBirthday(RandomGeneratorRegistry randomGeneratorRegistry, MockPl if (birthdayRef.equals("random")) { // 随机生成一个生日 RandomGenerator dateRandomGenerator = randomGeneratorRegistry.getRandomGenerator("date"); - MockPlaceholder dateMockPlaceholder = new MockPlaceholder("${ date | range = " + range + " }"); + MockPlaceholder dateMockPlaceholder = new MockPlaceholder("date | range = " + range); return (Date) dateRandomGenerator.randomValue(randomGeneratorRegistry, dateMockPlaceholder, mockCache); } else { // 引用取生日 diff --git a/mock-text/src/main/java/com/github/developframework/mock/random/NumberRandomGenerator.java b/mock-text/src/main/java/com/github/developframework/mock/random/NumberRandomGenerator.java index a823a14..190eafc 100644 --- a/mock-text/src/main/java/com/github/developframework/mock/random/NumberRandomGenerator.java +++ b/mock-text/src/main/java/com/github/developframework/mock/random/NumberRandomGenerator.java @@ -34,7 +34,7 @@ public Number randomValue(RandomGeneratorRegistry randomGeneratorRegistry, MockP throw new MockException("min value greater than max value."); } boolean isDecimals = mockPlaceholder.getParameterOrDefault(PARAMETER_DECIMALS, boolean.class, false); - Number result = new Double(RandomUtils.nextDouble(min.doubleValue(), max.doubleValue())); + Number result = RandomUtils.nextDouble(min.doubleValue(), max.doubleValue()); if (isDecimals) { if (digitOptional.isPresent()) { return new BigDecimal(result.doubleValue()).setScale(digitOptional.get(), RoundingMode.CEILING); @@ -54,7 +54,7 @@ public String key() { public String forString(MockPlaceholder mockPlaceholder, Number value) { Optional fillZeroOptional = mockPlaceholder.getParameter(PARAMETER_FILL_ZERO, Integer.class); if (fillZeroOptional.isPresent()) { - return String.format("%0" + fillZeroOptional.get().intValue() + "d", value.intValue()); + return String.format("%0" + fillZeroOptional.get() + "d", value.intValue()); } else { return String.valueOf(value); } diff --git a/mock-text/src/main/java/com/github/developframework/mock/random/PersonNameRandomGenerator.java b/mock-text/src/main/java/com/github/developframework/mock/random/PersonNameRandomGenerator.java index 60e9c41..a4a9e52 100644 --- a/mock-text/src/main/java/com/github/developframework/mock/random/PersonNameRandomGenerator.java +++ b/mock-text/src/main/java/com/github/developframework/mock/random/PersonNameRandomGenerator.java @@ -4,15 +4,12 @@ import com.github.developframework.mock.MockException; import com.github.developframework.mock.MockPlaceholder; import com.github.developframework.mock.RandomGeneratorRegistry; -import org.apache.commons.io.IOUtils; +import develop.toolkit.base.utils.IOAdvice; import org.apache.commons.lang3.RandomUtils; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.Charset; -import java.util.Arrays; import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; /** * 人名随机生成器 @@ -34,35 +31,31 @@ public PersonNameRandomGenerator() { List maleNameList = new LinkedList(); List femaleNameList = new LinkedList(); int flag = 0; - try (InputStream is = getClass().getResourceAsStream("/person_name_chinese.txt")) { - List list = IOUtils.readLines(is, Charset.forName("UTF-8")); - for (String line : list) { - if (line.startsWith("--")) { - flag++; - continue; + List list = IOAdvice.readLinesFromClasspath("/person_name_chinese.txt").collect(Collectors.toList()); + for (String line : list) { + if (line.startsWith("--")) { + flag++; + continue; + } + String[] words = line.split(""); + switch (flag) { + case 0: { + familyNameList.addAll(List.of(words)); + } + break; + case 1: { + maleNameList.addAll(List.of(words)); } - String[] words = line.split(""); - switch (flag) { - case 0: { - familyNameList.addAll(Arrays.asList(words)); - } - break; - case 1: { - maleNameList.addAll(Arrays.asList(words)); - } - break; - case 2: { - femaleNameList.addAll(Arrays.asList(words)); - } - break; + break; + case 2: { + femaleNameList.addAll(List.of(words)); } + break; } - } catch (IOException e) { - throw new MockException("mock client read resource \"person_name_chinese.txt\" failed, " + e.getMessage()); } - this.familyNameLib = familyNameList.toArray(new String[familyNameList.size()]); - this.maleNameLib = maleNameList.toArray(new String[maleNameList.size()]); - this.femaleNameLib = femaleNameList.toArray(new String[femaleNameList.size()]); + this.familyNameLib = familyNameList.toArray(String[]::new); + this.maleNameLib = maleNameList.toArray(String[]::new); + this.femaleNameLib = femaleNameList.toArray(String[]::new); } @Override @@ -77,8 +70,10 @@ public String randomValue(RandomGeneratorRegistry randomGeneratorRegistry, MockP switch (sex) { case "MALE": isMale = true; + break; case "FEMALE": isMale = false; + break; default: isMale = RandomUtils.nextBoolean(); } diff --git a/mock-text/src/main/java/com/github/developframework/mock/random/RandomGenerator.java b/mock-text/src/main/java/com/github/developframework/mock/random/RandomGenerator.java index 1f22bc5..73738a6 100644 --- a/mock-text/src/main/java/com/github/developframework/mock/random/RandomGenerator.java +++ b/mock-text/src/main/java/com/github/developframework/mock/random/RandomGenerator.java @@ -4,7 +4,7 @@ import com.github.developframework.mock.MockCache; import com.github.developframework.mock.MockPlaceholder; import com.github.developframework.mock.RandomGeneratorRegistry; -import develop.framework.components.EntitySign; +import develop.toolkit.base.components.EntitySign; /** * 随机生成器 diff --git a/pom.xml b/pom.xml index 5f6d470..649ac89 100644 --- a/pom.xml +++ b/pom.xml @@ -1,141 +1,143 @@ - - - 4.0.0 - - com.github.developframework - mock - pom - 0.2-SNAPSHOT - - mock-text - mock-db - - - - 0.2 - - - - - - com.github.developframework - develop-framework-platform - ${version.develop-framework} - pom - import - - - com.github.developframework - mock-text - ${project.version} - - - com.github.developframework - mock-db - ${project.version} - - - - - Mock - https://github.com/developframework/mock - random data generator - 2018 - - - - qiuzhenhao - 408000511@qq.com - developframework - http://blog.qiushuicloud.xyz - - - - - GitHub Issues - https://github.com/developframework/mock - - - - - The Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - - - - scm:git:git@github.com:developframework/mock.git - scm:git:git@github.com:developframework/mock.git - https://github.com/developframework/mock - HEAD - - - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - - - - - - - maven-source-plugin - 3.0.1 - - - attach-sources - verify - - jar-no-fork - - - - - - maven-release-plugin - - @{project.version} - true - - - - - - - - release - - - - performRelease - true - - - - - - - maven-gpg-plugin - 1.5 - - - sign-artifacts - verify - - sign - - - - - - - - + + + 4.0.0 + + com.github.developframework + mock + pom + 0.3-SNAPSHOT + + mock-text + mock-db + + + Mock + https://github.com/developframework/mock + random data generator + 2018 + + + 1.0.2-SNAPSHOT + 1.0.0 + + + + + + com.github.developframework + mock-text + ${project.version} + + + com.github.developframework + mock-db + ${project.version} + + + com.github.developframework + chinese-administrative-region-data + ${version.chinese-administrative-region-data} + + + com.github.developframework + develop-toolkit-base + ${version.develop-tookit} + + + + + + + qiuzhenhao + 408000511@qq.com + developframework + http://blog.qiushuicloud.xyz + + + + + GitHub Issues + https://github.com/developframework/mock + + + + + The Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + scm:git:git@github.com:developframework/mock.git + scm:git:git@github.com:developframework/mock.git + https://github.com/developframework/mock + 0.2 + + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + + maven-source-plugin + 3.0.1 + + + attach-sources + verify + + jar-no-fork + + + + + + maven-release-plugin + + @{project.version} + true + + + + + + + + release + + + + performRelease + true + + + + + + + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + + + \ No newline at end of file

AltStyle によって変換されたページ (->オリジナル) /