Eclipse+ Bndtools 4.3.0迁移遗留OSGi项目时遭遇"URI has an authority component"构建错误求助
大家好,我现在在迁移一个遗留的OSGi项目,遇到了棘手的构建问题,想请教下各位大佬:
我的项目原本基于Java 8、Eclipse Mars+Bndtools 3.5开发,目标是把它升级到尽可能新的Java版本。六年前尝试过用Bndtools 4.0.0成功运行过,但现在这个版本已经找不到公开下载源了,所以我搭了Eclipse 2023-03+Bndtools 4.3.0的环境。
结果现在构建时直接卡住,Eclipse日志里报了如下错误:
!ENTRY bndtools.core 4 0 2025-05-09 11:04:58.919
!MESSAGE Init of workspace
!STACK 0
java.lang.reflect.InvocationTargetException
at org.osgi.util.promise.DeferredPromiseImpl.getValue(DeferredPromiseImpl.java:128)
at aQute.bnd.repository.osgi.OSGiIndex.getBridge(OSGiIndex.java:206)
at aQute.bnd.repository.osgi.OSGiRepository.versions(OSGiRepository.java:201)
at aQute.bnd.build.Project.getBundle(Project.java:1276)
at aQute.bnd.build.Project.getBundles(Project.java:617)
at aQute.bnd.build.Project.parseBuildpath(Project.java:558)
at aQute.bnd.build.Project.prepare(Project.java:400)
at aQute.bnd.build.Project.getTarget(Project.java:1663)
at aQute.bnd.build.Project.getOutputFile(Project.java:2080)
at aQute.bnd.build.Project.getDeliverable(Project.java:2731)
at aQute.bnd.build.Project.getBundleFromProject(Project.java:1453)
at aQute.bnd.build.Project.getBundle(Project.java:1234)
at aQute.bnd.build.Project.getBundles(Project.java:617)
at aQute.bnd.build.Project.parseBuildpath(Project.java:558)
at aQute.bnd.build.Project.prepare(Project.java:400)
at aQute.bnd.build.Project.getDependson(Project.java:865)
at aQute.bnd.build.Workspace.getBuildOrder(Workspace.java:555)
at bndtools.central.Central.getWorkspace(Central.java:253)
at bndtools.central.Central.getProject(Central.java:575)
at bndtools.central.Central.getProject(Central.java:579)
at org.bndtools.builder.classpath.BndContainerInitializer$Updater.<init>(BndContainerInitializer.java:228)
at org.bndtools.builder.classpath.BndContainerInitializer.requestClasspathContainerUpdate(BndContainerInitializer.java:116)
at org.bndtools.builder.classpath.BndContainerInitializer.requestClasspathContainerUpdate(BndContainerInitializer.java:165)
at org.bndtools.builder.classpath.BndContainerCompilationParticipant.aboutToBuild(BndContainerCompilationParticipant.java:19)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.initializeBuilder(JavaBuilder.java:632)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:182)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1020)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:247)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:392)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:395)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:354)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:616)
at org.eclipse.core.internal.resources.Project$1.run(Project.java:571)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2380)
at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:609)
at org.eclipse.core.internal.resources.Project.build(Project.java:121)
at bndtools.editor.project.BuildOperationsPart$RebuildJob.runInWorkspace(BuildOperationsPart.java:111)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: org.osgi.util.promise.FailedPromisesException: java.lang.IllegalArgumentException: URI has an authority component
at org.osgi.util.promise.PromiseFactory$All.run(PromiseFactory.java:362)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.IllegalArgumentException: URI has an authority component
at java.base/java.io.File.<init>(File.java:425)
at aQute.bnd.http.HttpClient$HttpConnection.doCached0(HttpClient.java:483)
at aQute.bnd.http.HttpClient$HttpConnection.doCached(HttpClient.java:448)
at aQute.bnd.http.HttpClient$HttpConnection.call(HttpClient.java:398)
at org.osgi.util.promise.DeferredPromiseImpl$Submit.run(DeferredPromiseImpl.java:767)
... 3 more
Root exception:
org.osgi.util.promise.FailedPromisesException: java.lang.IllegalArgumentException: URI has an authority component
at org.osgi.util.promise.PromiseFactory$All.run(PromiseFactory.java:362)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
从错误栈来看,问题出在java.io.File初始化时,URI包含了权限组件(authority component),应该是Bndtools处理仓库URI时出了问题?有没有大佬遇到过类似情况,或者能给点排查方向?
内容来源于stack exchange

