maven+nexus

Maven介绍:

Maven是属于apache软件基金会下一个开源免费的项目,是跨平台的项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理,可以在代码进行部署的过程中自动解决项目中代码的依赖环境,需要从maven的镜像仓库中进行下载依赖环境,通常下载比较慢,企业中会在公司内部搭建nexus(私服),将构建项目中的依赖环境保存到nexus服务器中,提高访问速度

POM项目对象模型,是Maven工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等等

执行任务或目标时,Maven会在当前目录中查找POM。读取POM,获取所需的配置信息,然后执行目标POM中可以指定以下配置:项目依赖、插件、执行目标、项目构建profile、项目版本、项目开发列表、相关邮件列表信息

Mavne功能:

  1. mavne模型的Java项目对源代码、单元测试代码、资源、jar包等有规范和目录规划
  2. 解决项目间的依赖关系、版本不一致、版本冲突问题
  3. 合理的jar管理机制

应用场景: 从运维角度理解

  1. 原来项目中的jar包必须手动复制、粘贴到WEB-INF/lib项目下,而借助maven,可以将jar包仅仅保存在仓库中,有需要使用的工程只需要引用这个文件,并不需要重复复制到工程中
  2. 原来的项目中所需要的jar包都是提前下载好的,而maven在联网状态下会自动下载所需要的jar包。首先在本地仓库中找,找不到就在网上进行下载
  3. 原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而maven会自动将被依赖的jar包导进来
  4. 原来的项目一个项目就是一个工程,而借助maven可以讲一个项目拆分成多个工程

项目构建过程:

清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目

这六个步骤就是一个项目的完整构建过程

关于仓库:

本地仓库:

maven会将工程依赖的构件(jar包)从远程下载到本机一个目录下管理,每个电脑默认的仓库是在 "用户家目录/.m2/repository"

第三方仓库:

第三方仓库又称为内部中心仓库,也成为私服

私服:

一般是由公司自己设立的,只为本公司内部共享使用。它既可以作为公司内部构件协作和存档,也可以作为公用类库镜像缓存,减少在外部访问和下载的频率(使用了私服就减少了对中央仓库的访问)

中央仓库

maven内置了远程公用仓库:http://repo1.maven.org/maven2 这个公共仓库是由maven自己维护,里面有大量的常用类库,并包含了世界上大部分流行的开源项目构件,目前是以Java为主。工程以来的jar包如果本地仓库没有,默认从中央仓库下载

 

安装maven,需要jdk1.8版本:

[root@localhost ~]# rpm  -qa  | grep  jdk
copy-jdk-configs-1.2-1.el7.noarch
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
[root@localhost ~]# rpm  -e  java-1.7.0-openjdk-headless  --nodeps
[root@localhost ~]# rpm  -e  java-1.8.0-openjdk-headless  --nodeps
[root@localhost ~]# tar zxf jdk-8u211-linux-x64.tar.gz  -C  /usr/local/
[root@localhost ~]# vim  /etc/profile
在最后一行添加:
export  JAVA_HOME=/usr/local/jdk1.8.0_211
export  JRE_HOME=/usr/local/jdk1.8.0_211/jre
export  CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export  PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
[root@localhost ~]# source  /etc/profile
[root@localhost ~]# java  -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
[root@localhost ~]# tar zxf  apache-maven-3.6.1-bin.tar.gz 
[root@localhost ~]# mv  apache-maven-3.6.1   /usr/local/maven
修改环境变量将maven的命令天添加到系统环境变量中:
[root@localhost ~]# vim  /etc/profile
在最后一行添加:
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
[root@localhost ~]# source   /etc/profile
测试maven是否安装成功:
[root@localhost ~]# mvn  -v
//只要出现一下内容就说明maven安装成功
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_211/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-514.el7.x86_64", arch: "amd64", family: "unix"

构建第一个项目测试:

因为maven的仓库下载太慢,所以修改为阿里的:

[root@localhost ~]# vim  /usr/local/maven/conf/settings.xml
在159行添加:
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
</mirror>

mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径

