💖【前言】项目介绍
Amazon 教程
参考官方文档:使用 Amazon 登录 (LWA) 令牌交换和身份验证自动化您的 SP-API 调用
注意
注意事项:Amazon代码生成工具需要先构建AA库,否则生成代码后缺LWA包
先决条件
下载 Swagger 代码生成器 到
C:\\SwaggerToCL
wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.13/swagger-codegen-cli-2.4.13.jar -O swagger-codegen-cli.jar
swagger codegen 命令手册查看
java -jar C:\SwaggerToCL\swagger-codegen-cli-2.4.13.jar help generate
在 C:\\SwaggerToCL
克隆selling-partner-api-models
git clone https://github.com/amzn/selling-partner-api-models.git
在
selling-partner-api-models/models
复制所有的json文件到C:\\SwaggerToCL
构建身份验证/授权库 (AA) 库
下列图标展示各版本准备环境,maven版本3.6.3+
分支 JDK swagger-codegen-cli 版本 代码version 已验证? v1.0 1.8+ swagger-codegen-cli-2.4.13.jar 1.0 ☑️ SPAPIDoc....... 1.8+ swagger-codegen-cli-2.4.13.jar 2.0 ☑️ main 17+ swagger-codegen-cli-2.4.44.jar 3.0 ☑️ 1.0,2.0,3.0需要切换分支,切换分支后需要重新打包,参考上面图表 打包
selling-partner-api-models\clients\sellingpartner-api-aa-java
mvn clean package
1.0 版本脚本
sellingpartnerapi-aa-java-1.0.jar
mvn install:install-file ^ -Dfile=C:/SwaggerToCL/selling-partner-api-models/clients/sellingpartner-api-aa-java/target/sellingpartnerapi-aa-java-1.0.jar ^ -DgroupId=com.amazon.sellingpartnerapi ^ -DartifactId=sellingpartnerapi-aa-java ^ -Dversion=1.0 ^ -Dpackaging=jar
sellingpartnerapi-aa-java-1.0-jar-with-dependencies.jar
mvn install:install-file ^ -Dfile=C:\SwaggerToCL\selling-partner-api-models\clients\sellingpartner-api-aa-java\target\sellingpartnerapi-aa-java-1.0-jar-with-dependencies.jar ^ -DgroupId=com.amazon.sellingpartnerapi ^ -DartifactId=sellingpartnerapi-aa-java ^ -Dversion=1.0 ^ -Dpackaging=jar
2.0 版本脚本
sellingpartnerapi-aa-java-2.0.jar
mvn install:install-file ^ -Dfile=C:\SwaggerToCL\selling-partner-api-models\clients\sellingpartner-api-aa-java\target\sellingpartnerapi-aa-java-2.0.jar ^ -DgroupId=com.amazon.sellingpartnerapi ^ -DartifactId=sellingpartnerapi-aa-java ^ -Dversion=2.0 ^ -Dpackaging=jar
sellingpartnerapi-aa-java-2.0-jar-with-dependencies.jar
mvn install:install-file ^ -Dfile=C:\SwaggerToCL\selling-partner-api-models\clients\sellingpartner-api-aa-java\target\sellingpartnerapi-aa-java-2.0-jar-with-dependencies.jar ^ -DgroupId=com.amazon.sellingpartnerapi ^ -DartifactId=sellingpartnerapi-aa-java ^ -Dversion=2.0 ^ -Dpackaging=jar
3.0 版本脚本
sellingpartnerapi-aa-java-3.0.jar
mvn install:install-file ^ -Dfile=C:\SwaggerToCL\selling-partner-api-models\clients\sellingpartner-api-aa-java\target\sellingpartnerapi-aa-java-3.0.jar ^ -DgroupId=com.amazon.sellingpartnerapi ^ -DartifactId=sellingpartnerapi-aa-java ^ -Dversion=3.0 ^ -Dpackaging=jar ^ -DgeneratePom=true
sellingpartnerapi-aa-java-3.0-jar-with-dependencies.jar
mvn install:install-file ^ -Dfile=C:\SwaggerToCL\selling-partner-api-models\clients\sellingpartner-api-aa-java\target\sellingpartnerapi-aa-java-3.0-jar-with-dependencies.jar ^ -DgroupId=com.amazon.sellingpartnerapi ^ -DartifactId=sellingpartnerapi-aa-java ^ -Dversion=3.0 ^ -Dpackaging=jar
可以将本地仓库的
sellingpartnerapi-aa-java-1.0.jar
上传到私有仓库或者制品仓库
【案例】制品仓库: (AA) 库

