阿里云 SDK 动态IP域名解析

article/2025/7/13 14:18:50

阿里云提供 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);// 遍历 arrayfinal 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();// 解析类型 Aif (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

 

 


http://chatgpt.dhexx.cn/article/Ae27BuM2.shtml

相关文章

图标字体收藏

智能LOGO设计生成器 最值得收藏的Bootstrap免费字体和图标网站 一. PNG透明图片素材网站&#xff0c;谁懒谁用呗。 1. PngImg号称是全世界最大的PNG透明背景图库&#xff0c;目前网站上收集了45000张左右去背图素材&#xff0c;都可以免费下载&#xff0c;并且允许非商业性使…

解密国内 BAT 等大厂前端技术体系之阿里篇

前端框架的不断变化&#xff0c;对不同行业产生了诸多的影响。目前&#xff0c;前端的发展趋势究竟是什么样的&#xff1f;为了解更多的前端趋势相关内容&#xff0c;让我们跟随本文&#xff0c;看一下像阿里巴巴这样的互联网大厂&#xff0c;是怎样做的。 进入 2019 年&#x…

解密国内BAT等大厂前端技术体系-阿里篇(长文建议收藏)

进入2019年&#xff0c;大前端技术生态似乎进入到了一个相对稳定的环境&#xff0c;React在2013年发布至今已经6年时间了&#xff0c;Vue 1.0在2015年发布&#xff0c;至今也有4年时间了。 整个业界在前端框架不断迭代中&#xff0c;也寻找到了许多突破方向&#xff0c;例如跨…

vue调试工具devtoos 初探;vue阿里图标库的引用;解决子组件内容不刷新的问题;

记录几个比较有用的功能点&#xff1a; 一&#xff0c;关于前端调试 可能是我的意识还是在Visual C层面&#xff0c;在我的理解里面&#xff0c;如果没有单步跟踪&#xff0c;那就不是在编程。看到之前的前端同事开发程序的时候都是不停的用console.log&#xff0c;感觉效率很…

购物车--订单模块,练习完成

目标&#xff1a; 在购物车页面&#xff0c;增加一个创建订单的超链接。通过创建订单&#xff0c;在Order表里新增一条数据&#xff0c;同时把session中的订单条目都保存到数据库中。 1、创建两个表&#xff0c;orders用来具体存储每一个订单的细节&#xff0c;order_用来存储…

订单操作-查询所有订单代码实现

订单查询 订单查询页面 order-list.jsp Controller Controller RequestMapping("/orders") public class OrdersController {Autowiredprivate IOrdersService ordersService;//未分页RequestMapping("/findAll.do")public ModelAndView findAll(Request…

企业网上下单订货管理软件源码搭建功能介绍|移讯云订货通订单管理系统

网上下单订货管理软件源码搭建功能介绍|移讯云订货通订单管理系统 一&#xff1a;系统概述和用途 系统基于网络&#xff0c;实现厂家和代理商批发商通过网络下单订货功能。 什么是移讯云订货通。什么是企业订货管理系统。 是一款针对中小型企业通过网络实现&#xff0c;厂家…

订单服务-----功能实现逻辑

订单服务的实现流程&#xff08;确认订单->提交订单->支付&#xff09; 1、整合SpringSession 使用SpringSession的目的是来解决分布式session不同步不共享的问题&#xff0c;其实就是为了让登录信息在订单微服务里共享 注意&#xff1a;由于这里使用springsession的用…

SMBMS订单管理系统(手把手教细致讲解实现全过程) (七)

实现用户管功能 刚刚访问密码直接走前端 现在要发起请求走Servlet&#xff0c;Servlet处理后返回前端页面 Servlet 处理请求调用业务返回页面 业务要查询用户列表&#xff0c;查询角色列表&#xff0c;为了实现分页&#xff0c;需查询pageSize总数。查询从Service层到Dao层…

【电商开发手册】订单-下单

下单需求 所谓下单&#xff0c;本质上就是买卖双方通过确认一系列信息并且签订电子合同的过程 在电商平台的下单过程中&#xff0c;也需要确定买卖双方的一系列信息&#xff1a; 买方&#xff1a;用户确认收货地址、支付方式、配送方式等等 卖方&#xff1a;卖方需要进行供…

如何规范业务管理过程?低代码平台助力订单管理系统建设

编者按&#xff1a;本文介绍了订单管理系统的概念以及作用&#xff0c;并进一步展现了低代码平台是如何为企业实现订单管理科学化&#xff0c;规范业务管理过程的。 关键词&#xff1a;老厂商&#xff0c;流程管理&#xff0c;订单管理 什么是订单管理系统 订单管理系统(OMS)…

【网课平台】Day13.订单支付模式:生成支付二维码与查询支付

文章目录 一、需求&#xff1a;生成支付二维码1、需求分析2、表设计3、接口定义4、接口实现5、完善controller 二、需求&#xff1a;查询支付结果1、需求分析2、表设计与模型类3、接口定义4、接口实现步骤一&#xff1a;查询支付结果步骤二&#xff1a;保存支付结果&#xff08…

简单的订单系统

目录 一、数据库方面 二、jdbc配置文件 三、JDBC工具类 三、Users类 四、功能实现类 五、运行结果 一、数据库方面 USE foodmenu; DROP TABLE IF EXISTS menu7; CREATE TABLE menu7(num INT PRIMARY KEY,TypeDishes VARCHAR(255))CHARSETutf8; INSERT INTO menu7(num,Type…

天翎低代码平台实现的订单管理系统

编者按&#xff1a; 本文 主要介绍了基于天翎低代码平台实现的 订单管理系统以及 优势 &#xff0c;并进一步展现了低代码平台是如何为企业实现订单管理科学化 和 规范业务管理过程。 关键词&#xff1a;低代码平台、订单管理系统 1.订单管理系统是什么&#xff1f; 订单管理系…

初学订单-支付流程(思路)

主要说的是 生成订单的一系列操作 生成订单号---确认支付---生成支付链接--支付流程 支付流程 ---1.获取支付链接 1.1 三方接口&#xff0c;发送数据 ----1.2 返回数据解析&#xff08;包含支付订单id&#xff09;将链接也返回前端 ----2.进行支付 2.1 扫码支付 2.2 支付成…

订单系统的代码实现

面向接口的编程&#xff1a; 面向接口编程(Interface Oriented Programming:OIP)是一种编程思想&#xff0c;接口作为实体抽象出来的一种表现形式&#xff0c;用于抽离内部实现进行外部沟通&#xff0c;最终实现内部变动而不影响外部与其他实现交互&#xff0c;可以理解成按照这…

【码学堂】教师如何在码学堂上组织教学活动?

码学堂简介 码学堂是由贵州师范学院数学与大数据学院研发的智慧教学平台&#xff0c;学生可以自主练习&#xff0c;教师可以组织练习、考试、竞赛、共享题库、共享教学资源&#xff0c;支持判断题、单项选择题、多项选择题、填空题、程序函数题、程序填空题、编程题、主观题8种…

如何在码学堂组织练习、考试、竞赛?

组织练习、考试、竞赛时就是将多个题目组成题目集&#xff0c;然后加入学生组完成。题目集是由多个题目构成的集合&#xff0c;可以理解为组卷、出卷&#xff0c;码学堂上“练习/作业”、“考试”或“竞赛”操作方式一致&#xff0c;故下面以考试为例来说明操作方法。 1 设置题…

如何开发出一款直播APP项目实践篇 -【原理篇】

【 主要模块】 主播端&#xff1a; 把主播实时录制的视频&#xff0c;经过&#xff08;采集、美颜处理、编码&#xff09;推送到服务器服务器&#xff1a; 处理&#xff08;转码、录制、截图、鉴黄&#xff09;后分发给用户播放端播放器&#xff1a; 获取服务器地址&#xff0…