当前位置: 首页> 财经> 股票 > 沈阳建设工程信息网可访问中项网_三国网页游戏排行榜前十名_网站收录提交入口网址_googleplay商店

沈阳建设工程信息网可访问中项网_三国网页游戏排行榜前十名_网站收录提交入口网址_googleplay商店

时间:2025/7/11 17:26:57来源:https://blog.csdn.net/qq_44734705/article/details/144573053 浏览次数:0次
沈阳建设工程信息网可访问中项网_三国网页游戏排行榜前十名_网站收录提交入口网址_googleplay商店

深入理解Maven

基本概念

1. 什么是 Maven?

Maven 是一个基于项目对象模型(Project Object Model, POM)的构建管理工具,主要用于 Java 项目的自动化构建、依赖管理和文档生成。它提供了一套标准化的项目结构和约定,使得开发者可以专注于业务逻辑的开发,而不需要过多关注构建细节。Maven 的核心思想是“约定优于配置”,这意味着只要遵循其默认的目录结构和命名规范,就可以极大地简化项目的配置工作。

2. POM (Project Object Model)

POM 是 Maven 的核心概念,它是 XML 格式的文件,通常名为 pom.xml。POM 文件包含了关于项目和项目构建过程的所有信息,包括但不限于:

  • groupId: 定义了项目所属的组织或公司,通常是反向域名格式,如 com.example
  • artifactId: 定义了项目的唯一标识符,例如 example-project
  • version: 定义了项目的版本号,如 1.0.0
  • dependencies: 列出了项目所需的外部依赖库。
  • build: 包含了构建过程中的各种配置,如插件、资源文件等。
  • properties: 定义了一些可以在整个项目中使用的属性值。
  • parent: 如果项目继承了父 POM,这里会指定父 POM 的坐标。
  • modules: 如果是多模块项目,这里会列出所有的子模块。
<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><groupId>com.example</groupId><artifactId>example-project</artifactId><version>1.0.0</version><dependencies><!-- 依赖项示例 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies><build><plugins><!-- 插件示例 --><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></configuration></plugin></plugins></build>
</project>

3. 仓库 (Repository)

Maven 使用本地和远程仓库来存储项目需要的依赖库。仓库分为两种类型:

  • 本地仓库:位于用户本地机器上,默认路径为 ~/.m2/repository。Maven 会将所有下载的依赖库缓存到本地仓库,以便后续构建时不再重复下载。
  • 远程仓库:可以是公共的(如 Maven Central)或私有的。Maven 会根据 pom.xml 中的依赖项自动从远程仓库下载所需的库及其传递性依赖。

4. 坐标 (Coordinate)

每个依赖项在 Maven 中都有一个唯一的坐标,由以下三个元素组成:

  • groupId: 定义了项目所属的组织或公司。
  • artifactId: 定义了项目的唯一标识符。
  • version: 定义了项目的版本号。

例如:

<dependency><groupId>com.example</groupId><artifactId>example-library</artifactId><version>1.0.0</version>
</dependency>

5. 生命周期 (Lifecycle)

Maven 构建过程被组织成一系列的生命周期阶段,每个阶段代表了一个特定的构建任务。常见的生命周期阶段包括:

  • validate: 验证项目是否正确,所有必要的信息是否可用。
  • compile: 编译项目的源代码。
  • test: 使用合适的单元测试框架运行测试。
  • package: 将编译后的代码打包成可分发的格式(如 JAR、WAR)。
  • install: 将打包好的制品安装到本地仓库,供其他项目使用。
  • deploy: 将打包好的制品发布到远程仓库,供其他开发者或项目引用。

用户可以通过命令行调用这些生命周期阶段来执行相应的构建任务。例如,mvn clean install 会依次执行 clean, validate, compile, test, package, install 等阶段。

6. 插件 (Plugin)

Maven 插件是一些可复用的组件,它们实现了特定的构建逻辑,比如编译代码、运行测试、打包项目等。每个生命周期阶段都可以绑定一个或多个插件目标。Maven 提供了许多内置插件,用户也可以编写自定义插件来满足特定需求。

例如,maven-compiler-plugin 用于编译 Java 源代码,maven-surefire-plugin 用于运行单元测试。

