当前位置: 首页 > news >正文

【Maven】将普通Eclipse项目改造为Maven项目(非SpringBoot项目)

文章目录

  • 将普通Eclipse项目改造为Maven项目(非SpringBoot项目)
    • Maven安装与配置
    • 项目结构改造
    • 父子Pom.xml文件配置(继承与集成)
      • 父项目下的pom.xml文件配置
      • 普通子模块下的pom.xml配置
      • 启动模块的pom.xml配置
    • 多模块编译
    • 总结
  • Maven插件配置
    • 一、maven-compiler-plugin
      • 功能
      • 常用参数
      • 配置示例
      • 注意事项
    • 二、maven-jar-plugin
      • 功能
      • 常用参数
      • 配置示例
      • 注意事项
    • 三、maven-dependency-plugin
      • 功能
      • 常用参数
      • 配置示例
      • 注意事项
    • 四、maven-resources-plugin
      • 功能
      • 常用参数
      • 配置示例
      • 注意事项
    • 五、maven-shade-plugin
      • 功能
      • 常用参数
      • 配置示例
      • 注意事项
    • 六、maven-assembly-plugin
      • 功能
      • 常用参数
      • 配置示例
      • 自定义`assembly.xml`示例
      • 注意事项
    • 总结

将普通Eclipse项目改造为Maven项目(非SpringBoot项目)

Maven安装与配置

网上资料很多,可自行搜索,不再赘述。

项目结构改造

需要将普通Eclipse项目结构改造为Maven标准结构,如下

src/
|--main/
	|--java/
	|--resources/

多模块项目结构

Demo/
|--module1/
	|--java/
	|--resources/
	|--pom.xml
|--module2/
	|--java/
	|--resources/
	|--pom.xml
|--module3/
	|--java/
	|--resources/
	|--pom.xml
|--pom.xml

父子Pom.xml文件配置(继承与集成)

父项目下的pom.xml文件配置

注意事项:

  1. 为了方便管理子模块的依赖,防止出现依赖冲突,在这里配置好所有模块的依赖项,后面等所有模块配置好后会一起下载依赖项
  2. 按子模块间的依赖顺序集成子模块,作为后续构建jar包的打包顺序
  3. 可配置下载依赖的Maven仓库地址
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

	<!-- GAV坐标 -->
    <groupId>com.regan</groupId> 	<!-- 公司或组织ID -->
    <artifactId>Demo</artifactId> 	<!-- 项目模块ID -->
    <version>1.0.0</version> 		<!-- 版本号 -->
    <packaging>pom</packaging>      <!-- 打包形式,pom工程 -->

    <name>Demo</name>  			<!-- 项目名称 -->
    <description>Demo</description><!-- 项目描述 -->

	<!-- 自定义属性 -->
    <properties>
        <!-- 应用版本号 -->
        <demo.version>1.0.0</demo.version>

        <!-- 编译版本 -->
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>

        <!-- 编码格式 -->
        <project.build.sourceEncoding>GBK</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Java版本 -->
        <java.version>1.8</java.version>

        <!-- 第三方库版本 -->
        <dom4j.version>2.1.3</dom4j.version>
        <fastjson2.version>2.0.53</fastjson2.version>
        <gson.version>2.8.9</gson.version>
        <log4j-core.version>1.2.17</log4j-core.version>
        <junit.version>5.9.2</junit.version>
		
        <!-- 外部资源路径 -->
        <external-resources-path>${project.basedir}/../..</external-resources-path>

        <!-- maven插件 -->
        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
        <maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
        <maven-shade-plugin.version>3.2.4</maven-shade-plugin.version>
        <maven-dependency-plugin.version>3.6.0</maven-dependency-plugin.version>
        <maven-resources-plugin.version>3.3.1</maven-resources-plugin.version>

    </properties>

    <!-- 依赖项管理 -->
    <dependencyManagement>
        <dependencies>
            <!-- xml解析 -->
            <dependency>
                <groupId>org.dom4j</groupId>
                <artifactId>dom4j</artifactId>
                <version>${dom4j.version}</version>
            </dependency>

            <!-- 阿里json解析器 -->
            <dependency>
                <groupId>com.alibaba.fastjson2</groupId>
                <artifactId>fastjson2</artifactId>
                <version>${fastjson2.version}</version>
            </dependency>

            <!-- json-java object 转换 -->
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>${gson.version}</version>
            </dependency>

            <!-- 日志记录工具 -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j-core.version}</version>
            </dependency>

            <!-- 编写测试的API -->
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>

            <!-- 基础模块 -->
            <dependency>
                <groupId>com.regan</groupId>
                <artifactId>module1</artifactId>
                <version>${demo.version}</version>
            </dependency>

            <!-- 基础工具模块 -->
            <dependency>
                <groupId>com.regan</groupId>
                <artifactId>module2</artifactId>
                <version>${demo.version}</version>
            </dependency>

            <!-- 核心模块 -->
            <dependency>
                <groupId>com.regan</groupId>
                <artifactId>module3</artifactId>
                <version>${demo.version}</version>
            </dependency>

			<!-- 启动模块 -->
            <dependency>
                <groupId>com.regan</groupId>
                <artifactId>demo</artifactId>
                <version>${demo.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- 子模块,根据依赖顺序排序 -->
    <modules>
        <module>module1</module>
        <module>module2</module>
        <module>module3</module>
        <module>demo</module>
    </modules>

    <!-- 统一管理插件版本 -->
    <build>
		<!-- 打包后的Jar包名称 -->
        <finalName>Demo-${project.artifactId}-${demo.version}</finalName>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin.version}</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <encoding>${project.build.sourceEncoding}</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

	<!-- 仓库 -->
    <repositories>
        <repository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>https://maven.aliyun.com/repository/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>

	<!-- 插件仓库 -->
    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>aliyun nexus</name>
            <url>https://maven.aliyun.com/repository/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
