天天看點

阿裡雲 SDK 動态IP域名解析擷取阿裡雲key代碼測試擷取目前 IP 位址完整示範批處理編譯 aliyun sdk

阿裡雲提供 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/,單擊“控制台"

阿裡雲 SDK 動态IP域名解析擷取阿裡雲key代碼測試擷取目前 IP 位址完整示範批處理編譯 aliyun sdk

 控制台内,右上角圖示位置,滑鼠懸浮,出現彈出菜單,單擊"accesskeys"

阿裡雲 SDK 動态IP域名解析擷取阿裡雲key代碼測試擷取目前 IP 位址完整示範批處理編譯 aliyun sdk

對話框選擇"繼續使用accessKey"

阿裡雲 SDK 動态IP域名解析擷取阿裡雲key代碼測試擷取目前 IP 位址完整示範批處理編譯 aliyun sdk

單擊“建立AccessKey”

阿裡雲 SDK 動态IP域名解析擷取阿裡雲key代碼測試擷取目前 IP 位址完整示範批處理編譯 aliyun sdk

會即刻開始下載下傳CSV檔案,<accessKeyId> 和 <accessSecret> 資訊就在其中

阿裡雲 SDK 動态IP域名解析擷取阿裡雲key代碼測試擷取目前 IP 位址完整示範批處理編譯 aliyun sdk

下載下傳阿裡雲 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());
    }
  }
}
           

傳回結果

阿裡雲 SDK 動态IP域名解析擷取阿裡雲key代碼測試擷取目前 IP 位址完整示範批處理編譯 aliyun sdk

重新整理阿裡雲的域名控制台,可以看到域名解析的位址已經被更新

阿裡雲 SDK 動态IP域名解析擷取阿裡雲key代碼測試擷取目前 IP 位址完整示範批處理編譯 aliyun sdk

擷取目前 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 變化後再進行解析将更完善,下次有空再補上。

阿裡雲 SDK 動态IP域名解析擷取阿裡雲key代碼測試擷取目前 IP 位址完整示範批處理編譯 aliyun sdk

批處理編譯 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

繼續閱讀