阿里云 SDK 动态IP域名解析

39 篇文章 1 订阅
10 篇文章 0 订阅

阿里云提供 aliyun sdk,可以通过申请获得的 <accessKeyId> 和 <accessSecret> 在 sdk 环境下,直接控制相应账号下阿里云的所有产品,例如设置域名解析、启动VPC、或者推送短信等等。

目录

获取阿里云key

代码测试

读取解析信息

更新解析内容

获取当前 IP 地址

第三方网站获取 IP 地址

路由器系统获取 IP 地址

Windows API 获取本机 IP 地址

完整演示

批处理编译 aliyun sdk


这里我们研究如何在动态IP状态下,使用 aliyun sdk 实时修改在阿里云注册的域名的解析地址,以实现在动态IP情况下使用域名访问的需求。

 

获取阿里云key

首先需要申请 <accessKeyId> 和 <accessSecret>:

浏览器进入 https://www.aliyun.com/,单击“控制台"

 控制台内,右上角图标位置,鼠标悬浮,出现弹出菜单,单击"accesskeys"

对话框选择"继续使用accessKey"

单击“创建AccessKey”

会即刻开始下载CSV文件,<accessKeyId> 和 <accessSecret> 信息就在其中

下载阿里云 SDK,这里下载 java 的 sdk,其它还有 python、php 等环境的 sdk。

这里是编译好的 jar 文件,根据需要下载自己所需的 https://develop.aliyun.com/tools/sdk#/java

如果希望得到源码,可以到 https://github.com/aliyun/aliyun-openapi-java-sdk 通过 git 获取全部源码,再用 mvn 编译,如果你的 maven 仓库已经有一定积累,mvn 编译时很快就可以完成,文章末尾我写了一个批处理,可以自动编译该 git 下的所有源码,如果你们有不同的方法,能够一次全部编译的,也希望能分享一下。

代码测试

读取解析信息

取得某个域名下的解析状态(刚才下载CVS文件内的内容,需要替换代码内相应的部分):

package test;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsRequest;
import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsResponse;
import com.aliyuncs.alidns.model.v20150109.UpdateDomainRecordRequest;
import com.aliyuncs.alidns.model.v20150109.UpdateDomainRecordResponse;
import java.io.IOException;

public class LoadDomain
{

  public static void main(String[] args)
  {
    // aliyun 认证
    // 需要将下载的 accessKeyId、accessSecret 替换下面的 <accessKeyId>、<accessSecret>
    DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
    IAcsClient client = new DefaultAcsClient(profile);

    // 获取解析记录列表
    DescribeDomainRecordsRequest request = new DescribeDomainRecordsRequest();
    // 这里填各位自己的域名,填错域名将不能正确获取信息
    request.setDomainName("inull.net");

    try
    {
      // 提交需要取信息的域名
      // 并得到返回结果
      DescribeDomainRecordsResponse response = client.getAcsResponse(request);
      // 结果 (domain 信息)
      String strDomainInfo = new Gson().toJson(response);

      // 解析得到的域名 (json格式) 信息
      ObjectMapper mapper = new ObjectMapper();
      final JsonNode jsonDomainInfo = mapper.readTree(strDomainInfo);

      // 遍历 array
      final JsonNode jsonDomainRecords = jsonDomainInfo.get("domainRecords");
      if (jsonDomainRecords.isArray() == true)
      {
        for (final JsonNode jsonDomain : jsonDomainRecords)
        {
          // 输出每条一解析信息
          System.out.println(jsonDomain);
        }
      }
    }
    catch (ServerException e)
    {
      e.printStackTrace();
    }
    catch (ClientException e)
    {
      System.out.println("ErrCode:" + e.getErrCode());
      System.out.println("ErrMsg:" + e.getErrMsg());
      System.out.println("RequestId:" + e.getRequestId());
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }

  }

}

得到结果,其中 recordId 作为修改域名信息时编号