安装和配置 Maven

1. 下载和安装 Maven

  • 访问 Maven 官方网站,下载适合您操作系统的版本并按照说明进行安装。
  • 下载完成后,解压文件到一个合适的目录,例如 C:\Program Files\Apache\Maven(Windows)或 /usr/local/apache-maven(Linux/Mac)。
  • 设置环境变量 MAVEN_HOME 指向 Maven 的安装路径,并将 %MAVEN_HOME%\bin 添加到系统 PATH 中。

对于 Windows 用户,可以通过以下步骤设置环境变量:

  1. 打开“系统属性” -> “高级系统设置” -> “环境变量”。
  2. 在“系统变量”部分,点击“新建”,添加 MAVEN_HOME 变量,值为 Maven 的安装路径。
  3. 编辑 Path 变量,添加 %MAVEN_HOME%\bin

对于 Linux/Mac 用户,可以在 ~/.bashrc~/.zshrc 文件中添加以下内容:

export MAVEN_HOME=/usr/local/apache-maven
export PATH=$MAVEN_HOME/bin:$PATH

2. 验证安装

打开命令行窗口,输入 mvn -v 来检查 Maven 是否正确安装,并显示当前版本信息。输出应类似于以下内容:

Apache Maven 3.9.9 (bdc7d9e2c0f0a5e28f97cbe0bbcb6db02881c9af)
Maven home: /usr/local/apache-maven
Java version: 1.8.0_362, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_362.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "13.1", arch: "x86_64", family: "mac"

3. 配置 Maven

Maven 的全局配置文件位于 conf/settings.xml,用户可以在此文件中添加镜像、配置代理、设置用户认证信息等。此外,用户还可以在 ~/.m2/settings.xml 中创建个人配置文件,覆盖全局配置。

例如,配置国内镜像以加快依赖下载速度:

<mirrors><mirror><id>aliyun</id><mirrorOf>central</mirrorOf><url>https://maven.aliyun.com/repository/central</url></mirror>
</mirrors>

创建和管理项目

1. 使用 Archetype 创建项目

Maven 提供了 Archetype 插件,可以帮助快速创建项目骨架。Archetype 是一种项目模板,可以根据不同的需求生成不同类型的项目结构。

使用命令 mvn archetype:generate,根据提示选择合适的 Archetype 来创建项目。例如,创建一个简单的 Java 项目:

mvn archetype:generate \-DgroupId=com.example \-DartifactId=example-project \-DarchetypeArtifactId=maven-archetype-quickstart \-DinteractiveMode=false

这将生成一个包含 src/main/javasrc/test/java 目录的基本 Java 项目结构。

2. 编写 POM 文件

编辑 pom.xml 文件,添加项目所需的信息,如依赖项、插件配置等。例如,添加 JUnit 作为测试依赖:

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>
</dependencies>

3. 添加依赖项

pom.xml 中的 <dependencies> 部分添加所需的库。Maven 会自动从仓库下载这些依赖项及其传递性依赖。例如,添加 Spring Framework 作为依赖:

<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.22</version>
</dependency>

4. 运行 Maven 命令

使用 mvn 命令来执行各种构建任务。常用命令包括:

  • mvn clean: 清理项目,删除 target 目录中的编译输出。
  • mvn compile: 编译项目的源代码。
  • mvn test: 运行单元测试。
  • mvn package: 打包项目,生成 JAR 或 WAR 文件。
  • mvn install: 将打包好的制品安装到本地仓库。
  • mvn deploy: 将打包好的制品发布到远程仓库。

例如,清理并编译项目:

mvn clean compile

POM 文件

1. 继承和聚合

  • 继承:通过父 POM 实现模块间的继承。父 POM 可以集中管理依赖项的版本、插件配置等,子模块可以直接继承这些配置,而不需要重复声明。例如:
<parent><groupId>com.example</groupId><artifactId>parent-pom</artifactId><version>1.0.0</version>
</parent>
  • 聚合:多模块项目中,父 POM 可以使用 <modules> 元素来包含多个子模块。例如:
<modules><module>module1</module><module>module2</module>
</modules>

2. 属性 (Properties)