</project>

普通子模块下的pom.xml配置

注意事项

  1. 注意要继承parent
  2. 依赖的其它模块也要写上
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!-- 继承父级 -->
    <parent>
        <groupId>com.regan</groupId>
        <artifactId>Demo</artifactId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>  <!-- 子模块打包成Jar包 -->
    <artifactId>module2</artifactId>

    <description>基础模块</description>

    <dependencies>
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
        </dependency>

        <!-- 依赖的其它模块 -->
        <dependency>
            <groupId>com.regan</groupId>
            <artifactId>module1</artifactId>
        </dependency>
    </dependencies>
</project>

启动模块的pom.xml配置

注意事项

  1. 启动模块需要配置程序入口

  2. 在这里进行打包配置(依赖、资源文件)

  3. 如果所依赖的资源路径在项目执行路径之外(${project.basedir}),就需要在打包配置时使用

    ${project.basedir}/..–相当于执行路径下的上一级目录

    <resources>
        <resource>
            <directory>你的资源路径</directory>
        </resource>
    </resources>
    
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <parent>
        <groupId>com.regan</groupId>
        <artifactId>Demo</artifactId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>
    <artifactId>module3</artifactId>
    <properties>
        <external-resources-path>${project.basedir}/../..</external-resources-path>
    </properties>

    <description>启动模块</description>


    <dependencies>
        <!-- xml解析 -->
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>${dom4j.version}</version>
            <scope>system</scope>
            <systemPath>${external-resources-path}/safri_build/dom4j-2.1.1.jar</systemPath>
        </dependency>

        <!-- 日志记录工具 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j-core.version}</version>
            <scope>system</scope>
            <systemPath>${external-resources-path}/safri_build/log4j-1.2.17.jar</systemPath>
        </dependency>

        <!-- json库 -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>${json.version}</version>
            <scope>system</scope>
            <systemPath>${external-resources-path}/safri_build/json.jar</systemPath>
        </dependency>

        <!-- 语法高亮文本编辑器 -->
        <dependency>
            <groupId>com.fifesoft</groupId>
            <artifactId>rsyntaxtextarea</artifactId>
            <version>${rsyntaxtextarea.version}</version>
            <scope>system</scope>
            <systemPath>${external-resources-path}/safri_build/rsyntaxtextarea-3.5.3.jar</systemPath>
        </dependency>

        <!-- 阿里json解析器 -->
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>${fastjson2.version}</version>
            <scope>system</scope>
            <systemPath>${external-resources-path}/safri_build/fastjson2-2.0.53.jar</systemPath>
        </dependency>

        <dependency>
            <groupId>com.regan</groupId>
            <artifactId>module1</artifactId>
        </dependency>

        <dependency>
            <groupId>com.regan</groupId>
            <artifactId>module2</artifactId>
        </dependency>
    </dependencies>

    <!-- 配置可执行Jar -->
    <build>
        <!-- 可选:配置从指定目录下开始编译,不拘泥于Maven结构-- <sourceDirectory>src</sourceDirectory> -->
        <plugins>
            <!-- 1. 生成主JAR(不含依赖) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>${maven-jar-plugin.version}</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>cnpo.Demo.app.ApplicationEntrance</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

            <!-- 2. 复制所有依赖到target/lib -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>${maven-dependency-plugin.version}</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <excludeTransitive>false</excludeTransitive>
                            <stripVersion>false</stripVersion>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <includeScope>runtime</includeScope>
                            <includeScope>system</includeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- 3. 处理资源文件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>${maven-resources-plugin.version}</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}</outputDirectory>
                            <resources>
                                <!-- 资源1 目录 -->
                                <resource>
                                    <directory>${external-resources-path}/images</directory>
                                    <excludes>
                                        <exclude>**/*.webg</exclude>
                                    </excludes>
                                    <targetPath>images</targetPath>
                                </resource>

                                <!-- config 目录 -->
                                <resource>
                                    <directory>${external-resources-path}/config</directory>
                                    <includes>
                                        <include>**/*.*</include>
                                    </includes>
                                    <targetPath>config</targetPath>
                                </resource>

                                <!-- 单个文件 -->
                                <resource>
                                    <directory>${external-resources-path}/</directory> <!-- 指向父目录 -->
                                    <includes>
                                        <include>*.properties</include>
                                        <include>admin.txt</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