<mirrorOf>central</mirrorOf>里是要替代的仓库的id。代理原有仓库,如果填写*表示替换所有仓库

[root@localhost ~]# mkdir  /tmp/testdir
[root@localhost ~]# cd  /tmp/testdir/
[root@localhost testdir]# mvn archetype:generate -DgroupId=com.wuhao.maven.quickstart -DartifactIdk=bdqnapp -DarchetypeArtifactId=maven-archetype-quickstart

创建一个maven项目(Java类型),有交互就回车确认,可加-DinteractiveMode=false取消交互过程

命令解释:

archetype:generate:创建一个简单的java项目

archetype 也就是原型,是一个 Maven 插件,准确说是一个项目模板,它的任务是根据模板创建一个项目结构。我们将使用 quickstart 原型插件创建一个简单的 java 应用程序。

-DgroupId:组织名,公司网址的反写(反向域名)+项目名称

-DartifactIdk:项目名或者模块名

- DarchetypeArtifactId:指定 ArchetypeId,maven-archetype-quickstart,创建一个简单的 Java 应用

-DinteractiveMode: 是否使用交互模式

 

这里需要手动输入项目名称其他都回车:

[root@localhost testdir]# cd  bdqnapp/
[root@localhost bdqnapp]# ls
pom.xml  src
[root@localhost bdqnapp]# cat 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.wuhao.maven.quickstart</groupId>
  <artifactId>bdqnapp</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>bdqnapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

POM文件参数解释:

[root@localhost bdqnapp]# cat  pom.xml

project: 根,这是对Project添加一些根元素的约束信息

modelversion指定当前maven模型的版本号

grouopId应该是公司名或者组织名。一般来说groupID有三个部分组成,每个部分之间以“.”分隔,第一部分是项目的用途,比如用于商业的就是com,用于非商业盈利性组织的就是org,第二部分是公司名,比如tentxun/baidu/alibaba,第三部分是你的项目名

artifactId可以认为是maven构建的项目名,比如你的项目中有子项目,就可以使用“项目名-子项目的命名方式

packaging 指定生成的格式(jar/war/rar/pom/ear)

version版本号,SNAPSHOT意味快照,说明该项目还在开发中,是不稳定的版本

name项目的名称, Maven产生的文档用

url项目主页的url,Maven产生的文档用

dependencies标签:指定开发构建(jar包)

JUnit是一个Java语言的单元测试框架

本地仓库目录结构:

[root@localhost ~]# cd  /root/.m2/repository/
[root@localhost repository]# ls
antlr  asm  commons-codec  commons-collections  commons-io  commons-lang  jdom  net  org

Maven文件配置:

Maven setting.xml存在两个地方

  1. 安装的目录 /usr/local/apache-maven-3.6.0/conf/settings.xml
  2. 用户的目录 /root/.m2/settings.xml

其中,安装目录配置又叫做全局配置,用户目录配置被称为用户配置。如果两者都存在,他们的内容将被合并,并且用户范围的settings.xml优先。

默认用户目录不存在配置文件,可以copy maven安装目录下的settings.xml到用户目录

常用配置修改:

  1. 修改本地仓库存储路径,默认值是/root/.m2/repository 可在settings.xml中的localrepository修改成自己需要的目录
  2. 如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,需要离线模式下,设置offline属性,设置为true,默认为false
  3. 修改中央仓库服务器,修改配置文件中便签,添加或修改镜像地址

maven常用命令:

编译:mvn compile

[root@localhost bdqnapp]# mvn   compile

[root@localhost bdqnapp]# ls
pom.xml  src  target

/target    打包输出目录,如打包好的jar或war文件

/target/classes 编译输出目录

/target/test-classes    测试编译输出目录

测试:mvn  test

[root@localhost bdqnapp]# mvn test

清理:mvn  clean

[root@localhost bdqnapp]# mvn  clean

[root@localhost bdqnapp]# ls
pom.xml  src

删除target目录,也就是将class文件等删除

打包:mvn  package

[root@localhost bdqnapp]# mvn  package