{"domainName":"inull.net","recordId":"17*************80","rR":"@","type":"A","value":"10.10.10.30","tTL":600,"line":"default","status":"ENABLE","locked":false,"weight":1}
{"domainName":"inull.net","recordId":"17*************80","rR":"blog","type":"A","value":"10.10.10.30","tTL":600,"line":"default","status":"ENABLE","locked":false,"weight":1}
{"domainName":"inull.net","recordId":"17*************00","rR":"clac","type":"A","value":"10.10.10.30","tTL":600,"line":"default","status":"ENABLE","locked":false,"weight":1}
{"domainName":"inull.net","recordId":"17************408","rR":"www","type":"A","value":"10.10.10.30","tTL":600,"line":"default","status":"ENABLE","locked":false,"weight":1}
{"domainName":"inull.net","recordId":"3******1","rR":"@","type":"MX","value":"mxdomain.qq.com.","tTL":3600,"priority":10,"line":"default","status":"ENABLE","locked":false,"weight":1}

更新解析内容

package test;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;
import com.aliyuncs.alidns.model.v20150109.*;

public class UpdateDomain
{

  public static void main(String[] args)
  {
    // aliyun 认证
    // 需要替换 <accessKeyId> <accessSecret>
    DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
    IAcsClient client = new DefaultAcsClient(profile);

    // 更新域名解析
    UpdateDomainRecordRequest request = new UpdateDomainRecordRequest();
    // 某个解析的唯一编号,在上一个测试中获取
    request.setRecordId("17**********08");
    // 解析的类型
    request.setType("A");
    // 二级域名
    request.setRR("www");
    // 新的 IP 地址 (这里我随便写了个地址)
    request.setValue("10.10.10.99");
    // DNS更新时间 (单位秒,最少10分钟)
    request.setTTL((long) 1200);

    try
    {
      UpdateDomainRecordResponse response = client.getAcsResponse(request);
      System.out.println(new Gson().toJson(response));
    }
    catch (ServerException e)
    {
      e.printStackTrace();
    }
    catch (ClientException e)
    {
      System.out.println("ErrCode:" + e.getErrCode());
      System.out.println("ErrMsg:" + e.getErrMsg());
      System.out.println("RequestId:" + e.getRequestId());
    }
  }
}

返回结果

刷新阿里云的域名控制台,可以看到域名解析的地址已经被更新

 

获取当前 IP 地址

第三方网站获取 IP 地址

http://2019.ip138.com/ic.asp 可以获取自己的 IP 地址,不过我估计前面那个 2019 的数值会不时的调整,到时需要修改相应的代码。
获取页面内容后,可以通过 jsoup 进行解析,下载地址 https://jsoup.org/。代码也没什么难度,这里就不提供代码了。

路由器系统获取 IP 地址

利用 java 的 NetworkInterFace 类获取指定接口的 IP 地址
https://blog.csdn.net/joyous/article/details/88882112

Windows API 获取本机 IP 地址

通过 Windows API (C++) 访问网络设备接口,遍历所有本机地址
https://blog.csdn.net/joyous/article/details/1489842

完整演示

在路由器上运行该程序,先由 Java 类 NetworkInterFace 获取接口地址,再由阿里云 (aliyun sdk) 将获得的 IP 填入相应的域名下实现动态域名解析。

/* 
 * 在动态 IP 地址的宽带上实现动态域名解析
 * 
 * 1. 通过 LocalNetwork 类获得 tun0 接口上的 IP 地址
 * 2. 利用阿里云 (aliyun sdk) DescribeDomainRecordsRequest 获取指定域名的 recordId
 * 3. 利用阿里云 (aliyun sdk) UpdateDomainRecordRequest 更新域名解析地址 
 * 
 */

package demo;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;