多模块编译

进行多模块编译主要就是需要在父类pom.xml文件中配置好modules,各子模块的pom.xml文件中配置好依赖模块和依赖包,最后在启动模块下进行Maven插件的配置。可参考上述pom.xml配置文件。

还需要注意的一点是依赖配置:

  • 若使用 <systemPath>,需在所有依赖模块中显式重复配置该依赖。
<scope>system</scope>
<systemPath>依赖包路径</systemPath>

注意:这种依赖作用域默认没有依赖传递。

总结

Maven多模块项目主要就是注意父类Pom.xml文件与子模块Pom.xml文件的模块包含关系,以及依赖配置。

Maven插件配置

以下是对Maven核心插件的详细介绍,涵盖参数配置、使用场景及注意事项:


一、maven-compiler-plugin

功能

负责Java源代码的编译,控制编译版本、编码、内存分配等。

常用参数

  1. <source>:指定源代码兼容的Java版本(如1.8)。
  2. <target>:指定生成的字节码目标JVM版本。
  3. <encoding>:设置字符编码(默认UTF-8)。
  4. <fork>:是否启用独立进程编译(默认false)。
  5. <compilerArgs>:传递额外编译器参数(如-Xlint:unchecked)。
  6. <showWarnings>:是否显示编译警告(默认false)。
  7. <release>:兼容特定JDK版本(仅JDK9+支持)。

配置示例

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
    <encoding>UTF-8</encoding>
    <compilerArgs>
      <arg>-Xlint:all</arg>
    </compilerArgs>
  </configuration>
</plugin>

注意事项

  • 版本兼容性<release>参数仅JDK9+支持,低版本需用<source>/<target>
  • 目标JVM限制:即使设置<target>为低版本,仍需避免使用高版本API,建议配合bootclasspath或Animal Sniffer插件验证。

二、maven-jar-plugin

功能

生成标准JAR包,配置清单文件(MANIFEST.MF)。

常用参数

  1. <archive>:配置JAR包元数据。
    • <manifest>:定义主类、类路径等。
  • <mainClass>:指定入口类。
  • <addClasspath>:是否添加类路径(默认false)。
  • <classpathPrefix>:类路径前缀(如lib/)。
  1. <excludes>/<includes>:排除或包含特定文件。

配置示例

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>3.3.0</version>
  <configuration>
    <archive>
      <manifest>
        <addClasspath>true</addClasspath>
        <classpathPrefix>lib/</classpathPrefix>
        <mainClass>com.example.Main</mainClass>
      </manifest>
    </archive>
    <excludes>
      <exclude>**/test/**</exclude>
    </excludes>
  </configuration>
</plugin>

注意事项

  • 依赖管理:不会打包依赖库,需配合maven-dependency-plugin复制依赖到类路径目录。
  • 版本冲突:若配置不生效,检查插件版本与Maven/JDK兼容性。

三、maven-dependency-plugin

功能

管理项目依赖,如复制依赖、生成依赖树。

常用参数

  1. <copy-dependencies>目标
    • <outputDirectory>:依赖复制目标目录(如target/lib)。
    • <excludeTransitive>:是否排除传递依赖(默认false)。
    • <stripVersion>:移除依赖版本号(默认false)。
  2. <dependency:tree>:生成依赖树分析。

配置示例

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>3.6.0</version>
  <executions>
    <execution>
      <id>copy-dependencies</id>
      <phase>package</phase>
      <goals>
        <goal>copy-dependencies</goal>
      </goals>
      <configuration>
        <outputDirectory>${project.build.directory}/lib</outputDirectory>
        <stripVersion>true</stripVersion>
      </configuration>
    </execution>
  </executions>
</plugin>

注意事项

  • 参数兼容性:避免使用旧版本参数(如overwrite),推荐使用<overWriteIfNewer>
  • 依赖范围:通过<includeScope>控制复制范围(如runtime)。

四、maven-resources-plugin

功能

处理资源文件,支持过滤、编码、动态替换占位符。

常用参数

  1. <encoding>:资源文件编码(默认${project.build.sourceEncoding})。
  2. <resources>:定义资源目录及过滤规则。
    • <filtering>:是否启用占位符替换(默认false)。
  3. <excludes>/<includes>:排除或包含特定资源文件。
  4. <escapeString>:转义占位符前缀(如\${}避免替换)。

配置示例

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>3.3.0</version>
  <configuration>
    <encoding>UTF-8</encoding>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
          <exclude>**/*.key</exclude>
        </excludes>
      </resource>
    </resources>
  </configuration>
