由于 JDT 依赖项,Maven 构建失败 - 没有可用于 org.osgi.service:org.osgi.service.prefs:jar:[1.1.0,1.2.0 的版本)

2022-09-01 01:35:22

今天,当我尝试安装我的maven项目时,由于JDT依赖项,我收到一个错误,以下是报告信息:

Cannot resolve No versions available for org.osgi.service:org.osgi.service.prefs:jar:[1.1.0,1.2.0) within specified range.
[ERROR] Failed to execute goal on project redundantcheck: 
Could not resolve dependencies for project edu.fudan.selab:redundantcheck:jar:1.0-SNAPSHOT: 
Failed to collect dependencies at org.eclipse.jdt:org.eclipse.jdt.core:jar:3.20.0 -> 
org.eclipse.platform:org.eclipse.core.resources:jar:3.12.0 -> 
org.eclipse.platform:org.eclipse.core.expressions:jar:3.5.100 -> 
org.eclipse.platform:org.eclipse.core.runtime:jar:3.12.0 -> 
org.eclipse.platform:org.eclipse.equinox.preferences:jar:3.10.0 -> 
org.osgi.service:org.osgi.service.prefs:jar:[1.1.0,1.2.0): No versions available for 
org.osgi.service:org.osgi.service.prefs:jar:[1.1.0,1.2.0) within specified range -> [Help 1]

我试图将1.1.0 org.osgi.service:org.osgi.service.prefs添加到项目中,但仍然无法解决这个问题。为了避免依赖关系更新,我指定了几乎所有版本的依赖关系,但今天仍然遇到此错误。这是我的绒球.xml:

    <dependencies>
        <dependency>
            <groupId>org.eclipse.jdt</groupId>
            <artifactId>org.eclipse.jdt.core</artifactId>
            <version>3.20.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.commands</artifactId>
            <version>3.9.800</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.core.contenttype -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.contenttype</artifactId>
            <version>3.7.900</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.core.filesystem -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.filesystem</artifactId>
            <version>1.7.700</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.core.jobs -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.jobs</artifactId>
            <version>3.10.1100</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.core.resources -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.resources</artifactId>
            <version>3.14.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.core.runtime -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.runtime</artifactId>
            <version>3.20.100</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.equinox.common -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.equinox.common</artifactId>
            <version>3.14.100</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.osgi -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.osgi</artifactId>
            <version>3.16.200</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.text -->
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.text</artifactId>
            <version>3.11.0</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.core.expressions</artifactId>
            <version>3.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.equinox.app</artifactId>
            <version>1.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.equinox.preferences</artifactId>
            <version>3.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.equinox.registry</artifactId>
            <version>3.11.0</version>
        </dependency>
    </dependencies>

有没有办法解决这个问题?


答案 1

编辑:该项目团队知道这个问题,并在GitHub上以eclipse-equinox/equinox.bundles#54的形式进行跟踪。

依赖关系:

<groupId>org.eclipse.platform</groupId>
<artifactId>org.eclipse.equinox.preferences</artifactId>
<version>3.10.0</version>

哪个是您的传递依赖项之一,在其依赖项列表中引用此依赖项:

<dependency>
    <groupId>org.osgi.service</groupId>
    <artifactId>org.osgi.service.prefs</artifactId>
    <version>[1.1.0,1.2.0)</version>
</dependency>

资料来源:org.eclipse.equinox.preferences-3.10.0.pom on maven central.

这是一个错误。正如Maven告诉你的,这不存在:

无法解析指定范围内没有可用的版本。org.osgi.service:org.osgi.service.prefs:jar:[1.1.0,1.2.0)

它应该是:

<dependency>
    <groupId>org.osgi</groupId>
    <artifactId>org.osgi.service.prefs</artifactId>
    <version>[1.1.0,1.2.0)</version>
</dependency>

哪个存在(注意不同的)。groupId

因为您没有修复项目中使用的依赖项,并且由于依赖项使用版本范围,所以突然之间得到了一个新版本。

顺便说一句,正如beingnurd所指出的,现在有更新的3.10.1版本修复了这个错误的依赖关系(参见org.eclipse.equinox.preferences-3.10.1.pom)。org.eclipse.equinox.preferences

如果您继续始终使用兼容范围的最新依赖项,则问题将为您解决。


现在,如果我们退后一步:

您正在尝试使用以下 JDT 版本:

<dependency>
    <groupId>org.eclipse.jdt</groupId>
    <artifactId>org.eclipse.jdt.core</artifactId>
    <version>3.20.0</version>
</dependency>

这对应于Eclipse版本(也称为内部)。2019-124.14


你的问题是eclipse项目(以及所有的依赖项)都在使用版本范围。如果您查看依赖项声明:org.eclipse.jdt.coreorg.eclipse.jdt.core

  • org.eclipse.platform:org.eclipse.core.resources:[3.12.0,4.0.0)
  • org.eclipse.platform:org.eclipse.core.runtime:[3.13.0,4.0.0)
  • org.eclipse.platform:org.eclipse.core.filesystem:[1.7.0,2.0.0)
  • org.eclipse.platform:org.eclipse.text:[3.6.0,4.0.0)

如果你什么都不做,Maven总是采取最新的:

今天(2022年6月),这将是:

  • org.eclipse.core.resources:3.16.100
  • org.eclipse.core.runtime:3.24.100
  • org.eclipse.core.filesystem:1.9.300
  • org.eclipse.text:3.12.0

图书馆出版时(2019年12月),这是:

  • org.eclipse.core.resources:3.13.600
  • org.eclipse.core.runtime:3.17.0
  • org.eclipse.core.filesystem:1.7.600
  • org.eclipse.text:3.10.0

当然,这是递归的,您需要对所有依赖项执行此操作。


让 Maven 始终选择最新的是有问题的:

  • 它阻止您创建可重现的构建,因为 maven 选择的依赖项取决于当天 maven central 上可用的依赖项。
  • 你需要解决冲突。
  • 您可能是第一个尝试组合的人。

这就是为什么我总是使用一组一起发布的项目。顺便说一句,这也是Eclipse项目本身的做法(通过使用P2更新站点和目标平台)。

我正在发布Maven BOM文件以修复版本:ECentral项目


这是你如何做到这一点:

  <repositories>
    <repository>
      <id>ecentral</id>
      <url>https://raw.githubusercontent.com/jmini/ecentral/HEAD/repo</url>
    </repository>
  </repositories>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>fr.jmini.ecentral</groupId>
        <artifactId>eclipse-platform-dependencies</artifactId>
        <version>4.14</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>org.eclipse.jdt</groupId>
      <artifactId>org.eclipse.jdt.core</artifactId>
      <!-- no version needed here, because it is defined in the BOM -->
    </dependency>
  </dependencies>

答案 2

因为我今天也遇到了这个问题,但是通过插件子依赖,我的临时解决方案是下载常规的org.osgi:org.osgi.service.prefs:jar:1.1.2并将其作为安装在本地存储库中。org.osgi.service:org.osgi.service.prefs:jar:1.1.2


推荐