Sfoglia il codice sorgente

增加pom,元数据检查.

聂秋秋 6 anni fa
parent
commit
b320495a11

+ 7 - 1
build.gradle.kts

@@ -69,7 +69,8 @@ val lib = mapOf(
     // code generator
     "velocity"                   to "org.apache.velocity:velocity-engine-core:2.0",
     "freemarker"                 to "org.freemarker:freemarker:2.3.28",
-    "beetl"                      to "com.ibeetl:beetl:2.9.8"
+    "beetl"                      to "com.ibeetl:beetl:2.9.8",
+    "lagarto"                    to "org.jodd:jodd-lagarto:5.0.7"
 )
 // ext
 extra["lib"] = lib
@@ -126,6 +127,7 @@ subprojects {
         testRuntimeOnly("${lib["junit-jupiter-engine"]}")
         testCompileOnly("${lib["mockito-all"]}")
         testImplementation("org.mockito:mockito-junit-jupiter:2.24.0")
+        testImplementation("${lib["lagarto"]}")
     }
 
     val sourcesJar by tasks.registering(Jar::class) {
@@ -149,7 +151,11 @@ subprojects {
     }
 
     tasks.withType<Test> {
+        dependsOn("generatePomFileForMavenJavaPublication")
         useJUnitPlatform()
+        exclude("**/generator/**")
+        exclude("**/postgres/**")
+        exclude("**/mysql/**")
     }
 
     val javadocJar by tasks.registering(Jar::class) {

+ 1 - 0
mybatis-plus-boot-starter/build.gradle.kts

@@ -9,6 +9,7 @@ dependencies {
     api("org.springframework.boot:spring-boot-starter-jdbc")
     implementation("org.springframework.boot:spring-boot-configuration-processor")
     implementation("org.springframework.boot:spring-boot-autoconfigure-processor")
+    testImplementation("org.springframework.boot:spring-boot-starter-test")
 }
 
 tasks.withType<JavaCompile> {

+ 66 - 0
mybatis-plus-boot-starter/src/test/java/com/baomidou/mybatisplus/starter/MetadataTest.java

@@ -0,0 +1,66 @@
+package com.baomidou.mybatisplus.starter;
+
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
+import com.jayway.jsonpath.DocumentContext;
+import com.jayway.jsonpath.JsonPath;
+import com.jayway.jsonpath.TypeRef;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.type.JdbcType;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.core.io.FileSystemResource;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+/**
+ * 检查元数据生成
+ *
+ * @author nieqiurong 2019/2/9.
+ */
+class MetadataTest {
+    
+    @Data
+    @AllArgsConstructor
+    private static class Metadata {
+        private String name;
+        private String type;
+        private String sourceType;
+    }
+    
+    @Test
+    void checkSpringAutoconfigureMetadataProperties() throws IOException {
+        Properties properties = new Properties();
+        properties.load(new FileSystemResource("build/classes/java/main/META-INF/spring-autoconfigure-metadata.properties").getInputStream());
+        Assertions.assertEquals(DataSourceAutoConfiguration.class.getName(), properties.getProperty(MybatisPlusAutoConfiguration.class.getName() + ".AutoConfigureAfter"));
+        Assertions.assertEquals(DataSource.class.getName(), properties.getProperty(MybatisPlusAutoConfiguration.class.getName() + ".ConditionalOnSingleCandidate"));
+        Assertions.assertEquals(SqlSessionFactory.class.getName() + "," + SqlSessionFactoryBean.class.getName(), properties.getProperty(MybatisPlusAutoConfiguration.class.getName() + ".ConditionalOnClass"));
+    }
+    
+    @Test
+    void checkSpringConfigurationMetadataJson() throws IOException {
+        DocumentContext documentContext = JsonPath.parse(new FileSystemResource("build/classes/java/main/META-INF/spring-configuration-metadata.json").getInputStream());
+        List<Map<String, String>> properties = documentContext.read("$.properties");
+        Map<String, Metadata> metadataMap = properties.stream().map(map -> new Metadata(map.get("name"), map.get("type"), map.get("sourceType"))).collect(Collectors.toMap(Metadata::getName, metadata -> metadata));
+        Assertions.assertEquals(metadataMap.get("mybatis-plus.type-enums-package"), new Metadata("mybatis-plus.type-enums-package", String.class.getName(), MybatisPlusProperties.class.getName()));
+        Assertions.assertEquals(metadataMap.get("mybatis-plus.type-aliases-package"), new Metadata("mybatis-plus.type-aliases-package", String.class.getName(), MybatisPlusProperties.class.getName()));
+        Assertions.assertEquals(metadataMap.get("mybatis-plus.global-config.sql-parser-cache"), new Metadata("mybatis-plus.global-config.sql-parser-cache", Boolean.class.getName(), GlobalConfig.class.getName()));
+        Assertions.assertEquals(metadataMap.get("mybatis-plus.global-config.db-config.table-underline"), new Metadata("mybatis-plus.global-config.db-config.table-underline", Boolean.class.getName(), GlobalConfig.DbConfig.class.getName()));
+        Assertions.assertEquals(metadataMap.get("mybatis-plus.config-location"), new Metadata("mybatis-plus.config-location", String.class.getName(), MybatisPlusProperties.class.getName()));
+        Assertions.assertEquals(metadataMap.get("mybatis-plus.configuration.call-setters-on-nulls"), new Metadata("mybatis-plus.configuration.call-setters-on-nulls", Boolean.class.getName(), MybatisConfiguration.class.getName()));
+        Assertions.assertEquals(metadataMap.get("mybatis-plus.configuration.jdbc-type-for-null"), new Metadata("mybatis-plus.configuration.jdbc-type-for-null", JdbcType.class.getName(), MybatisConfiguration.class.getName()));
+        Assertions.assertEquals(metadataMap.get("mybatis-plus.configuration.map-underscore-to-camel-case"), new Metadata("mybatis-plus.configuration.map-underscore-to-camel-case", Boolean.class.getName(), MybatisConfiguration.class.getName()));
+    }
+}

+ 64 - 0
mybatis-plus-boot-starter/src/test/java/com/baomidou/mybatisplus/starter/pom/GeneratePomTest.java

@@ -0,0 +1,64 @@
+package com.baomidou.mybatisplus.starter.pom;
+
+import jodd.io.FileUtil;
+import jodd.jerry.Jerry;
+import jodd.lagarto.dom.LagartoDOMBuilder;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.core.io.FileSystemResource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 检查pom依赖
+ *
+ * @author nieqiurong 2019/2/9.
+ */
+class GeneratePomTest {
+    
+    @Data
+    @AllArgsConstructor
+    private static class Dependency {
+        private String artifactId;
+        private String scope;
+        private boolean optional;
+    }
+    
+    @Test
+    void test() throws IOException {
+        InputStream inputStream = new FileSystemResource("build/publications/mavenJava/pom-default.xml").getInputStream();
+        Jerry.JerryParser jerryParser = new Jerry.JerryParser(new LagartoDOMBuilder().enableXmlMode());
+        Jerry doc = jerryParser.parse(FileUtil.readUTFString(inputStream));
+        Jerry dependencies = doc.$("dependencies dependency");
+        Map<String, Dependency> dependenciesMap = new HashMap<>();
+        dependencies.forEach($this -> {
+            String artifactId = $this.$("artifactId").text();
+            dependenciesMap.put(artifactId, new Dependency(artifactId, $this.$("scope").text(), Boolean.parseBoolean($this.$("optional").text())));
+        });
+        Dependency mp = dependenciesMap.get("mybatis-plus");
+        Assertions.assertEquals("compile", mp.getScope());
+        Assertions.assertFalse(mp.isOptional());
+        Dependency autoconfigure = dependenciesMap.get("spring-boot-autoconfigure");
+        Assertions.assertEquals("compile", autoconfigure.getScope());
+        Assertions.assertFalse(autoconfigure.isOptional());
+        Dependency jdbc = dependenciesMap.get("spring-boot-starter-jdbc");
+        Assertions.assertEquals("compile", jdbc.getScope());
+        Assertions.assertFalse(jdbc.isOptional());
+        Dependency configurationProcessor = dependenciesMap.get("spring-boot-configuration-processor");
+        Assertions.assertEquals("compile", configurationProcessor.getScope());
+        Assertions.assertTrue(configurationProcessor.isOptional());
+        Dependency autoconfigureProcessor = dependenciesMap.get("spring-boot-autoconfigure-processor");
+        Assertions.assertEquals("compile", autoconfigureProcessor.getScope());
+        Assertions.assertTrue(autoconfigureProcessor.isOptional());
+        Dependency bom = dependenciesMap.get("spring-boot-dependencies");
+        Assertions.assertEquals("import", bom.getScope());
+        Assertions.assertFalse(bom.isOptional());
+        
+    }
+    
+}

+ 60 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/pom/GeneratePomTest.java

@@ -0,0 +1,60 @@
+package com.baomidou.mybatisplus.core.pom;
+
+import jodd.io.FileUtil;
+import jodd.jerry.Jerry;
+import jodd.lagarto.dom.LagartoDOMBuilder;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.core.io.FileSystemResource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 检查pom依赖
+ *
+ * @author nieqiurong 2019/2/9.
+ */
+class GeneratePomTest {
+    
+    @Data
+    @AllArgsConstructor
+    private static class Dependency {
+        private String artifactId;
+        private String scope;
+        private boolean optional;
+    }
+    
+    @Test
+    void test() throws IOException {
+        InputStream inputStream = new FileSystemResource("build/publications/mavenJava/pom-default.xml").getInputStream();
+        Jerry.JerryParser jerryParser = new Jerry.JerryParser(new LagartoDOMBuilder().enableXmlMode());
+        Jerry doc = jerryParser.parse(FileUtil.readUTFString(inputStream));
+        Jerry dependencies = doc.$("dependencies dependency");
+        Map<String, Dependency> dependenciesMap = new HashMap<>();
+        dependencies.forEach($this -> {
+            String artifactId = $this.$("artifactId").text();
+            dependenciesMap.put(artifactId, new Dependency(artifactId, $this.$("scope").text(), Boolean.parseBoolean($this.$("optional").text())));
+        });
+        Dependency annotation = dependenciesMap.get("mybatis-plus-annotation");
+        Assertions.assertEquals("compile", annotation.getScope());
+        Assertions.assertFalse(annotation.isOptional());
+        Dependency mybatis = dependenciesMap.get("mybatis");
+        Assertions.assertEquals("compile", mybatis.getScope());
+        Assertions.assertFalse(mybatis.isOptional());
+        Dependency jsqlParser = dependenciesMap.get("jsqlparser");
+        Assertions.assertEquals("compile", jsqlParser.getScope());
+        Assertions.assertFalse(jsqlParser.isOptional());
+        Dependency cglib = dependenciesMap.get("cglib");
+        Assertions.assertEquals("compile", cglib.getScope());
+        Assertions.assertTrue(cglib.isOptional());
+        Dependency aop = dependenciesMap.get("spring-aop");
+        Assertions.assertEquals("compile", aop.getScope());
+        Assertions.assertTrue(aop.isOptional());
+    }
+    
+}

+ 69 - 0
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/pom/GeneratePomTest.java

@@ -0,0 +1,69 @@
+package com.baomidou.mybatisplus.extension.pom;
+
+import jodd.io.FileUtil;
+import jodd.jerry.Jerry;
+import jodd.lagarto.dom.LagartoDOMBuilder;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.core.io.FileSystemResource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 检查pom依赖
+ *
+ * @author nieqiurong 2019/2/9.
+ */
+class GeneratePomTest {
+    
+    @Data
+    @AllArgsConstructor
+    private static class Dependency {
+        private String artifactId;
+        private String scope;
+        private boolean optional;
+    }
+    
+    @Test
+    void test() throws IOException {
+        InputStream inputStream = new FileSystemResource("build/publications/mavenJava/pom-default.xml").getInputStream();
+        Jerry.JerryParser jerryParser = new Jerry.JerryParser(new LagartoDOMBuilder().enableXmlMode());
+        Jerry doc = jerryParser.parse(FileUtil.readUTFString(inputStream));
+        Jerry dependencies = doc.$("dependencies dependency");
+        Map<String, Dependency> dependenciesMap = new HashMap<>();
+        dependencies.forEach($this -> {
+            String artifactId = $this.$("artifactId").text();
+            dependenciesMap.put(artifactId, new Dependency(artifactId, $this.$("scope").text(), Boolean.parseBoolean($this.$("optional").text())));
+        });
+        Dependency core = dependenciesMap.get("mybatis-plus-core");
+        Assertions.assertEquals("compile", core.getScope());
+        Assertions.assertFalse(core.isOptional());
+        Dependency mybatisSpring = dependenciesMap.get("mybatis-spring");
+        Assertions.assertEquals("compile", mybatisSpring.getScope());
+        Assertions.assertFalse(mybatisSpring.isOptional());
+        Dependency mybatis = dependenciesMap.get("mybatis");
+        Assertions.assertEquals("compile", mybatis.getScope());
+        Assertions.assertFalse(mybatis.isOptional());
+        Dependency kotlinStdlib = dependenciesMap.get("kotlin-stdlib-jdk8");
+        Assertions.assertEquals("compile", kotlinStdlib.getScope());
+        Assertions.assertTrue(kotlinStdlib.isOptional());
+        Dependency kotlinReflect = dependenciesMap.get("kotlin-reflect");
+        Assertions.assertEquals("compile", kotlinReflect.getScope());
+        Assertions.assertTrue(kotlinReflect.isOptional());
+        Dependency support = dependenciesMap.get("spring-context-support");
+        Assertions.assertEquals("compile", support.getScope());
+        Assertions.assertTrue(support.isOptional());
+        Dependency jdbc = dependenciesMap.get("spring-jdbc");
+        Assertions.assertEquals("compile", jdbc.getScope());
+        Assertions.assertTrue(jdbc.isOptional());
+        Dependency slf4jApi = dependenciesMap.get("slf4j-api");
+        Assertions.assertEquals("compile", slf4jApi.getScope());
+        Assertions.assertTrue(slf4jApi.isOptional());
+    }
+    
+}

+ 2 - 1
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/CodeGeneratorTest.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.generator.config.GlobalConfig;
 import com.baomidou.mybatisplus.generator.config.PackageConfig;
 import com.baomidou.mybatisplus.generator.config.StrategyConfig;
 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import com.mysql.cj.jdbc.Driver;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -79,7 +80,7 @@ class CodeGeneratorTest {
             .setUrl(dbUrl)
             .setUsername("root")
             .setPassword("")
-            .setDriverName("com.mysql.cj.jdbc.Driver");
+            .setDriverName(Driver.class.getName());
         StrategyConfig strategyConfig = new StrategyConfig();
         strategyConfig
             .setCapitalMode(true)

+ 2 - 1
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/CodeGeneratorWithTemplateTest.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.generator.AutoGenerator;
 import com.baomidou.mybatisplus.generator.InjectionConfig;
 import com.baomidou.mybatisplus.generator.config.*;
 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import com.mysql.cj.jdbc.Driver;
 import org.junit.jupiter.api.Test;
 
 import java.util.HashMap;
@@ -55,7 +56,7 @@ class CodeGeneratorWithTemplateTest {
             .setUrl(dbUrl)
             .setUsername("root")
             .setPassword("")
-            .setDriverName("com.mysql.cj.jdbc.Driver");
+            .setDriverName(Driver.class.getName());
         StrategyConfig strategyConfig = new StrategyConfig();
         strategyConfig
             .setCapitalMode(true)

+ 2 - 1
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/MysqlGenerator.java

@@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.generator.config.po.TableInfo;
 import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
 import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
+import com.mysql.cj.jdbc.Driver;
 
 import java.util.*;
 
@@ -80,7 +81,7 @@ public class MysqlGenerator extends GeneratorTest {
                         return super.processTypeConvert(globalConfig, fieldType);
                     }
                 })
-                .setDriverName("com.mysql.cj.jdbc.Driver")
+                .setDriverName(Driver.class.getName())
                 .setUsername("root")
                 .setPassword("123456")
                 .setUrl("jdbc:mysql://127.0.0.1:3306/mybatis-plus?characterEncoding=utf8")

+ 57 - 0
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/pom/GeneratePomTest.java

@@ -0,0 +1,57 @@
+package com.baomidou.mybatisplus.test.generator.pom;
+
+import jodd.io.FileUtil;
+import jodd.jerry.Jerry;
+import jodd.lagarto.dom.LagartoDOMBuilder;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.core.io.FileSystemResource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 检查pom依赖
+ *
+ * @author nieqiurong 2019/2/9.
+ */
+class GeneratePomTest {
+    
+    @Data
+    @AllArgsConstructor
+    private static class Dependency {
+        private String artifactId;
+        private String scope;
+        private boolean optional;
+    }
+    
+    @Test
+    void test() throws IOException {
+        InputStream inputStream = new FileSystemResource("build/publications/mavenJava/pom-default.xml").getInputStream();
+        Jerry.JerryParser jerryParser = new Jerry.JerryParser(new LagartoDOMBuilder().enableXmlMode());
+        Jerry doc = jerryParser.parse(FileUtil.readUTFString(inputStream));
+        Jerry dependencies = doc.$("dependencies dependency");
+        Map<String, Dependency> dependenciesMap = new HashMap<>();
+        dependencies.forEach($this -> {
+            String artifactId = $this.$("artifactId").text();
+            dependenciesMap.put(artifactId, new Dependency(artifactId, $this.$("scope").text(), Boolean.parseBoolean($this.$("optional").text())));
+        });
+        Dependency extension = dependenciesMap.get("mybatis-plus-extension");
+        Assertions.assertEquals("compile", extension.getScope());
+        Assertions.assertFalse(extension.isOptional());
+        Dependency velocity = dependenciesMap.get("velocity-engine-core");
+        Assertions.assertEquals("compile", velocity.getScope());
+        Assertions.assertTrue(velocity.isOptional());
+        Dependency freemarker = dependenciesMap.get("freemarker");
+        Assertions.assertEquals("compile", freemarker.getScope());
+        Assertions.assertTrue(freemarker.isOptional());
+        Dependency beetl = dependenciesMap.get("beetl");
+        Assertions.assertEquals("compile", beetl.getScope());
+        Assertions.assertTrue(beetl.isOptional());
+    }
+    
+}

+ 27 - 1
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/config/MybatisPlusConfig.java

@@ -2,9 +2,14 @@ package com.baomidou.mybatisplus.test.h2.config;
 
 import javax.sql.DataSource;
 
+import com.baomidou.mybatisplus.core.parser.AbstractJsqlParser;
 import com.baomidou.mybatisplus.core.parser.ISqlParser;
 import com.baomidou.mybatisplus.extension.parsers.BlockAttackSqlParser;
 import com.baomidou.mybatisplus.extension.plugins.SqlExplainInterceptor;
+import net.sf.jsqlparser.statement.delete.Delete;
+import net.sf.jsqlparser.statement.insert.Insert;
+import net.sf.jsqlparser.statement.select.SelectBody;
+import net.sf.jsqlparser.statement.update.Update;
 import org.apache.ibatis.plugin.Interceptor;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.type.EnumOrdinalTypeHandler;
@@ -56,7 +61,28 @@ public class MybatisPlusConfig {
         PaginationInterceptor pagination = new PaginationInterceptor();
         SqlExplainInterceptor sqlExplainInterceptor = new SqlExplainInterceptor();
         List<ISqlParser> sqlParserList = new ArrayList<>();
-        sqlParserList.add(new BlockAttackSqlParser());
+        sqlParserList.add(new AbstractJsqlParser(){
+    
+            @Override
+            public void processInsert(Insert insert) {
+        
+            }
+    
+            @Override
+            public void processDelete(Delete delete) {
+        
+            }
+    
+            @Override
+            public void processUpdate(Update update) {
+        
+            }
+    
+            @Override
+            public void processSelectBody(SelectBody selectBody) {
+        
+            }
+        });
         sqlExplainInterceptor.setSqlParserList(sqlParserList);
         OptimisticLockerInterceptor optLock = new OptimisticLockerInterceptor();
         sqlSessionFactory.setPlugins(new Interceptor[]{

+ 51 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/pom/GeneratePomTest.java

@@ -0,0 +1,51 @@
+package com.baomidou.mybatisplus.test.pom;
+
+import jodd.io.FileUtil;
+import jodd.jerry.Jerry;
+import jodd.lagarto.dom.LagartoDOMBuilder;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.core.io.FileSystemResource;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 检查pom依赖
+ *
+ * @author nieqiurong 2019/2/9.
+ */
+class GeneratePomTest {
+    
+    @Data
+    @AllArgsConstructor
+    private static class Dependency {
+        private String artifactId;
+        private String scope;
+        private boolean optional;
+    }
+    
+    @Test
+    void test() throws IOException {
+        InputStream inputStream = new FileSystemResource("build/publications/mavenJava/pom-default.xml").getInputStream();
+        Jerry.JerryParser jerryParser = new Jerry.JerryParser(new LagartoDOMBuilder().enableXmlMode());
+        Jerry doc = jerryParser.parse(FileUtil.readUTFString(inputStream));
+        Jerry dependencies = doc.$("dependencies dependency");
+        Map<String, Dependency> dependenciesMap = new HashMap<>();
+        dependencies.forEach($this -> {
+            String artifactId = $this.$("artifactId").text();
+            dependenciesMap.put(artifactId, new Dependency(artifactId, $this.$("scope").text(), Boolean.parseBoolean($this.$("optional").text())));
+        });
+        Dependency extension = dependenciesMap.get("mybatis-plus-extension");
+        Assertions.assertEquals("compile", extension.getScope());
+        Assertions.assertFalse(extension.isOptional());
+        Dependency generator = dependenciesMap.get("mybatis-plus-generator");
+        Assertions.assertEquals("compile", generator.getScope());
+        Assertions.assertTrue(generator.isOptional());
+    }
+    
+}