import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsRequest;
import com.aliyuncs.alidns.model.v20150109.DescribeDomainRecordsResponse;
import com.aliyuncs.alidns.model.v20150109.UpdateDomainRecordRequest;
import com.aliyuncs.alidns.model.v20150109.UpdateDomainRecordResponse;
import java.io.IOException;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class UpdateDomains
{
  private static final Logger logger = LogManager.getLogger(UpdateDomains.class);

  public static void main(String[] args)
  {
    // 需要重新解析的域名
    String strDomainName = "inull.net";
    // 新的 IP 地址
    String strMyIP = "0.0.0.0";
    // 10 分钟
    long timeout = 600;

    // 获取 tun0 接口的 IP 地址
    LocalNetworkInfo localNetworkInfo = new LocalNetworkInfo();
    // 稍后用于更新域名解析
    strMyIP = localNetworkInfo.GetLocalIP("tun0");
    // 若地址无效 返回
    if (strMyIP == null)
    {
      logger.info("未获得 tun0 的有效 IP 地址");
      return;
    }
    else
    {
      logger.info(String.format("tun0 ip: %s", strMyIP));
    }

    // aliyun 认证信息
    DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", <accessKeyId>, <accessSecret>);
    IAcsClient client = new DefaultAcsClient(profile);
    logger.info("aliyun auth pass");

    // 获取解析记录列表
    DescribeDomainRecordsRequest request = new DescribeDomainRecordsRequest();
    request.setDomainName(strDomainName);
    logger.info(String.format("resolve domain %s", strDomainName));

    try
    {
      // 提交需要取信息的域名
      // 并得到返回结果
      DescribeDomainRecordsResponse response = client.getAcsResponse(request);
      // 结果 (domain 信息)
      String strDomainInfo = new Gson().toJson(response);
      logger.info(String.format("response domains info: %s", strDomainInfo));

      // 解析得到的域名 (json格式) 信息
      ObjectMapper mapper = new ObjectMapper();
      final JsonNode jsonDomainInfo = mapper.readTree(strDomainInfo);

      // 取得 domainRecords (type array)
      final JsonNode jsonDomainRecords = jsonDomainInfo.get("domainRecords");
      if (jsonDomainRecords.isArray() == true)
      {
        for (final JsonNode jsonDomain : jsonDomainRecords)
        {
          try
          {
            Thread.sleep(1000);
          }
          catch (InterruptedException e)
          {
            e.printStackTrace();
          }

          logger.info("***");
          logger.info(jsonDomain.toString());

          final String strRecordId = jsonDomain.get("recordId").asText();
          final String strRR = jsonDomain.get("rR").asText();
          final String strType = jsonDomain.get("type").asText();

          // 解析类型 A
          if (strType.equals("A") == true)
          {
            // 主域名
            if (strRR.equals("@") == true)
            {
              UpdateDomainRecordRequest updateDomainRecordRequest = new UpdateDomainRecordRequest();
              // 以下必填
              updateDomainRecordRequest.setRecordId(strRecordId);
              updateDomainRecordRequest.setRR(strRR);
              updateDomainRecordRequest.setType(strType);
              updateDomainRecordRequest.setValue(strMyIP);
              // DNS 更新时间 选填
              updateDomainRecordRequest.setTTL(timeout);

              // 避免因 UpdateDomainRecordResponse 异常而跳出循环
              try
              {
                // 发送更新请求
                UpdateDomainRecordResponse updateDomainRecordResponse = client.getAcsResponse(updateDomainRecordRequest);
                // 取得结果并打印
                String strResponse = new Gson().toJson(updateDomainRecordResponse);
                logger.info(strResponse);
              }
              catch (ClientException e)
              {
                e.printStackTrace();

                logger.error("ErrCode:" + e.getErrCode());
                logger.error("ErrMsg:" + e.getErrMsg());
                logger.error("RequestId:" + e.getRequestId());
              }
            }
            // clac 域名, www 域名, blog 域名
            else if (strRR.equals("clac") == true || strRR.equals("www") == true || strRR.equals("blog") == true)
            {
              // 创建更新请求
              UpdateDomainRecordRequest updateDomainRecordRequest = new UpdateDomainRecordRequest();
              // 以下必填
              updateDomainRecordRequest.setRecordId(strRecordId);
              updateDomainRecordRequest.setRR(strRR);
              updateDomainRecordRequest.setType(strType);
              updateDomainRecordRequest.setValue(strMyIP);
              // DNS 更新时间 选填
              updateDomainRecordRequest.setTTL(timeout);

              // 避免因 UpdateDomainRecordResponse 异常而跳出循环
              try
              {
                // 发送更新请求
                UpdateDomainRecordResponse updateDomainRecordResponse = client.getAcsResponse(updateDomainRecordRequest);
                // 取得结果并打印
                String strResponse = new Gson().toJson(updateDomainRecordResponse);
                logger.info(strResponse);
              }
              catch (ClientException e)
              {
                e.printStackTrace();

                logger.error("ErrCode:" + e.getErrCode());
                logger.error("ErrMsg:" + e.getErrMsg());
                logger.error("RequestId:" + e.getRequestId());
              }
            }
            else
            {
              logger.info(String.format("该解析 %s 不处理", strRR));
            }
          }
          else
          {
            logger.info(String.format("该类型 %s 不处理", strType));
          }
        }
      }

      logger.info("done");
    }
    catch (ServerException e)
    {
      e.printStackTrace();
    }
    catch (ClientException e)
    {
      e.printStackTrace();

      logger.error("ErrCode:" + e.getErrCode());
      logger.error("ErrMsg:" + e.getErrMsg());
      logger.error("RequestId:" + e.getRequestId());
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }

  }

}