在 POM 中定义属性,可以在整个项目中引用这些属性值,方便维护和修改。例如:

<properties><java.version>1.8</java.version><spring.version>5.3.22</spring.version>
</properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency>
</dependencies>

3. 依赖管理 (Dependency Management)

在父 POM 中集中管理依赖项的版本,子模块可以直接引用而不必重复声明版本号。例如:

<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.22</version></dependency></dependencies>
</dependencyManagement>

子模块中只需声明依赖项,而不需要指定版本号:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency>
</dependencies>

4. 依赖范围 (Scope)

Maven 支持多种依赖范围,用于控制依赖项在不同构建阶段的行为:

  • compile: 默认范围,表示该依赖项在编译、测试和运行时都需要。
  • provided: 表示该依赖项在编译和测试时需要,但在运行时由容器或 JVM 提供(如 Servlet API)。
  • runtime: 表示该依赖项在运行时需要,但在编译时不需要。
  • test: 表示该依赖项仅在测试时需要(如 JUnit)。
  • system: 类似于 provided,但需要显式指定依赖项的本地路径。

例如:

<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope>
</dependency>

生命周期和插件

1. 生命周期绑定

Maven 的生命周期阶段可以绑定插件的目标。例如,maven-compiler-plugincompile 目标默认绑定到 compile 阶段,maven-surefire-plugintest 目标默认绑定到 test 阶段。

用户可以通过 <build> 部分显式绑定插件目标到特定的生命周期阶段。例如:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><executions><execution><phase>compile</phase><goals><goal>compile</goal></goals></execution></executions></plugin></plugins>
</build>

2. 常用插件

Maven 提供了许多常用的插件,帮助完成各种构建任务。一些常见的插件包括:

  • maven-compiler-plugin: 用于编译 Java 源代码。
  • maven-surefire-plugin: 用于运行单元测试。
  • maven-jar-plugin: 用于打包 JAR 文件。
  • maven-war-plugin: 用于打包 WAR 文件。
  • maven-clean-plugin: 用于清理项目。
  • maven-install-plugin: 用于将制品安装到本地仓库。
  • maven-deploy-plugin: 用于将制品发布到远程仓库。

3. 编写自定义插件

如果现有的插件无法满足需求,用户可以编写自己的 Maven 插件。Maven 插件本质上是一个 Java 程序,实现了 org.apache.maven.plugin.Mojo 接口。编写插件的过程相对复杂,建议先熟悉 Maven 的架构和插件机制后再进行尝试。

高级操作

1. 多模块项目

多模块项目是指一个项目由多个子模块组成,每个子模块可以独立构建,但共享一些共同的配置。多模块项目通常有一个父 POM 来管理所有子模块的依赖和插件配置。

2. 发布到仓库

将项目发布的制品上传到远程仓库,以便其他项目可以引用。常用的远程仓库包括 Maven Central、JFrog Artifactory、Sonatype Nexus 等。发布前需要配置 settings.xml 中的服务器认证信息,并在 pom.xml 中指定仓库地址。例如:

<distributionManagement><repository><id>my-repo</id><url>https://repo.mycompany.com/releases</url></repository><snapshotRepository><id>my-snapshot-repo</id><url>https://repo.mycompany.com/snapshots</url></snapshotRepository>
</distributionManagement>

3. 持续集成 (CI) 和持续交付 (CD)

将 Maven 与 CI/CD 工具(如 Jenkins, GitLab CI, Travis CI 等)结合使用,实现自动化构建和部署流程。CI/CD 工具可以通过触发 Maven 构建命令,在每次代码提交后自动执行构建、测试、打包和部署任务。例如,在 Jenkins 中配置 Maven 构建任务:

pipeline {agent anystages {stage('Build') {steps {sh 'mvn clean install'}}stage('Test') {steps {sh 'mvn test'}}stage('Deploy') {steps {sh 'mvn deploy'}}}
}

4. 性能优化

Maven 构建性能可以通过以下方式进行优化:

  • 并行化构建:使用 -T 参数并行化构建任务。例如,mvn clean install -T 4 表示使用 4 个线程并行构建。
  • 跳过测试:在不需要运行测试的情况下,可以使用 -DskipTests=true 参数跳过测试阶段。例如,mvn clean install -DskipTests=true
  • 配置 .mvn/maven.config 文件:可以在项目根目录下创建 .mvn/maven.config 文件,添加一些常用的构建参数。例如:
