使用Artifactory Bamboo插件还原NuGet包时遇字符串索引越界错误
解决Artifactory Bamboo插件NuGet Restore时的StringIndexOutOfBoundsException错误
我有一个依赖多个NuGet库的Visual Studio项目,已在Artifactory创建用于拉取和缓存NuGet包的远程仓库,目标是移除源码控制中的packages目录,每次构建从该仓库还原依赖。通过脚本执行nuget restore solutionName.sln -Source http://artifactoryRepoAddress可成功构建,但使用Artifactory官方Bamboo插件时,构建每次失败,抛出如下错误:
java.lang.RuntimeException: java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at org.jfrog.build.extractor.nuget.extractor.NugetRun.execute(NugetRun.java:185) at org.jfrog.bamboo.task.ArtifactoryDotNetTaskBase.executeRestore(ArtifactoryDotNetTaskBase.java:113) at org.jfrog.bamboo.task.ArtifactoryDotNetTaskBase.runTask(ArtifactoryDotNetTaskBase.java:74) at org.jfrog.bamboo.task.ArtifactoryTaskType.execute(ArtifactoryTaskType.java:46) at com.atlassian.bamboo.task.TaskExecutorImpl.lambda$executeTasks$2(TaskExecutorImpl.java:321) at com.atlassian.bamboo.task.TaskExecutorImpl.executeTaskWithPrePostActions(TaskExecutorImpl.java:258) at com.atlassian.bamboo.task.TaskExecutorImpl.executeTasks(TaskExecutorImpl.java:321) at com.atlassian.bamboo.task.TaskExecutorImpl.execute(TaskExecutorImpl.java:118) at com.atlassian.bamboo.build.pipeline.tasks.ExecuteBuildTask.call(ExecuteBuildTask.java:73) at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.executeBuildPhase(DefaultBuildAgent.java:205) at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.build(DefaultBuildAgent.java:177) at com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl.lambda$waitAndPerformBuild$0(BuildAgentControllerImpl.java:169) at com.atlassian.bamboo.variable.CustomVariableContextImpl.withVariableSubstitutor(CustomVariableContextImpl.java:118) at com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl.waitAndPerformBuild(BuildAgentControllerImpl.java:162) at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.lambda$start$0(DefaultBuildAgent.java:122) at com.atlassian.bamboo.utils.BambooRunnables$1.run(BambooRunnables.java:48) at com.atlassian.bamboo.security.ImpersonationHelper.runWith(ImpersonationHelper.java:26) at com.atlassian.bamboo.security.ImpersonationHelper.runWithSystemAuthority(ImpersonationHelper.java:17) at com.atlassian.bamboo.security.ImpersonationHelper$1.run(ImpersonationHelper.java:41) at java.base/java.lang.Thread.run(Unknown Source) Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.base/java.lang.String.substring(Unknown Source) at org.jfrog.build.extractor.nuget.extractor.NugetRun.addSourceToConfigFile(NugetRun.java:222) at org.jfrog.build.extractor.nuget.extractor.NugetRun.prepareConfig(NugetRun.java:211) at org.jfrog.build.extractor.nuget.extractor.NugetRun.prepareAndRunCmd(NugetRun.java:193) at org.jfrog.build.extractor.nuget.extractor.NugetRun.execute(NugetRun.java:175) ... 19 more
排查与解决步骤
1. 校验NuGet源地址配置
- 确认插件中填写的Artifactory仓库地址与脚本中使用的
http://artifactoryRepoAddress完全一致,包括协议(http/https)、端口、结尾是否带斜杠,避免多余空格或特殊字符 - 若使用Bamboo变量传递地址,先替换为硬编码的完整地址测试,排除变量解析失败的可能
2. 清理并修复NuGet配置文件
- 构建代理机器上的NuGet配置文件可能存在格式错误或异常条目,路径一般为:
- Windows:
%APPDATA%\NuGet\NuGet.Config - Linux/macOS:
~/.nuget/NuGet/NuGet.Config
- Windows:
- 备份现有配置后,临时移除无关的源条目,只保留必要的默认源,再重新执行插件构建
- 检查配置文件是否存在XML格式错误(比如未闭合的标签),这类错误会导致插件解析配置时失败
3. 检查插件与NuGet版本兼容性
- 确认Artifactory Bamboo插件版本是否支持当前构建代理上的NuGet版本,部分旧插件对NuGet 5.x+的兼容性较差
- 尝试升级插件到最新稳定版,或降级NuGet到插件官方文档推荐的版本
- 对比脚本与插件调用的NuGet版本:插件默认使用系统PATH中的NuGet,检查代理机器的PATH顺序,确保插件调用的是与脚本一致的NuGet版本
4. 手动指定NuGet源,跳过插件自动配置
- 若插件提供附加参数或高级配置选项,手动添加
-Source http://artifactoryRepoAddress,覆盖插件自动添加源的逻辑 - 部分插件版本允许关闭自动配置NuGet源的功能,优先使用手动指定的源地址
5. 验证Artifactory仓库的权限与认证
- 确认插件配置的Artifactory账号拥有目标NuGet远程仓库的读取权限,脚本可能使用了默认系统凭据,而插件的凭据配置有误
- 若仓库需要认证,检查插件中填写的用户名、密码或API Key是否正确,避免特殊字符导致解析异常
内容的提问来源于stack exchange,提问作者BeanKing
相关产品推荐
相关产品推荐