</plugin>

注意事项

  • 二进制文件过滤:通过<nonFilteredFileExtensions>排除二进制文件(如PNG)。
  • 目录覆盖:默认包含src/main/resources,自定义资源目录需显式声明。

五、maven-shade-plugin

功能

生成包含依赖的“胖JAR”(Uber-JAR),解决依赖冲突。

常用参数

  1. <transformers>:合并资源文件(如ManifestResourceTransformer)。
    • <mainClass>:指定入口类。
  2. <filters>:排除签名文件(如META-INF/*.SF)。
  3. <relocations>:重定位类路径以避免冲突(如com.google.guavashaded.com.google.guava)。
  4. <createDependencyReducedPom>:是否生成精简POM(默认true)。

配置示例

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>3.5.0</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <transformers>
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
            <mainClass>com.example.Main</mainClass>
          </transformer>
        </transformers>
        <filters>
          <filter>
            <artifact>*:*</artifact>
            <excludes>
              <exclude>META-INF/*.SF</exclude>
            </excludes>
          </filter>
        </filters>
      </configuration>
    </execution>
  </executions>
</plugin>

注意事项

  • 资源冲突:多个依赖包含同名资源时需手动合并(如AppendingTransformer)。
  • 体积控制:通过<minimizeJar>移除未使用的类,但可能破坏反射。

六、maven-assembly-plugin

功能

生成自定义分发包(如ZIP/TAR),包含脚本、配置文件等。

常用参数

  1. <descriptorRefs>:使用预定义描述符(如jar-with-dependencies)。
  2. <descriptors>:引用自定义assembly.xml文件。
  3. <archive>:配置清单文件(如Main-Class)。
  4. <formats>:指定打包格式(如zip、tar.gz)。

配置示例

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>3.6.0</version>
  <configuration>
    <descriptors>
      <descriptor>src/main/assembly/custom.xml</descriptor>
    </descriptors>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

自定义assembly.xml示例

<assembly>
  <id>full-distribution</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <directory>target</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>*.jar</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>src/main/scripts</directory>
      <outputDirectory>/bin</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

注意事项

  • 路径控制<includeBaseDirectory>决定是否将文件放入顶级目录。
  • 依赖管理:通过<dependencySets>控制依赖的打包方式(如解压或直接复制)。

总结

插件核心用途典型场景
maven-compiler-plugin控制编译过程多版本JDK兼容、编码调整
maven-jar-plugin生成标准JAR包可执行JAR、类路径配置
maven-dependency-plugin依赖管理依赖复制、依赖树分析
maven-resources-plugin资源文件处理配置文件过滤、编码统一
maven-shade-plugin生成胖JAR微服务部署、依赖冲突解决
maven-assembly-plugin定制化打包分发包含脚本/配置的完整发布包

通过合理配置这些插件,可实现从编译到分发的全流程控制,满足复杂项目需求。

相关文章:

  • 避坑!用Docker搞定PHP开发环境搭建(Mac、Docker、Nginx、PHP-FPM、XDebug、PHPStorm、VSCode)
  • FPGA开发,使用Deepseek V3还是R1(4):Deepseek参数配置
  • macOS - 使用 tmux
  • JavaAdv01——字节流和字符流
  • mongodb副本集1主2从节点的配置方法示例
  • leetcode第39题组合总和
  • hook和钩子函数
  • zjbdt
  • overleaf嵌套缩进空格不成功的方法
  • 【TSF 文献阅读 02】Dlinear | Are Transformers Effective for Time Series Forecasting?
  • 力扣刷题DAY2(链表/简单)
  • 【deepseek第二课】docker部署dify,配置私有化知识库,解决网络超时,成功安装
  • 【网络安全】——协议逆向:揭开通信协议的神秘面纱
  • SpringBoot集成Mybatis(包括Mybatis-Plus)和日志
  • c++进阶--继承
  • 用友NC系列漏洞检测利用工具
  • 了解Java集合的概念和体系:Collection<T>、Collections与Stream的使用
  • 【中等】707.设计链表
  • 移动零
  • centos 下dockers部署surveyking-docker开源考试系统
  • 网站备案快吗/深圳推广公司哪家最好
  • 简洁网站设计/图片优化
  • 汽车行业网站建设/百度搜索网
  • wordpress 远程/优化公司组织架构
  • 做网站定金一般多少/怎么建网站赚钱
  • 坑人网站怎么做/杭州seo网站排名优化