[root@localhost bdqnapp]# ls
pom.xml  src  target
[root@localhost bdqnapp]# ls  target/
bdqnapp-1.0-SNAPSHOT.jar  maven-archiver  surefire-reports
classes                   maven-status    test-classes

安装:mvn  install

将压缩文件jar包或者war包上传到本地仓库

[root@localhost bdqnapp]# mvn  install

[root@localhost bdqnapp]# ls  /root/.m2/repository/com/wuhao/maven/quickstart/bdqnapp/1.0-SNAPSHOT/
bdqnapp-1.0-SNAPSHOT.jar  maven-metadata-local.xml
bdqnapp-1.0-SNAPSHOT.pom  _remote.repositories

发布:mvn deploy

将包上传到私服,暂无私服环境,此模块后续补充

命令生命周期

maven基于构建生命周期这个中心概念,这意味着构建和分发特定项目的过程被明确定义

例如:直接使用maven install命令对项目进行上传到本地仓库,那么前面所有的步骤将会自动执行,比如源代码的编译、打包等等

构建一个web项目,打出war包:

[root@localhost testdir]# mvn archetype:generate -DgroupId=cn.bdqn.bdqnweb -DartifactId=bdqnweb -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

[root@localhost testdir]# ls
bdqnapp  bdqnweb
[root@localhost testdir]# cd  bdqnweb/
[root@localhost bdqnweb]# cat src/main/webapp/index.jsp 
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

打包成war包:

[root@localhost bdqnweb]# mvn  package
[root@localhost bdqnweb]# ls
pom.xml  src  target
[root@localhost bdqnweb]# ls  target/
bdqnweb  bdqnweb.war  classes  maven-archiver

搭建tomcat,经war包放入tomcat网页根目录中,启动tomcat访问测试:

[root@localhost ~]# tar zxf apache-tomcat-8.5.35.tar.gz 
[root@localhost ~]# mv  apache-tomcat-8.5.35  /usr/local/tomcat
[root@localhost ~]# cd  /tmp/testdir/bdqnweb/target/
[root@localhost target]# cp  bdqnweb.war   /usr/local/tomcat/webapps/
[root@localhost target]# ls  /usr/local/tomcat/webapps/
bdqnweb  bdqnweb.war  docs  examples  host-manager  manager  ROOT

浏览器访问:192.168.1.10:8080/bdqnweb

 

Nexus介绍:

Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器

Nexus不是Maven的核心概念,它仅仅是一种衍生出来的特殊的Maven仓库。对于Maven来说,仓库只有两种:本地仓库和远程仓库

本地仓库就是我们在maven的setting.xml中配置的本地仓库地址。由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库是maven默认的远程仓库

私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载

jboss是一个开放源代码的应用服务器 java .net是指java仓库和.net仓库

Nexus的功能:

  1. 节省外网带宽。大量对于外部仓库的重复请求会消耗带宽,利用私服代理外部仓库,可以消除对外的重复构件下载,降低带宽的压力
  2. 加速Maven构建。加速Maven构建。不停地连接请求外部仓库十分的耗时,Maven在执行构建的时候不停地检查远程仓库的数据。利用私服,Maven只检查局域网的数据,提高构建的速度
  3. 部署第三方构件。部署第三方构件。当某个构件无法从任何一个外部远程仓库获得。建立私服之后,便可以将这些构件部署到私服,供内部的Maven项目使用
  4. 提高稳定性,增强控制。提高稳定性,增强控制。Maven构建高度依赖于远程仓库,因此,当网络不稳定的时候,Maven构建也会变得不稳定,甚至无法构建。私服缓存了大量构建,即使暂时没有网络,Maven也可以正常的运行
  5. 降低中央仓库的负荷。降低中央仓库的负荷。使用私服可以避免很多对中央仓库的重复下载,降低中央仓库的压力

安装nexus:

