You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复活基于SWT和Maven的旧Java项目并适配Java 1.8?

问题描述

我正在复活Java 1.5时代的旧代码,项目用Maven构建(我不熟悉Maven,版本可能较旧),依赖SWT技术(同样不熟悉)。目标是升级到Java 1.8并完成编译,已经修改了MANIFEST.MF中的Bundle-RequiredExecutionEnvironment: JavaSE-1.8,也把pom.xml里的<source>和<target>设为1.8。

执行Maven构建时出现大量错误,核心问题是SWT依赖无法解析:

[WARNING] The POM for swt:org.eclipse.jface_3.2.0:jar:R is missing, no dependency information available
[WARNING] The POM for swt:org.eclipse.swt.win32.win32.x86_3.2.0:jar:R is missing, no dependency information available
[WARNING] The POM for swt:org.eclipse.swt_3.2.0:jar:R is missing, no dependency information available
[WARNING] The POM for swt:org.eclipse.core.commands_3.2.0:jar:R is missing, no dependency information available
[...]
[ERROR] Failed to execute goal on project MyProject: Could not resolve dependencies for project MyGroupId:MyArtifactId:jar:0.01: The following artifacts could not be resolved: swt:org.eclipse.jface_3.2.0:jar:R, swt:org.eclipse.swt.win32.win32.x86_3.2.0:jar:R, swt:org.eclipse.swt_3.2.0:jar:R, swt:org.eclipse.core.commands_3.2.0:jar:R: Failure to find swt:org.eclipse.jface_3.2.0:jar:R in https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced

项目的相关依赖配置如下:

<dependency>
    <groupId>swt</groupId>
    <artifactId>org.eclipse.jface_3.2.0</artifactId>
    <version>R</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>swt</groupId>
    <artifactId>
        org.eclipse.swt.win32.win32.x86_3.2.0
    </artifactId>
    <version>R</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>swt</groupId>
    <artifactId>org.eclipse.swt_3.2.0</artifactId>
    <version>R</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>swt</groupId>
    <artifactId>org.eclipse.core.commands_3.2.0</artifactId>
    <version>R</version>
    <scope>compile</scope>
</dependency>

多年来SWT的仓库、groupId和artifactId都变了,很多旧版本已经找不到了。我试过更新依赖到新版本,但大多依赖更高版本的Java。想问有没有能在Java 1.8环境下运行的有效SWT依赖列表?

更新:我查了Eclipse仓库,发现:

  • org.eclipse.platform / org.eclipse.jface / 3.12.1 - 适配Java 8
  • org.eclipse.platform / org.eclipse.core.commands / 3.10.100 - 适配Java 11
  • org.eclipse.platform / org.eclipse.swt / 3.126.0 & 3.128.0 - 适配Java 17;JAR里没有class文件;没找到其他带实际JAR文件的版本
  • org.eclipse.platform / org.eclipse.swt / 3.127.0 & 3.128.0 - 适配Java 17;没找到其他带实际JAR文件的版本

我猜测原代码作者应该是下载了特定的SWT JAR包,手动放到本地仓库里的。


解决方案

针对Java 1.8环境,以下是可用的SWT及相关组件依赖配置,同时解决依赖解析问题:

1. 正确的SWT依赖配置(适配Java 8)

SWT从旧版本到现在的groupId、artifactId规则已经变更,Java 8兼容的最新稳定版本是3.108.0,对应的依赖需要区分操作系统和架构。以Windows x86为例,配置如下:

<!-- 先添加Eclipse仓库到pom.xml的<repositories>节点 -->
<repositories>
    <repository>
        <id>eclipse-releases</id>
        <url>https://repo.eclipse.org/content/groups/releases/</url>
    </repository>
</repositories>

<!-- SWT核心依赖(Windows 32位),64位替换为org.eclipse.swt.win32.win32.x86_64 -->
<dependency>
    <groupId>org.eclipse.platform</groupId>
    <artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
    <version>3.108.0</version>
    <scope>compile</scope>
</dependency>

<!-- JFace(适配Java 8的3.12.1版本) -->
<dependency>
    <groupId>org.eclipse.platform</groupId>
    <artifactId>org.eclipse.jface</artifactId>
    <version>3.12.1</version>
    <scope>compile</scope>
</dependency>

<!-- 核心命令组件:Java 8兼容的3.9.0版本 -->
<dependency>
    <groupId>org.eclipse.core</groupId>
    <artifactId>org.eclipse.core.commands</artifactId>
    <version>3.9.0</version>
    <scope>compile</scope>
</dependency>

说明:

  • 3.108.0是SWT最后一个支持Java 8的正式版本,后续版本均要求Java 11+
  • 不同操作系统需替换对应的artifactId:比如Linux 64位是org.eclipse.swt.gtk.linux.x86_64,macOS是org.eclipse.swt.cocoa.macosx.x86_64

2. 清理本地旧依赖缓存

如果原项目曾经手动安装过旧SWT JAR,先清理本地Maven仓库中swt组下的所有文件,避免干扰新依赖解析:

# Windows系统
rmdir /s /q %USERPROFILE%\.m2\repository\swt

# Linux/macOS系统
rm -rf ~/.m2/repository/swt

3. 强制更新依赖

执行Maven构建时加-U参数,强制刷新依赖缓存:

mvn clean install -U

4. 替代方案:手动安装旧SWT版本

如果代码依赖SWT 3.2.0的特定API无法升级,可以手动下载对应版本的JAR,安装到本地Maven仓库:

# 以org.eclipse.swt_3.2.0.jar为例
mvn install:install-file -Dfile=org.eclipse.swt_3.2.0.jar -DgroupId=swt -DartifactId=org.eclipse.swt_3.2.0 -Dversion=R -Dpackaging=jar

其他几个依赖包按同样方式执行即可。

内容的提问来源于stack exchange,提问作者Pixel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:23:19