本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对 Java 转换问题进行故障排除
以下信息可以帮助您解决使用 Amazon Q Developer 转换 Java 应用程序时的常见问题。
主题
为什么 Amazon Q 无法上传我的项目?
如果您的项目上传失败,则可能是由以下某个问题所致。请参阅与您在 Amazon Q 中看到的错误相对应的主题。
减小项目大小
为了转换您的代码,Amazon Q 会生成一个项目构件,其中包括您的源代码、项目依赖项和构建日志。转换任务的最大项目构件大小为 2 GB。如果您遇到与项目构件大小相关的错误,则必须减小项目的大小或尝试转换较小的项目。您可以在代码转换日志中查看项目构件文件的大小。有关更多信息,请参阅如何访问代码转换日志?
在 IDE 中配置代理设置
为了转换您的代码,Amazon Q 会将您的项目构件上传到服务拥有的 Amazon S3 存储桶。在上传过程中,需要使用 SSL 或 TLS 证书在 Amazon S3 和您的 IDE 之间建立通信。如果您使用的是代理服务器,则必须信任您的代理服务器使用的 SSL 或 TLS 证书,否则 Amazon Q 将无法上传您的项目。
如果您收到与代理或证书相关的错误,则可能需要将 IDE 或操作系统配置为信任您的证书或更新其他代理设置。
注意
如果您位于组织的代理服务器或防火墙后面,则可能还会遇到与证书无关的问题。如果您完成了以下步骤来配置证书,但仍有问题,请联系您的网络管理员以确保允许您通过 IDE 与 Amazon S3 通信。有关更多信息,请参阅允许访问 Amazon S3。
在 JetBrains 中配置证书
要将 JetBrains IDE Java 运行时环境(JRE)配置为信任代理服务器使用的 SSL 或 TLS 证书,必须将 SSL 或 TLS 证书导入 JRE 中的 cacerts
文件中。该 cacerts
文件是一个包含用于安全连接的可信根证书(例如 HTTPS 和 SSL),它是 JRE 安全设置的一部分。要导入证书,请完成以下流程。
注意
我们建议在修改 cacerts
文件之前对其进行备份,因为任何错误都可能导致安全连接出现问题。
-
确定 JRE 中
cacerts
文件的路径。JetBrains IDE 附带的内部 JRE 中cacerts
文件的路径取决于操作系统和您使用的 JetBrains IDE 版本。以下是常见操作系统中
cacerts
文件路径的示例。选择您的操作系统以查看示例。注意
<JetBrains Installation Folder>
指安装 JetBrains 产品的目录。此目录通常是在安装过程中选择的。该
jbr
文件夹表示捆绑在一起的 JRE JetBrains IDEs,它是专为与一起使用而量身定制的 JRE 的特定版本。JetBrains IDEs -
确定需要导入到
cacerts
文件中的证书。证书文件通常具有.cer
、.crt
或.der
文件扩展名。如果您不确定需要添加哪些证书,请联系您的网络管理员。 -
将证书导入
cacerts
密钥库。您可以使用 Javakeytool
命令执行此操作。-
打开命令提示符,然后输入以下命令:
keytool -import -alias <alias> -file <certificate_file> -keystore <path_to_cacerts>
-
对于
<alias>
,您可以为要导入的证书添加一个名称,以便日后参考。此选项为可选项。 -
对于
<certificate_file>
,请指定要导入的证书的路径。这应该是包含证书的.cer
、.crt
或.der
文件的路径。 -
对于
<path_to_cacerts>
,请指定您在步骤 1 中保存的cacerts
密钥库文件的路径。这是您要导入证书的文件。
例如,如果要将名为
my_certificate.cer
的证书导入到 Windows 上 IntelliJ IDEA 中捆绑的 JRE 的cacerts
密钥库,并且要为该证书指定别名myalias
,则命令可能是:keytool -import -alias myalias -file my_certificate.cer -keystore "C:\Program Files\JetBrains\IntelliJ IDEA 2022.3.2\jbr\bin\cacerts"
-
-
在导入过程中,系统将提示您输入密钥库密码。
cacerts
密钥库的默认密码是changeit
。 -
运行该命令后,系统将要求您信任证书。要确认证书可信并完成导入,请输入
yes
。 -
除了 JRE 之外,您可能还需要将证书添加到 IDE 本身。有关更多信息,请参阅 JetBrains 文档中的 Server Certificates
。
在 Visual Studio Code 中配置证书
要配置 Visual Studio Code 以信任代理服务器使用的 SSL 或 TLS 证书,请确保已为操作系统配置了以下代理设置。
在 macOS 上为 Visual Studio Code 配置以下代理设置。
将证书添加到您的 macOS 钥匙串
如果还没有,则必须将代理服务器使用的证书添加到 macOS 钥匙串中。有关向钥匙串添加证书的信息,请参阅《钥匙串访问使用手册》中的在 Mac 上使用“钥匙串访问”将证书添加到钥匙串
安装 Mac CA VSCode 扩展程序
Mac CA VSCode 扩展程序
安装扩展程序:
-
在 VS Code 扩展程序窗格中搜索
mac-ca-vscode
,然后选择 Install。 -
重新启动 VS Code。
在 macOS 上更新 VS Code 中的代理设置
更新以下设置,确保您的代理已正确配置 VS Code。
-
在 VS Code 中打开设置。
-
在搜索栏中输入
proxy
。 -
在 Http: Proxy 字段中,添加您的代理 URL。
-
取消选择 Http: Proxy Strict SSL。
-
在 Http: Proxy Support 下拉列表中,选择 on。
-
在设置搜索栏中,输入
http.experimental.systemCertificatesV2
。选择 Http › Experimental: System Certificates V2。
在 Windows 上为 Visual Studio Code 配置以下代理设置。
在 Windows 上将证书添加为受信任的根证书
如果还没有,则必须将代理服务器使用的证书添加到 Windows 上的受信任的根证书颁发机构存储中。要添加证书,请完成以下流程:
-
打开搜索工具或 Run 命令窗口。
-
输入以下命令以打开 Certificate Manager 工具:
certmgr.msc
-
选择 Trusted Root Certification Authorities 存储。
-
右键单击 Certificates,选择 All Tasks,然后选择 Import...。
-
按照给出的说明导入您的代理证书。
-
导入证书后,确认证书已添加。
在 Trusted Root Certification Authorities 存储中,双击 Certificates。右键单击您添加的证书,然后选择 Properties。在 Certificate purposes 下,Enable all purposes for this certificate 选项应该是选中状态。
安装 Win-CA 扩展 VSCode 程序
Win-CA VSCode 扩展
安装扩展程序:
-
在 VS Code 设置窗格中搜索
win-ca
。 -
在 Inject 下拉列表中,选择 append。
在 Windows 上更新 VS Code 中的代理设置
更新以下设置,确保您的代理已正确配置 VS Code。
-
在 VS Code 中打开设置。
-
在搜索栏中输入
proxy
。 -
在 Http: Proxy 字段中,添加您的代理 URL。
-
取消选择 Http: Proxy Strict SSL。
-
在 Http: Proxy Support 下拉列表中,选择 on。
-
在设置搜索栏中,输入
http.experimental.systemCertificatesV2
。选择 Http › Experimental: System Certificates V2。 -
重新启动 VS Code。
允许访问 Amazon S3
在转换过程中,Amazon Q 会将您的代码上传到服务拥有的 Amazon S3 存储桶。如果您的网络或组织尚未配置对 Amazon S3 的访问权限,则 Amazon Q 将无法上传您的项目。
为确保 Amazon Q 可以上传您的项目,请确保将代理配置和其他网络组件 [例如数据丢失防护(DLP)策略] 配置为允许访问 Amazon S3。您可能还需要将 Amazon Q 上传项目的 Amazon S3 存储桶列入允许列表。有关更多信息,请参阅Amazon S3 存储桶 URLs 和 ARNs 允许名单。
如果您转换大型项目,DLP 策略或其他网络组件如果未配置为允许访问 Amazon S3 存储桶,则可能会导致延迟并妨碍成功上传。如果您选择不将存储桶列入允许列表,则可能需要转换一个较小的项目,以便 Amazon Q 可以将其上传。
为什么我的 Maven 命令失败了?
以下是你可能会在JetBrains和中看到的Maven配置问题Visual Studio Code IDEs。如果您解决了问题,但仍然看到 Maven 错误,则可能是您的项目出现了问题。使用错误日志中的信息来解决项目中的任何问题,然后尝试再次转换您的项目。
在 JetBrains 中更新 Maven 配置
如果由于 Maven 命令问题导致 JetBrains 中转换失败,则错误日志将显示在 Run 选项卡上。使用日志中的信息解决问题。以下是您可能需要解决的一些问题:
-
确保您的 Maven 主路径设置为 Bundled。在 Settings 对话框中,展开 Build, Execution, Deployment 部分。展开 Build Tools 部分,然后展开 Maven。在 Maven home path 下拉列表中,选择 Bundled。
-
确保 Java 运行时环境(JRE)正在使用您的项目 JDK。在 Settings 对话框中,展开 Build, Execution, Deployment 部分。展开 Maven 并选择 Runner。在 JRE 下拉列表中,选择 Use Project JDK。
-
确保 Maven 已启用。前往 Settings,然后选择 Plugins。搜索 Maven,然后选择 Maven 插件。如果您看到 Enable 按钮,请选择该按钮以启用 Maven。
在 Visual Studio Code 中更新 Maven 配置
如果由于 Maven 命令问题导致 VS Code 中的转换失败,则会在新选项卡中打开包含错误日志的文本文件。使用日志中的信息解决问题。
确保您配置了以下任一选项:
-
您的项目在项目根文件夹中包含一个 Maven 包装器
-
您的
PATH
中有 Amazon Q 支持的 Maven 版本
有关更多信息,请参阅如何将 Maven 添加到我的 PATH?
如何将 Maven 添加到我的 PATH
?
要在不使用 Maven 包装器的情况下在 VS Code 中转换代码,您必须安装 Maven 并将其添加到 PATH
变量中。
要检查您是否已正确安装 Maven,请在 Visual Studio Code 之外的新操作系统终端运行 mvn -v
。您应该会看到 Maven 版本的输出。
如果您是在 Visual Studio Code 终端中而不是您的操作系统终端中获得输出,或者如果找不到该命令,则需要将 Maven 添加到您的 PATH
。
要将 Maven 添加到您的 PATH
,请按照您计算机的说明进行操作。
为什么 Amazon Q 无法构建我的代码?
如果在 Amazon Q 构建您的代码时转换失败,可能是因为您的项目没有针对 Amazon Q 构建代码的环境进行正确配置。您可能需要更新构建配置或代码实现。
查看 Amazon Q 提供的构建日志输出,以确定是否可以对项目进行更改。以下是一些可能阻碍 Amazon Q 构建代码的常见问题。
移除 pom.xml 中的绝对路径
如果您的 pom.xml 文件中有绝对路径,Amazon Q 将无法找到相关文件,因此可能无法构建您的代码。
以下是 pom.xml
文件中可能包含的绝对路径的示例:
<toolspath> <path>/Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home/lib/tools.jar</path> </toolspath>
您可以使用指针创建相对路径,而不要使用绝对路径。以下是如何用相对路径替换之前的绝对路径的示例:
<toolspath> <path>${java.home}/../lib/tools.jar</path> </toolspath>
在单元测试中移除本地或外部数据库
Amazon Q 在构建您的代码时会在您的项目中运行任何单元测试。如果单元测试调用本地或外部数据库,Amazon Q 将无法访问该数据库,从而导致构建失败。为防止生成构建失败,在提交转换之前,必须从单元测试中移除数据库调用或移除单元测试。
为什么我的转换在 55 分钟后失败了?
如果您的代码转换任务在 55 分钟后失败,则您的代码构建时间可能超过了构建时间限制。目前,构建代码的时间限制为 55 分钟。
如果您的本地构建时间需要 55 分钟或更长时间,请缩短项目构建时间来转换代码。如果您的本地构建速度比使用代码转换构建的速度快,请检查您的项目中是否存在可能失败或在其他环境中耗时更长的任务。考虑禁用长时间运行的测试用例。还要考虑针对访问可能无法从安全 IDE 环境或 Internet 获得的资源的尝试使用超时设置。
为什么我无法下载转换后的代码?
如果您在转换完成后无法下载代码,可能是由以下某个问题所致。请参阅与您在 Amazon Q 中看到的错误相对应的主题。
减小项目大小
转换完成后,Amazon Q 会生成一个输出构件(其中包含与升级后的代码的差异信息)和转换摘要(包含有关所做更改的信息)。输出构件必须不超过 1 GB,IDE 才能下载它。
如果输出构件超出限制,您将无法下载升级后的代码或转换摘要。尝试转换较小的项目,以防止生成较大的输出构件。如果问题仍然存在,请与联系 支持。有关 支持 与 Amazon Q 联系的信息,请参阅使用 Amazon Q 开发者与之聊天 支持。
30 天内下载代码差异
包含升级代码的代码差异文件仅在转换完成后的 30 天内可用。如果自转换完成以来已超过 30 天,请重新启动转换以下载差异文件。
在 IDE 中配置代理设置
Amazon Q 从服务自有的 Amazon S3 存储桶下载您的升级代码。下载过程的一部分涉及使用 SSL 或 TLS 证书在 Amazon S3 和您的 IDE 之间建立通信。如果您使用的是代理服务器,则必须信任您的代理服务器使用的 SSL 或 TLS 证书,否则 Amazon Q 将无法上传您的项目。
要下载代码,您可能需要将 IDE 配置为信任证书或更新其他代理设置。有关更新代理设置的更多信息,请参阅 在 IDE 中配置代理设置。
移除 JetBrains 代理设置中的通配符
如果您已在 JetBrains IDE 中配置了代理设置,则在下载升级后的代码时可能会看到以下错误:
software.amazon.awssdk.core.exception.SdkClientException: Unable to execute HTTP request: Dangling meta character '*' near index 0
这可能是由于您的 IDE 的代理设置的 No proxy for 字段中存在通配符(*)所致。Amazon Q 使用的 Java 软件开发工具包不支持在此字段中输入通配符。
要下载您的代码,请从 No proxy for 字段中删除所有通配符,然后重新启动 IDE。如果您需要指定应绕过代理的主机,请使用正则表达式而不是通配符。要更新 JetBrains IDE 中的代理设置,请参阅JetBrains文档中的 HTTP 代理
如何访问代码转换日志?
JetBrains 中的访问日志
有关如何访问 JetBrains 日志文件的信息,请参阅 JetBrains 文档中的 Locating IDE log files
要在中查找 Amazon Q 发出的日志JetBrains,请在 IDE 日志中搜索以下字符串:
software.aws.toolkits.jetbrains.services.codemodernizer
代码转换日志以前面的字符串开头。Maven 生成的日志显示在 Run 选项卡上,并且在日志条目前后都有前面的字符串。
Visual Studio Code 中的访问日志
要查找 Amazon Q 中发出的日志VS Code,请完成以下步骤:
-
在顶部导航栏中选择 View,然后选择 Command Palette。
-
在出现的命令面板中搜索
Amazon Q: View Logs
。 -
日志将在 IDE 中打开。要在日志文件中搜索
CodeTransformation
,请使用CMD + F
或Control + F
。
VS Code 中的代码转换日志前缀为 CodeTransformation:
。以下是 VS Code 针对 Maven 复制依赖关系错误生成的日志的示例:
2024-02-12 11:29:16 [ERROR]: CodeTransformation: Error in running Maven copy-dependencies command mvn = /bin/sh: mvn: command not found
如何找到我的转换任务 ID?
在 JetBrains 中查找您的任务 ID
要在 JetBrains 中查找转换任务 ID,请转到 Transformation Hub 的 Transformation details 选项卡,然后选择 Show Job Status(时钟)图标。
在 Visual Studio Code 中查找您的任务 ID
要在 VS Code 中查找转换任务 ID,请转到 Transformation Hub 并选择 Show Job Status(时钟)图标。