/*
 * 获取本地接口的 IP 地址
 */
class LocalNetworkInfo
{
  /**
   * 因为存在一个接口有多个 IP 地址,这里只返回接口的第一 IP 地址<br>
   * 传入接口名字, 类 UNIX 使用 FDDH 或者 ADSL 的拨入接口通常都是 tun0
   * 
   * @param strInterFaceName
   * @return
   */
  public String GetLocalIP(String strInterfaceName)
  {
    final Logger logger = LogManager.getLogger(LocalNetworkInfo.class);
    String strResult = null;

    try
    {
      logger.info("GetLocalIP ...");

      // 枚举所有接口
      Enumeration<NetworkInterface> enuNetworkInterface = NetworkInterface.getNetworkInterfaces();
      // 所有接口信息存入 ArrayList 对象
      ArrayList<NetworkInterface> arryNetworkInterface = Collections.list(enuNetworkInterface);

      logger.info("ArrayList GetLocalIP");

      // 遍历存入接口的 ArryList 对象
      Iterator<NetworkInterface> iteratorInterface = arryNetworkInterface.iterator();
      while (iteratorInterface.hasNext() == true)
      {
        // 得到一个借口给
        NetworkInterface networkInterface = iteratorInterface.next();
        // 获取每个接口中的所有ip网络接口集合,因为可能有子接口
        ArrayList<InetAddress> arryInetAddress = Collections.list(networkInterface.getInetAddresses());

        // 获取接口名
        final String strInterface = networkInterface.getName();

        logger.info(strInterface);

        // 遍历某个接口下的所有 IP 地址
        Iterator<InetAddress> iteratorAddress = arryInetAddress.iterator();
        while (iteratorAddress.hasNext() == true)
        {
          InetAddress inet = iteratorAddress.next();
          // 筛选地址类型
          if (inet instanceof Inet4Address)
          {
            // 列出 ipv4 地址
            String strIP = inet.getHostAddress();
            logger.info(strIP);
            // System.out.printf("%-10s %-5s %-6s %-15s\n", "InetfaceName:", strInterface, "
            // IPv4:", strIP);

            if (strInterfaceName.equals(strInterface) == true && strResult == null)
            {
              // 设置返回值
              strResult = strIP;
            }
          }
          else
          {
            // 列出 ipv6 地址
            String strIP = inet.getHostAddress();
            // System.out.printf("%-10s %-5s %-6s %-15s\n", "InetfaceName:", strInterface, "
            // IPv6:", strIP);
          }
        }
      }
    }
    catch (SocketException s)
    {
      s.printStackTrace();
    }

    return strResult;
  }
}

