使用 SWT 和 Maven 复活旧的 Java 项目

问题描述 投票:0回答:1

我正在尝试复活 Java 1.5 时代的一些旧代码。 Maven(我不太熟悉)是构建工具,可能是一个较旧的主要版本。 旧代码也使用SWT,我也不太熟悉。

我想更新并使其编译为 1.8 代码。 我已将 MANIFEST.MF 更改为具有

Bundle-RequiredExecutionEnvironment: JavaSE-1.8
,并将 pom.xml 更改为
<source>
<target>
为 1.8。

当我运行 Maven 来构建时,它看起来像是一场灾难。 相关行似乎是:

[警告] swt:org.eclipse.jface_3.2.0:jar:R 的 POM 丢失,没有可用的依赖信息
[警告] swt:org.eclipse.swt.win32.win32.x86_3.2.0:jar:R 的 POM 丢失,没有可用的依赖信息
[警告] swt:org.eclipse.swt_3.2.0:jar:R 的 POM 丢失,没有可用的依赖信息
[警告] swt:org.eclipse.core.commands_3.2.0:jar:R 的 POM 丢失,没有可用的依赖信息
[...]
[错误] 无法在项目 MyProject 上执行目标:无法解析项目 MyGroupId:MyArtifactId:jar:0.01 的依赖项:无法解析以下工件: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: 在 https 中找不到 swt:org.eclipse.jface_3.2.0:jar:R: //repo.maven.apache.org/maven2 已缓存在本地存储库中,直到中心更新间隔结束后才会重新尝试解析或者强制更新

以下是相关依赖:

        <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>

看起来存储库、groupIds 和artifactIds 多年来已经发生过变化,许多版本不再可用。 我尝试将依赖项更新到较新的版本,但大多数版本都依赖于较新的 Java 版本。

是否存在可在 Java 1.8 下工作的 SWT 活动依赖项列表?

maven swt
1个回答
0
投票

更新和构建一个依赖于 Java 1.5 时代的项目是相当棘手的,至少在使用 1.8 这样相对现代的 Java 版本时是这样。现在,让我向您展示如何解决您面临的 Maven 和 SWT 依赖问题。


1. 理解问题

POM
警告和错误表明Maven无法在配置的存储库中找到所需的工件(
swt:org.eclipse.jface_3.2.0
等)。为什么: 这些工件可能未托管在默认的 Maven 中央存储库中。   您指定的
R
版本有问题,因为 Maven 需要正确的版本号,例如
3.2.0
。   多年来,Eclipse SWT 工件进行了多次重组,组 ID、工件 ID 和版本也发生了变化。


2. 解决方案:使用更新的 SWT 依赖项

您可以使用与 Java 1.8 兼容的更新版本的 SWT 库。 Eclipse 在 Eclipse Public Maven Repository 中维护 Maven 工件。

将现有的 SWT 依赖项替换为以下内容:

<dependency>
    <groupId>org.eclipse.swt</groupId>
    <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
    <version>3.10.2</version> <!-- Or another compatible version -->
</dependency>
<dependency>
    <groupId>org.eclipse.jface</groupId>
    <artifactId>org.eclipse.jface</artifactId>
    <version>3.10.2</version> <!-- Or another compatible version -->
</dependency>
<dependency>
<groupId>org.eclipse.core</groupId>
    <artifactId>org.eclipse.core.commands</artifactId>
    <version>3.10.2</version> <!-- Or another compatible version -->
</dependency>

3. 添加 Eclipse Maven 存储库

将 Eclipse 存储库添加到

pom.xml
<repositories>
部分下:

<repositories>
    <repository>
        <id>eclipse-releases</id>
        <url>https://repo.eclipse.org/content/groups/releases/</url>
    </repository>
</repositories>

4. 查找兼容的 SWT 版本

如果

3.10.2
不适合您,请确定与 Java 1.8 兼容的版本。 SWT 版本控制与 Eclipse 版本相关,3.10.x 之后的版本通常应与 Java 1.8 兼容。

您可以在此处浏览可用版本:Eclipse Public Maven Repository


5. 验证更改

更新依赖项和存储库后:

  • 运行
    mvn clean install
    刷新依赖项缓存并测试构建。
  • 如果问题仍然存在,请检查本地 Maven 存储库 (
    ~/.m2/repository
    ) 并通过运行强制更新:
    mvn clean install -U
    

6. 替代方案:手动下载 SWT JAR

如果 Maven 集成太麻烦,您可以:

  1. Eclipse 的下载页面手动下载适当的 SWT JAR 文件。
  2. 将它们作为系统范围的依赖项添加到您的项目中:
<dependency>
    <groupId>org.eclipse.swt</groupId>
    <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
    <version>3.10.2</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/libs/org.eclipse.swt.win32.win32.x86_64-3.10.2.jar</systemPath>
</dependency>
  1. 将 JAR 放入项目中的本地
    libs
    文件夹中。

  1. 最后的笔记
  • 使用正确的版本 (
    3.x.x
    ) 而不是
    R
    以获得更好的兼容性。
  • 如果这是一个较旧的项目,那么您需要更广泛地测试应用程序,因为新版本的 SWT 可能会更改 API。
  • 如果 Java 1.8 中的依赖关系非常严格,请升级到更高版本的 Java。

这样,您的项目就会得到复兴和现代化!

© www.soinside.com 2019 - 2024. All rights reserved.