开始验证生成代码功能,为 SP-API 生成 Java SDK
打开CMD运行下面脚本。 参数可改成自己的即可,代码生成以后还要进行授权(AA)库依赖的支持,需要在pom文件中引入(AA)库依赖。
java -jar C:\SwaggerToCL\swagger-codegen-cli-2.4.13.jar generate ^ -l java ^ -t C:\SwaggerToCL\selling-partner-api-models\clients\sellingpartner-api-aa-java\resources\swagger-codegen\templates\ ^ -c C:\SwaggerToCL\selling-partner-api-models\clients\sellingpartner-api-aa-java\resources\java\config.json ^ -o D:\ZmCodeSpace\open-platform-starter\open-amazon-starter ^ -i C:\SwaggerToCL\sellers.json ^ --group-id com.open4play ^ --artifact-id open-amazon-starter ^ --artifact-version 1.0.0 ^ --api-package com.open4play.amazon.api ^ --model-package com.open4play.amazon.domain.sellers ^ --invoker-package com.open4play.amazon.infrastructure
3.0版本需要swagger-codegen-cli-2.4.44.jar版本(其他版本没试过)
java -jar C:\SwaggerToCL\swagger-codegen-cli-2.4.44.jar generate ^ -l java ^ -t C:\SwaggerToCL\selling-partner-api-models\clients\sellingpartner-api-aa-java\resources\swagger-codegen\templates\ ^ -c C:\SwaggerToCL\selling-partner-api-models\clients\sellingpartner-api-aa-java\resources\java\config.json ^ -o D:\ZmCodeSpace\open-platform-starter\open-amazon-starter ^ -i C:\SwaggerToCL\sellers.json ^ --group-id com.open4play ^ --artifact-id open-amazon-starter ^ --artifact-version 1.0.0 ^ --api-package com.open4play.amazon.api ^ --model-package com.open4play.amazon.domain.sellers ^ --invoker-package com.open4play.amazon.infrastructure
生成的SDK爆红是缺少授权(AA)库依赖, 在POM中添加即可
在生成的SDK中POM文件中添加授权(AA)依赖,然后重新Reload Project 即可
## 看需要哪个版本就引入哪个
# 1.0 版本
<dependency>
<groupId>com.amazon.sellingpartnerapi</groupId>
<artifactId>sellingpartnerapi-aa-java</artifactId>
<version>1.0</version>
</dependency>
# 2.0 版本
<dependency>
<groupId>com.amazon.sellingpartnerapi</groupId>
<artifactId>sellingpartnerapi-aa-java</artifactId>
<version>1.0</version>
</dependency>
# 3.0 版本
<dependency>
<groupId>com.amazon.sellingpartnerapi</groupId>
<artifactId>sellingpartnerapi-aa-java</artifactId>
<version>1.0</version>
</dependency>
【脚本】使用脚本来构建SP-API库: swagger-codegen-amazon.bat
提示
脚本与模型库目录同级
@echo off
:: 使用 cmd /k 确保窗口保持打开
cmd /k (
setlocal enabledelayedexpansion
:: 设置命令行编码为 UTF-8
chcp 65001 >nul
:: 定义颜色变量以便输出更清晰的信息
set RED=[91m
set GREEN=[92m
set NC=[0m
:: 扫描当前目录下的所有 .jar 文件并列出选项
echo %GREEN%正在扫描可用的 Swagger Codegen JAR 文件...%NC%
set count=0
for %%f in (*.jar) do (
set /a count+=1
set "option[!count!]=%%f"
echo [!count!] %%f
)
if %count% equ 0 (
echo %RED%未找到任何 JAR 文件,请确保至少有一个 Swagger Codegen JAR 文件存在于当前目录中。%NC%
exit /b 1
)
:select_jar
set /p SELECTED="请选择一个 JAR 文件 (输入数字): "
if "%SELECTED%"=="" goto select_jar
if %SELECTED% gtr %count% goto select_jar
if %SELECTED% lss 1 goto select_jar
:: 构建 JAR 文件路径
set JAR_PATH=%~dp0!option[%SELECTED%]!
if not exist "%JAR_PATH%" (
echo %RED%所选的 JAR 文件不存在,请重新选择。%NC%
goto select_jar
)
echo %GREEN%您选择了: !option[%SELECTED%]!%NC%
:: 固定 TEMPLATES_DIR 和 CONFIG_FILE 的相对路径
set TEMPLATES_DIR=%~dp0selling-partner-api-models\clients\sellingpartner-api-aa-java\resources\swagger-codegen\templates\
set CONFIG_FILE=%~dp0selling-partner-api-models\clients\sellingpartner-api-aa-java\resources\java\config.json
:: 设置包名
set DEFAULT_PACKAGE=com.open4play.amazon
:: 检查 TEMPLATES_DIR 是否存在
if not exist "%TEMPLATES_DIR%" (
echo %RED%模板目录未找到,请确保路径正确。%NC%
exit /b 1
)
:: 检查 CONFIG_FILE 是否存在
if not exist "%CONFIG_FILE%" (
echo %RED%配置文件未找到,请确保路径正确。%NC%
exit /b 1
)
::: 设置目标目录
set "TARGET_DIR=selling-partner-api-models\models"
:: 检查目标目录是否存在
if not exist "%TARGET_DIR%" (
echo %RED%目标目录不存在: %TARGET_DIR%. 请确保路径正确。%NC%
pause
exit /b 1
)
:: 扫描目标目录及其子目录下的所有 .json 文件并列出选项
echo %GREEN%正在扫描可用的 Swagger 规范 JSON 文件...%NC%
set count=0
for /r "%TARGET_DIR%" %%f in (*.json) do (
set /a count+=1
set "option[!count!]=%%~ff" :: 保存文件的完整路径
echo [!count!] %%~nxf
)
if %count% equ 0 (
echo %RED%未找到任何 JSON 文件,请确保至少有一个 Swagger 规范 JSON 文件存在于 %TARGET_DIR% 中。%NC%
pause
exit /b 1
)
:select_spec_file
set /p SELECTED="请选择一个 JSON 文件 (输入数字): "
if "%SELECTED%"=="" goto select_spec_file
if %SELECTED% gtr %count% (
echo %RED%无效的选择,请重新输入。%NC%
goto select_spec_file
)
if %SELECTED% lss 1 (
echo %RED%无效的选择,请重新输入。%NC%
goto select_spec_file
)
:: 构建 SPEC_FILE 路径
set "SPEC_FILE=!option[%SELECTED%]!"
if not exist "%SPEC_FILE%" (
echo %RED%所选的 JSON 文件不存在,请重新选择。%NC%
goto select_spec_file
)
echo %GREEN%您选择了: !SPEC_FILE!%NC%
:input_group_id
set /p GROUP_ID="请输入 group ID (例如: com.open4play) [按回车使用默认值]: "
if "%GROUP_ID%"=="" (
set GROUP_ID=com.open4play
)
echo %GREEN%GROUP_ID: !GROUP_ID!%NC%
:input_artifact_id
set /p ARTIFACT_ID="请输入 artifact ID (例如: open-amazon-starter): "
if "%ARTIFACT_ID%"=="" (
set ARTIFACT_ID=open-amazon-starter
)
echo %GREEN%ARTIFACT_ID: !ARTIFACT_ID!%NC%
:input_artifact_version
set /p ARTIFACT_VERSION="请输入 artifact 版本 (例如: 1.0.0) [按回车使用默认值]: "
if "%ARTIFACT_VERSION%"=="" (
set ARTIFACT_VERSION=1.0.0
)
echo %GREEN%ARTIFACT_VERSION: !ARTIFACT_VERSION!%NC%
:input_api_package
set /p API_PACKAGE="请输入 API 包名 (例如: com.open4play.amazon.api) [按回车使用默认值]: "
if "%API_PACKAGE%"=="" (
set API_PACKAGE=%DEFAULT_PACKAGE%.api
)
echo %GREEN%API_PACKAGE: !API_PACKAGE!%NC%
:input_model_package
set /p MODEL_PACKAGE_SUFFIX="请输入 model 包名 (例如: xxx.domain.包名) [domain.输入值]: "
if "%MODEL_PACKAGE_SUFFIX%"=="" (
echo %RED%请输入 model 包名, 包名不能为空%NC%
goto :input_model_package
) else (
set MODEL_PACKAGE=%DEFAULT_PACKAGE%.domain.%MODEL_PACKAGE_SUFFIX%
)
echo %GREEN%MODEL_PACKAGE: !MODEL_PACKAGE!%NC%
:input_invoker_package
set /p INVOKER_PACKAGE="请输入 invoker 包名 (例如: com.open4play.amazon.infrastructure) [按回车使用默认值]: "
if "%INVOKER_PACKAGE%"=="" (
set INVOKER_PACKAGE=com.open4play.amazon.infrastructure
)
echo %GREEN%INVOKER_PACKAGE: !INVOKER_PACKAGE!%NC%
:input_output_foldername
set /p OUTPUT_FOLDERNAME="请输入输出文件夹名称 (例如: open-amazon-starter) [按回车使用默认值ArtifactID填充]: "
if "%OUTPUT_FOLDERNAME%"=="" (
set OUTPUT_FOLDERNAME=%ARTIFACT_ID%
)
echo %GREEN%OUTPUT_FOLDERNAME: !OUTPUT_FOLDERNAME!%NC%
@REM :generate_code
:: 构建 OUTPUT_DIR 路径(当前目录下)
set OUTPUT_DIR=%~dp0%OUTPUT_FOLDERNAME%
:: 生成代码
echo %GREEN%正在从 Swagger Codegen 生成 API 客户端...%NC%
java -jar %JAR_PATH% generate ^
-l java ^
-t %TEMPLATES_DIR% ^
-c %CONFIG_FILE% ^
-o %OUTPUT_DIR% ^
-i %SPEC_FILE% ^
--group-id %GROUP_ID% ^
--artifact-id %ARTIFACT_ID% ^
--artifact-version %ARTIFACT_VERSION% ^
--api-package %API_PACKAGE% ^
--model-package %MODEL_PACKAGE% ^
--invoker-package %INVOKER_PACKAGE% ^
--skip-overwrite
echo %GREEN%API 客户端生成成功,位于%OUTPUT_DIR%.%NC%
pause
exit
)