Java 如何设置p2 SimpleArtifactRepository的最大线程数

Java 如何设置p2 SimpleArtifactRepository的最大线程数,java,p2,Java,P2,我正在开发一个工具来执行类似于p2 DirectorApplication的p2安装。当工件库的URI使用http协议指向站点位置时,我遇到了问题。工件的下载在某个点停止运行,操作状态设置为严重性IStatus.CANCEL。(使用文件协议,不会发生此错误。) 我无法通过调试验证这一点,因为在此模式下不会发生“中止”。我在SimpleArtifactRepository.getArtifacts中找到了一段代码,其中启动了多个作业来下载请求的工件。如果我手动将numberOfJobs设置为1,“

我正在开发一个工具来执行类似于p2 DirectorApplication的p2安装。当工件库的URI使用http协议指向站点位置时,我遇到了问题。工件的下载在某个点停止运行,操作状态设置为严重性IStatus.CANCEL。(使用文件协议,不会发生此错误。)

我无法通过调试验证这一点,因为在此模式下不会发生“中止”。我在SimpleArtifactRepository.getArtifacts中找到了一段代码,其中启动了多个作业来下载请求的工件。如果我手动将numberOfJobs设置为1,“中止”也不会发生

我不确定这可能是什么原因。我将满足于将最大线程数设置为1的可能性。有一个属性,由SimpleArtifactRepository.getMaximumThreads对此用例进行评估:PROP_MAX_THREADS(eclipse.p2.MAX.THREADS)


但是,我找不到设置此属性的正确位置。欢迎任何提示

设置此属性的唯一官方方法是将其存储在存储库中。因此,如果您拥有您正在使用的所有工件存储库,您可以在那里对其进行更改

否则(以及更可能的情况),只有黑客设置它。有一个API用于在工件存储库上设置属性,但该API不能用于通过HTTP访问的存储库。通过API进行的更改不仅会影响内存中的表示,而且p2还坚持更改持久化存储库。这不能在远程存储库上完成,因此所有通过API进行的属性更改都被阻止


因此,要仅更改内存中的属性,需要使用反射对对象进行黑客攻击。您可以看到一个示例。

请注意,链接反射hack已从Tycho代码库中删除,这是工作的一部分。这是个好消息,因为我们拥有存储库。如何设置此属性?您可以通过
IRepository.setProperty
以编程方式设置属性,或者通过在artifacts.xml中添加
标记来设置属性。我通过使用ant字符串replace skcript修改artifacts.xml以包含标记,解决了此问题。也许不是最干净的解决方案,但它是有效的。谢谢你的帮助。