[root@localhost ~]# mkdir  /usr/local/nexus
[root@localhost ~]# tar zxf nexus-3.17.0-01-unix.tar.gz   -C  /usr/local/nexus/
[root@localhost ~]# useradd   nexus
[root@localhost ~]# chown  -R  nexus  /usr/local/nexus/
[root@localhost nexus]# ln -s /usr/local/nexus/nexus-3.17.0-01/bin/nexus  /usr/local/bin/
[root@localhost ~]# cd  /usr/local/nexus/
[root@localhost nexus]# ls
nexus-3.17.0-01  sonatype-work

nexus-3.17.0-01:为应用目录

sonatype-work:为工作目录,存放镜像仓库

运行内存和工作目录nexus-3.17.0-01/bin/nexus.vmoptions (修改对应字段即可)

运行监听地址和端口nexus-3.17.0-01/etc/nexus-default.properties

Nexus默认运行的端口为8081,这个版本不能使用root用户启动,要不会报下面的错误

[root@localhost nexus]# nexus  start
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Starting nexus

启动nexus:

[root@localhost nexus]# su  nexus
[nexus@localhost nexus]$ nexus  start
Starting nexus
切回root用户产看端口是否启动:
[root@localhost nexus]# netstat  -anput  |  grep  8081
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      45664/java

浏览器访问:192.168.1.10:8081

查看密码登录:

[root@localhost nexus]# cat  /usr/local/nexus/sonatype-work/nexus3/admin.password
14cf0ba3-d905-45f5-a3ee-75787e81b5ad

登录成功后需要修改密码:

开启匿名用户访问权限:

创建角色和用户:

默认仓库类型:

group(仓库组类型):又叫组仓库,用于方便开发人员,自己设定的仓库

hosted(宿主类型):内部项目的发布仓库(内部开发人员发布上去存放的仓库)

proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值,即被代理的远程仓库的路径)

virtual(虚拟类型):虚拟仓库(这个基本上用不到)

Public Repositories下的仓库类型

3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库,即第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去;

Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库

Central: 用来代理maven中央仓库中发布版本构件的仓库

entral M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库

Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库

Releases: 内部的模块中release模块的发布仓库,用来部署管理内部的发布版本构件的宿主类型仓库;release是发布版本;

Snapshots:发布内部的SNAPSHOT模块的仓库,用来部署管理内部的快照版本构件的宿主类型仓库;snapshots是快照版本,也就是不稳定版本

开启release的重复发版权限:

开发中需要重复发版,则需要开启release类型仓库的对应权限设置 allow redeploy