运行结果,获取了 tun0 的地址后,IP 地址更新到阿里云的域名解析,并且返回运行状态。
用操作系统的计划任务自动调用,例如 5 分钟调用一次,或者再增加一些 IP 变化后再进行解析将更完善,下次有空再补上。

 

批处理编译 aliyun sdk

多个项目集成在一起的工程,每个项目好像只能单独编译,否则就得自己写 pom.xml,那有些麻烦,所以就写了一个批处理来统一编译。

阿里云 SDK 的项目不时的会发生增减,直接运行下面的批处理可能会出现访问目录出错的可能,需要根据实际情况进行增补或者删减。

源码目录中 aliyun-openapi-java-sdk 创建一个 go.bat 的文件,并一下内容
好像只能一个一个来,不能全部一次性编译,所以,如果你们知道如何一次性编译也请分享一下。

#逐个进入单个项目的目录,用 call mvn 进行编译
#完成后回退一级目录后继续进入另一个项目进行编译

cd aliyun-java-sdk-actiontrail
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-aegis
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-afs
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-airec
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-alidns
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-alikafka
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-alimt
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-arms
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-arms4finance
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-baas
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-batchcompute
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-bss
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-bssopenapi
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cbn
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ccc
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ccs
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cdn
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cds
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cf
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-chatbot
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cloudapi
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cloudauth
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cloudesl
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cloudmarketing
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cloudphoto
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cloudwf
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cms
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-commondriver
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-core
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cr
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-crm
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-cs
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-csb
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-dataworks-public
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-dcdn
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-dds
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-dm
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-dms-enterprise
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-domain
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-domain-intl
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-drcloud
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-drds
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-dts
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-dyplsapi
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-dypnsapi
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-dyvmsapi
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-eci
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ecs
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-edas
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ehpc
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-emr
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ess
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-finmall
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-foas
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ft
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-gpdb
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-green
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-hpc
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-hsm
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-httpdns
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-idst
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-imagesearch
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-imm
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-industry-brain
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-iot
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-itaas
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ivision
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-jaq
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-jarvis
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-jarvis-public
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-kms
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-linkedmall
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-linkface
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-linkwan
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-live
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-lubancloud
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-lubanruler
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-market
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-mopen
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-mts
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-nas
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ocs
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-oms
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ons
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-openanalytics
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ossadmin
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ots
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-petadata
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-polardb
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-pts
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-push
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-pvtz
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-qualitycheck
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-r-kvstore
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ram
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-rdc
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-rds
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ros
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-rtc
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-saf
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-sas-api
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-scdn
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-slb
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-smartag
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-snsuapi
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-sts
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-tesladam
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-teslamaxcompute
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-teslastream
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-trademark
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-ubsms
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-uis
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-vod
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-vpc
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-waf
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-xspace
call mvn -DskipTests=true -Dgpg.skip install
cd ..

cd aliyun-java-sdk-yundun
call mvn -DskipTests=true -Dgpg.skip install
cd ..


参考资料:
https://help.aliyun.com/product/29697.html
https://help.aliyun.com/document_detail/29776.html?spm=a2c4g.11186623.6.636.59c35eb4jTrcBK
https://help.aliyun.com/document_detail/29774.html?spm=a2c4g.11186623.6.642.60be5eb43jk7tZ
资料来源
https://develop.aliyun.com/tools/sdk
https://github.com/aliyun/aliyun-openapi-java-sdk

Q群讨论 236201801

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值