Ric*_*k.X 44 java eclipse maven
今天,当我尝试安装我的 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]
Run Code Online (Sandbox Code Playgroud)
我尝试将1.1.0 org.osgi.service:org.osgi.service.prefs添加到项目中,但仍然无法解决这个问题。为了避免依赖项更新,我指定了几乎每个版本的依赖项,但今天仍然遇到此错误。这是我的 pom.xml:
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]
Run Code Online (Sandbox Code Playgroud)
有办法解决这个问题吗?
Jmi*_*ini 25
编辑:项目团队已知该问题,并在 GitHub 上跟踪为eclipse-equinox/equinox.bundles#54。
依赖关系:
<groupId>org.eclipse.platform</groupId>
<artifactId>org.eclipse.equinox.preferences</artifactId>
<version>3.10.0</version>
Run Code Online (Sandbox Code Playgroud)
这是您的传递依赖项之一,在其依赖项列表中引用此依赖项:
<dependency>
<groupId>org.osgi.service</groupId>
<artifactId>org.osgi.service.prefs</artifactId>
<version>[1.1.0,1.2.0)</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
来源:Maven Central 上的org.eclipse.equinox.preferences-3.10.0.pom 。
这是一个错误。正如 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>
Run Code Online (Sandbox Code Playgroud)
其中存在(注意不同groupId
)。
因为您没有修复项目中使用的依赖项,并且因为依赖项正在使用版本范围,所以突然您得到了一个新版本。
顺便说一句,正如beingnurd所指出的,现在有较新的版本3.10.1修复org.eclipse.equinox.preferences
了这个错误的依赖关系(请参阅参考资料org.eclipse.equinox.preferences-3.10.1.pom
)。
如果您继续始终使用兼容范围的最新依赖项,问题将为您解决。
现在,如果我们退一步:
您正在尝试使用以下 JDT 版本:
<dependency>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.20.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这对应于 Eclipse 版本2019-12
(4.14
内部也称为)。
您的问题是 Eclipse 项目(org.eclipse.jdt.core
以及所有依赖项)正在使用版本范围。如果您查看org.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 选择总是最新的是有问题的:
这就是为什么我总是使用一组一起发布的项目。顺便说一句,这也是 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>
Run Code Online (Sandbox Code Playgroud)
Sas*_*cha 12
因为我今天也遇到了这个问题,但是通过插件子依赖,我的临时解决方案是下载常规org.osgi:org.osgi.service.prefs:jar:1.1.2
并将其安装在本地存储库中作为org.osgi.service:org.osgi.service.prefs:jar:1.1.2
.
小智 8
您可以像这样排除依赖关系:
<dependency>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.24.0</version>
<exclusions>
<exclusion>
<groupId>org.osgi.service</groupId>
<artifactId>org.osgi.service.prefs</artifactId>
</exclusion>
</exclusions>
Run Code Online (Sandbox Code Playgroud)
所以这个失败的原因是依赖
<groupId>org.osgi.service</groupId> <artifactId>org.osgi.service.prefs</artifactId>
但 org.osgi.service 组不存在,而它只是 org.osgi 所以依赖关系应该看起来
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.prefs</artifactId>
Run Code Online (Sandbox Code Playgroud)