设置代理仓库(阿里云maven仓库:

将添加的阿里云proxy加入默认group中:

点击页面下的save创建完成后再次点进来就会看到当前nexus地址:

常见使用场景

重点:

release发版仓库(nexus默认已建立:maven-releasees)

snapshot 测试中心快照仓库(nexus默认已建立:maven-snapshots)

central 中央仓库 (nexus默认已建立:maven-central)

关于组:在nexus中可以建立组,将不同类型仓库集合在一起(nexus默认已建立:maven-public)

场景一: 自定义新建proxy类型仓库,在maven配置中分别配置不同调用地址,或是将自定义新建的proxy仓库统一加入一个组,在maven配置中调用一个地址

场景二: 使用maven已经建立好的proxy仓库,且使用已建立好的组(maven-public)配置maven调用地址

场景一和场景二本质上讲没有什么变化,根据公司开发习惯和需求进行配置即可

Mavne配置nexus私服,将远程仓库设置成本地搭建的nuxus私服

回到maven的配置文件路径修改主配置文件

[root@localhost ~]# vim  /usr/local/maven/conf/settings.xml
在之前添加阿里仓库的位置下添加:
    <mirror>
      <id>nexus-bdqnconf</id>
      <mirrorOf>*</mirrorOf>
      <name>nexus bdqnconf</name>
      <url>http://192.168.1.10:8081/repository/maven-public/</url>
</mirror>

在</profiles>下面添加:
     <profile>
       <id>bdqnconf</id>

      <repositories>
         <repository>
           <id>nexus</id>
           <url>http://192.168.1.10:8081/repository/maven-public/</url>
           <releases>
             <enable>true</enable>
           </releases>
           <snapshots>
             <enable>true</enable>
           </snapshots>
        </repository>
       </repositories>

      <pluginRepositories>
        <pluginRepository>
          <id>nexus</id>
           <id>nexus</id>
           <url>http://192.168.1.10:8081/repository/maven-public/</url>
           <releases>
             <enable>true</enable>
           </releases>
           <snapshots>
             <enable>true</enable>
           </snapshots>
        </repository>
       </repositories>

      <pluginRepositories>
        <pluginRepository>
          <id>nexus</id>
          <url>http://192.168.1.10:8081/repository/maven-public/</url>
           <releases>
            <enable>true</enable>
          </releases>
          <snapshots>
             <enable>true</enable>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
     </profile>
激活上面的profile,<activeProfile>里面的内容一定要上面profile的id
  <activeProfiles>
    <activeProfile>bdqnconf</activeProfile>
  </activeProfiles>

创建一个maven项目进行测试,先删除本地仓库的缓存:

[root@localhost ~]# rm  -rf  /root/.m2/repository/*
构建项目:
[root@localhost testdir]# mvn archetype:generate -DgroupId=cn.bdqn.bdqnweb -DartifactId=bdqnweb -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

 

将项目进行打包,回到nexus中查看是否有缓存依赖包:

[root@localhost testdir]# cd  bdqnweb/
[root@localhost bdqnweb]# ls
pom.xml  src  target
[root@localhost bdqnweb]# mvn  package

配置认证将打包好的项目上传到nexus中,不配置认证上传不了:

[root@localhost bdqnweb]# vim  /usr/local/maven/conf/settings.xml
在125行添加:
    <server>
      <id>test-nexus</id>
      <username>bdqndev</username>
      <password>123.com</password>
</server>
[root@localhost bdqnweb]# vim  pom.xml
在倒数第二行添加:
<distributionManagement>
        <snapshotRepository>
            <id>test-nexus</id>   //这里的id需要和setting配置文件中的id相同
            <name>Nexus Snapshot</name>
            <url>http://192.168.1.10:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
        <repository>
            <id>test-nexus</id>
            <name>Nexus releases</name>
            <url>http://192.168.1.10:8081/repository/maven-releases/</url>
        </repository>
</distributionManagement>

[root@localhost bdqnweb]# mvn  deploy

回到nexus中查看是否上传成功:

###如果在部署的过程中出现下面报错,这种错误是因为权限的问题,第一检查一下配置settings.xml的时候账号密码有没有写错,第二个检查一下settings.xml里的id标签和pom.xml文件中的id标签是否相同,不相同会报401的错误

上传maven-releases仓库:

如果要打release包,可以将pom文件中的SNAPSHOT标识去掉

把这行   <version>1.0-SNAPSHOT</version> 改成  <version>1.0</version>

再次上传maven包,可以在终端看到上传到releases仓库中:

[root@localhost bdqnweb]# mvn  deploy

上传第三方maven包到nexus私服中:

Maven添加第三方仓库地址(全局配置):

[root@localhost testdir]# vim  /usr/local/maven/conf/settings.xml
填写在刚才写的profile中:
        <repository>
          <id>3rdnexus</id>
          <url>http://192.168.1.10:8081/repository/3rd/</url>
          <release>
            <enable>true</enable>
          </release>
          <snapshots>
            <enable>true</enable>
          </snapshots>
        </repository>
添加一个3rd认证:
写在刚才的server下面就好:
    <server>
      <id>3rdnexus</id>
      <username>bdqndev</username>
      <password>123.com</password>
</server>

[root@localhost testdir]# ls
aliyun-sdk-oss-2.6.1.jar  bdqnapp  bdqnweb
[root@localhost testdir]# mvn deploy:deploy-file -DgroupId=com.aliyun.oss -DartifactId=aliyun-sdk-oss -Dversion=2.6.1 -Dpackaging=jar -Dfile=/tmp/testdir/aliyun-sdk-oss-2.6.1.jar -Durl=http://192.168.1.10:8081/repository/3rd/ -DrepositoryId=3rdnexus

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值