-Dmaven.test.skip=true
-T 4

5. 安全性和最佳实践

  • 签名制品:在发布制品时,建议对制品进行数字签名,确保其完整性和来源可信。Maven 提供了 maven-gpg-plugin 来实现这一点。
  • 使用安全的仓库:确保使用的远程仓库是可信的,并启用 HTTPS 协议来加密传输。
  • 定期更新依赖项:定期检查并更新项目中的依赖项,避免使用过时或存在安全漏洞的库。
  • 遵循社区的最佳实践:参考 Maven 官方文档和社区资源,学习如何安全地使用 Maven,确保项目的安全和稳定。

示例代码

单模块项目常用配置

以下是一个典型的单模块 Maven 项目的 pom.xml 配置文件示例。我们将详细解释每一行代码的作用。

<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"><!-- POM 文件的版本 --><modelVersion>4.0.0</modelVersion><!-- 项目的基本信息 --><groupId>com.example</groupId> <!-- 项目的组织或公司,通常是反向域名 --><artifactId>single-module-project</artifactId> <!-- 项目的唯一标识符 --><version>1.0.0</version> <!-- 项目的版本号 --><packaging>jar</packaging> <!-- 项目的打包类型,默认为 jar --><!-- 项目属性,可以在整个项目中引用 --><properties><java.version>1.8</java.version> <!-- 指定 Java 版本 --><maven.compiler.source>1.8</maven.compiler.source> <!-- 指定编译源代码的 Java 版本 --><maven.compiler.target>1.8</maven.compiler.target> <!-- 指定编译目标的 Java 版本 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 指定源码编码格式 --></properties><!-- 依赖管理,集中管理依赖项的版本 --><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.22</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope> <!-- 仅在测试时需要 --></dependency></dependencies></dependencyManagement><!-- 项目依赖项 --><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency></dependencies><!-- 构建配置 --><build><!-- 指定源码和资源文件的目录 --><sourceDirectory>src/main/java</sourceDirectory><resources><resource><directory>src/main/resources</directory></resource></resources><!-- 测试源码和资源文件的目录 --><testSourceDirectory>src/test/java</testSourceDirectory><testResources><testResource><directory>src/test/resources</directory></testResource></testResources><!-- 插件配置 --><plugins><!-- 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>${java.version}</source> <!-- 使用属性中的 Java 版本 --><target>${java.version}</target></configuration></plugin><!-- 测试插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version><configuration><includes><include>**/*Test.java</include> <!-- 包含所有以 Test 结尾的测试类 --></includes></configuration></plugin><!-- 打包插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><archive><manifest><mainClass>com.example.MainApp</mainClass> <!-- 指定主类,用于运行 jar 文件 --></manifest></archive></configuration></plugin></plugins></build>
</project>

多模块项目常用配置

以下是一个典型的多模块 Maven 项目的 pom.xml 配置文件示例。我们将详细解释每一行代码的作用。

父 POM 配置

父 POM 负责管理所有子模块的依赖和插件配置。以下是父 POM 的配置文件示例:

<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"><!-- POM 文件的版本 --><modelVersion>4.0.0</modelVersion><!-- 项目的基本信息 --><groupId>com.example</groupId> <!-- 项目的组织或公司,通常是反向域名 --><artifactId>multi-module-parent</artifactId> <!-- 父 POM 的唯一标识符 --><version>1.0.0</version> <!-- 项目的版本号 --><packaging>pom</packaging> <!-- 父 POM 的打包类型为 pom,表示它不生成任何实际的制品 --><!-- 项目属性,可以在整个项目中引用 --><properties><java.version>1.8</java.version> <!-- 指定 Java 版本 --><maven.compiler.source>1.8</maven.compiler.source> <!-- 指定编译源代码的 Java 版本 --><maven.compiler.target>1.8</maven.compiler.target> <!-- 指定编译目标的 Java 版本 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 指定源码编码格式 --></properties><!-- 依赖管理,集中管理依赖项的版本 --><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.22</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope> <!-- 仅在测试时需要 --></dependency></dependencies></dependencyManagement><!-- 插件管理,集中管理插件的版本 --><build><pluginManagement><plugins><!-- 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>${java.version}</source> <!-- 使用属性中的 Java 版本 --><target>${java.version}</target></configuration></plugin><!-- 测试插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.2</version><configuration><includes><include>**/*Test.java</include> <!-- 包含所有以 Test 结尾的测试类 --></includes></configuration></plugin><!-- 打包插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><archive><manifest><mainClass>com.example.MainApp</mainClass> <!-- 指定主类,用于运行 jar 文件 --></manifest></archive></configuration></plugin></plugins></pluginManagement></build><!-- 子模块列表 --><modules><module>module1</module> <!-- 子模块 1 的相对路径 --><module>module2</module> <!-- 子模块 2 的相对路径 --></modules>
</project>
子模块 1 配置

子模块 1 的 pom.xml 文件继承了父 POM 的配置,并可以根据需要添加额外的依赖或插件配置。以下是子模块 1 的配置文件示例:

<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"><!-- 继承父 POM --><parent><groupId>com.example</groupId><artifactId>multi-module-parent</artifactId><version>1.0.0</version></parent><!-- 项目的基本信息 --><groupId>com.example.module1</groupId> <!-- 子模块 1 的组织或公司 --><artifactId>module1</artifactId> <!-- 子模块 1 的唯一标识符 --><version>1.0.0</version> <!-- 子模块 1 的版本号 --><packaging>jar</packaging> <!-- 子模块 1 的打包类型,默认为 jar --><!-- 项目依赖项 --><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency></dependencies><!-- 构建配置 --><build><!-- 指定源码和资源文件的目录 --><sourceDirectory>src/main/java</sourceDirectory><resources><resource><directory>src/main/resources</directory></resource></resources><!-- 测试源码和资源文件的目录 --><testSourceDirectory>src/test/java</testSourceDirectory><testResources><testResource><directory>src/test/resources</directory></testResource></testResources></build>
</project>
子模块 2 配置

子模块 2 的 pom.xml 文件同样继承了父 POM 的配置,并可以根据需要添加额外的依赖或插件配置。以下是子模块 2 的配置文件示例:

<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"><!-- 继承父 POM --><parent><groupId>com.example</groupId><artifactId>multi-module-parent</artifactId><version>1.0.0</version></parent><!-- 项目的基本信息 --><groupId>com.example.module2</groupId> <!-- 子模块 2 的组织或公司 --><artifactId>module2</artifactId> <!-- 子模块 2 的唯一标识符 --><version>1.0.0</version> <!-- 子模块 2 的版本号 --><packaging>jar</packaging> <!-- 子模块 2 的打包类型,默认为 jar --><!-- 项目依赖项 --><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency></dependencies><!-- 构建配置 --><build><!-- 指定源码和资源文件的目录 --><sourceDirectory>src/main/java</sourceDirectory><resources><resource><directory>src/main/resources</directory></resource></resources><!-- 测试源码和资源文件的目录 --><testSourceDirectory>src/test/java</testSourceDirectory><testResources><testResource><directory>src/test/resources</directory></testResource></testResources></build>
</project>

总结

Maven的优缺点

  • 优点
    • 提供了完整的生命周期管理,简化了项目的构建和部署过程。
    • 强大的依赖管理机制,避免了依赖冲突和版本不一致的问题。
    • 标准化和可扩展性使得Maven能够适应不同的项目需求。
  • 缺点
    • 对于初学者来说,Maven的体系相对庞大,学习曲线较陡。
    • 在项目依赖过多的情况下,首次导入项目可能需要较长的时间来加载依赖。
    • 在国内使用Maven中央仓库时,可能会遇到下载速度过慢的问题。

综上所述,Maven是一个功能强大且灵活的项目管理和构建自动化工具,特别适用于Java项目。通过合理的配置和使用,Maven可以显著提高开发效率和项目质量。

关键字:沈阳建设工程信息网可访问中项网_三国网页游戏排行榜前十名_网站收录提交入口网址_googleplay商店

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: